jsp+servlet三、以servlet理解服务端请求处理与请求的状态分发

一、在eclipse中创建java web项目

记得创建时点next添加web.xml文件,配置请求的数据需要写入到web.xml文件中

1、添加servlet.jar包

servlet-api.jar servlet.jar

2、创建请求处理Action类

创建action类,这个类继承HttpServlet ,添加版本号,并重写service/doGet/doPost方法,service可以处理get/post方式提交的请求,所以一般都是直接重写service方法,

3、状态分发原理

在提交请求时给定参数state,由state来指定请求进入到service方法后具体执行的请求处理方法,从而实现同一个请求使用不同参数实现同一模块的不同功能。

@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		
		String state=req.getParameter("state");
		if(state.equals("test")){
			this.test(req, resp);
		}
		else if(state.equals("login")){
			this.login(req, resp);
		}
	}

4、请求配置


      ajax1
      com.lattice.ajax01.Ajax
      ajax1
      /ajax

二、向前台返回数据

1、将数据存储到request作用域中

2、将数据存储在session作用域中

HttpSession session=req.getSession();

存储在request或session作用域中的数据都可以在前台通过C标签(将在下一篇博文中演示)或者S标签来获取,当然,也可以写java代码获取,但是这样写的话会使得jsp文件中大量存在java代码,导致后期难以维护和修改。

3、在处理ajax请求时,需要创建out对象,并且一般想前台传递的是json或者json数组

PrintWriter out=resp.getWriter();

同时此处贴出Ajax的一个例子(包含js原生实现和jquery实现):


js原生实现ajax

js原生实现Ajax
		//源生态的JS代码完成Ajax操作(动态无刷新),异步提交。
		//ActiveXObject("microsoft.XMLHTTP");
		var request=new XMLHttpRequest();//针对非IE浏览器
		var url="<%=path%>/ajax";//url 表示请求提交的路径   URL统一资源定位符  URI 统一资源描述符 
		request.open("post",url,true);//准备打开一个ajax请求
		request.setRequestHeader("content-type","application/x-www-form-urlencoded");
		request.send("state=test&user=lattice");//方式ajax请求   get方式不能传递参数 。
		//onreadystatechange 表示判断状态是否发生改变 。
		request.onreadystatechange=function (){
			//readyState 表示相应状态   4表示相应完成
			if(request.readyState==4){
				var span=document.getElementById("span1");
				//之后交互完成之后 才可以接受数据 。request.responseText  接受数据
				var values=request.responseText;//responseText;
				var newJsons=eval(values);
				
				span.innerHTML+="
"+newJsons[0].name+newJsons[0].age; //span.innerHTML+=values[0].name+values[0].age+"
"; } };

jquery Ajax 实现:

$.ajax({
				   type: "POST",
				   url: "<%=path %>/activity",
				   data: "state=queryExecution&activity_id="+$("#execution_activity_id").val(),
				   dataType : "json",
				   success: function(msg){
					   //alert(msg);
				     var jsons=eval(msg);
				     //jquery遍历数组
				     $.each(jsons,function(index,item){
				    	$("#activity_num").val(item.activity_num);
				     });
				   }
				}); 



你可能感兴趣的:(java,Web)