Servlet概念性回顾(结合Ajax)

Servlet基本概念回顾:

Servlet生命周期

Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。Servlet的生命周期包含了下面4个阶段:

(1)加载和实例化

Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建 Servlet实例。当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统 或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建 Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方 法。

(2)初始化

在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完 成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet 实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。

(3)请求处理

Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成 功执行。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调 用ServletResponse对象的方法设置响应信息。

(4)服务终止

当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数 据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器 会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的 Servlet实例。

如果需要让Servlet容器在启动时即加载Servlet,可以在web.xml文件中配置<load-on-startup>元素。

 

下面以一个Servlet实例,温故Servlet具体实际操作流程:

AjaxServlet 类

package vivi.servlet.ajax;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AjaxServlet extends HttpServlet{
	
	private static final String CONTENT_TYPE = "text/xml;charset=gb2312";

	public void init()throws ServletException{}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException,IOException{
		response.setContentType(CONTENT_TYPE);
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		
		PrintWriter out = response.getWriter();
		String action = request.getParameter("action");
		
		if("send".equals(action)){
			Random random = new Random();
			String AA = Integer.toString(Math.abs(random.nextInt()));
			String BB = Integer.toString(Math.abs(random.nextInt()));
			String CC = Integer.toString(Math.abs(random.nextInt()));
			String DD = Integer.toString(Math.abs(random.nextInt()));
			
			StringBuffer sb = new StringBuffer();
			
			sb.append(AA);  sb.append("@@@");
			sb.append(BB);  sb.append("@@@");
			sb.append(CC);  sb.append("@@@");
			sb.append(DD);
			out.write(sb.toString());
			out.close();
		}		
	}
}

 ajaxServlet页面

<html>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<head>
		<title>AjaxServlet.html</title>
	</head>	
	<script type="text/javascript">
		var xhr = null;
		
		function getResult(){			
			var url = "/demo/AajaxServlet?action=send";			
			
			if(window.XMLHttpRequest){
				xhr = new XMLHttpRequest(); 				
			}else if(window.ActiveXObject){
				xhr = new ActiveXObject("Microsoft.XMLHTTP"); 				
			}
			
			 if(xhr){ 
			     xhr.open("GET",url, true); 
			     xhr.onreadystatechange = complete; 
			     xhr.send(null); 
			 } 		
		}		
		//分析返回的文本文档
		function complete(){
			if(xhr.readyState == 4){
				if(xhr.status == 200){
					var strResult = unescape(xhr.responseText);
      				var arrResult = strResult.split("@@@");
      				
      				RemoveRow();  //删除以前的数据.
				    num1 = arrResult[0]; 	    num2 = arrResult[1]; 
				    num3 = arrResult[2];	    num4 = arrResult[3];
      					
      				row1= tb.insertRow();
			      	cell1 = row1.insertCell(); 	cell1.innerText = num1;
			      	cell2 = row1.insertCell(); 	cell2.innerText = num2;
			      	row2= tb.insertRow();
			      	cell3 = row2.insertCell(); 	cell3.innerText = num3;
			      	cell4 = row2.insertCell(); 	cell4.innerText = num4;      								
				}else{
					alert("this was a problem with the request");
				}
			}
		}		
		//保留第一行表头,其余数据均删除.
		function RemoveRow(){
    		var iRows = tb.rows.length;
    		for(var i=0;i< iRows-1;i++){
       			tb.deleteRow(1);
    		}
 		} 		
 		//2秒自动刷新一次,2秒取得一次数据.
 		function MyShow(){
  			timer = window.setInterval("getResult()",2000);
  		}		
	</script>	
	<body οnlοad="MyShow()">
		<table width="47%" height="23" border="0" cellpadding="1" cellspacing="0" id="tb">
			<tr>
				<td>代码</td>
				<td>价格</td>
			</tr>
		</table> 
		<form>
			<p>输入股票代码:
				<input type="text" size="14" name="phone" id="phone"/>
			</p>
			<p>你交易的数量:</p>
			<p><textarea name="order" rows="6" cols="50" id="order"></textarea></p>
			<p><input type="submit" value="提交" id="submit" /></p>
		</form>
	</body> 
</html>

 web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>demo</display-name>
  
  	<display-name>Welcome to Tomcat</display-name>
	<description>Welcome to Tomcat</description>
	
	<servlet>
		<servlet-name>AajaxServlet</servlet-name>
		<servlet-class>vivi.servlet.ajax.AjaxServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>AajaxServlet</servlet-name>
		<url-pattern>/AajaxServlet</url-pattern>
	</servlet-mapping> 
  
</web-app>
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值