`
cpf1985
  • 浏览: 76834 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

servlet过程

阅读更多
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)初始化

[color=orange]在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>元素。 [/color]


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

AjaxServlet 类
Java代码

   1. package vivi.servlet.ajax;  
   2.   
   3. import java.io.IOException;  
   4. import java.io.PrintWriter;  
   5. import java.util.Random;  
   6.   
   7. import javax.servlet.ServletException;  
   8. import javax.servlet.http.HttpServlet;  
   9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. public class AjaxServlet extends HttpServlet{  
  13.       
  14.     private static final String CONTENT_TYPE = "text/xml;charset=gb2312";  
  15.   
  16.     public void init()throws ServletException{}  
  17.       
  18.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  19.             throws ServletException,IOException{  
  20.         response.setContentType(CONTENT_TYPE);  
  21.         response.setHeader("Cache-Control", "no-cache");  
  22.         response.setDateHeader("Expires", 0);  
  23.           
  24.         PrintWriter out = response.getWriter();  
  25.         String action = request.getParameter("action");  
  26.           
  27.         if("send".equals(action)){  
  28.             Random random = new Random();  
  29.             String AA = Integer.toString(Math.abs(random.nextInt()));  
  30.             String BB = Integer.toString(Math.abs(random.nextInt()));  
  31.             String CC = Integer.toString(Math.abs(random.nextInt()));  
  32.             String DD = Integer.toString(Math.abs(random.nextInt()));  
  33.               
  34.             StringBuffer sb = new StringBuffer();  
  35.               
  36.             sb.append(AA);  sb.append("@@@");  
  37.             sb.append(BB);  sb.append("@@@");  
  38.             sb.append(CC);  sb.append("@@@");  
  39.             sb.append(DD);  
  40.             out.write(sb.toString());  
  41.             out.close();  
  42.         }         
  43.     }  
  44. }  

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代码

   1. <html>  
   2.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
   3.     <head>  
   4.         <title>AjaxServlet.html</title>  
   5.     </head>     
   6.     <script type="text/javascript">  
   7.         var xhr = null;  
   8.           
   9.         function getResult(){             
  10.             var url = "/demo/AajaxServlet?action=send";           
  11.               
  12.             if(window.XMLHttpRequest){  
  13.                 xhr = new XMLHttpRequest();                   
  14.             }else if(window.ActiveXObject){  
  15.                 xhr = new ActiveXObject("Microsoft.XMLHTTP");                 
  16.             }  
  17.               
  18.              if(xhr){   
  19.                  xhr.open("GET",url, true);   
  20.                  xhr.onreadystatechange = complete;   
  21.                  xhr.send(null);   
  22.              }        
  23.         }         
  24.         //分析返回的文本文档  
  25.         function complete(){  
  26.             if(xhr.readyState == 4){  
  27.                 if(xhr.status == 200){  
  28.                     var strResult = unescape(xhr.responseText);  
  29.                     var arrResult = strResult.split("@@@");  
  30.                       
  31.                     RemoveRow();  //删除以前的数据.  
  32.                     num1 = arrResult[0];        num2 = arrResult[1];   
  33.                     num3 = arrResult[2];        num4 = arrResult[3];  
  34.                           
  35.                     row1= tb.insertRow();  
  36.                     cell1 = row1.insertCell();  cell1.innerText = num1;  
  37.                     cell2 = row1.insertCell();  cell2.innerText = num2;  
  38.                     row2= tb.insertRow();  
  39.                     cell3 = row2.insertCell();  cell3.innerText = num3;  
  40.                     cell4 = row2.insertCell();  cell4.innerText = num4;                                       
  41.                 }else{  
  42.                     alert("this was a problem with the request");  
  43.                 }  
  44.             }  
  45.         }         
  46.         //保留第一行表头,其余数据均删除.  
  47.         function RemoveRow(){  
  48.             var iRows = tb.rows.length;  
  49.             for(var i=0;i< iRows-1;i++){  
  50.                 tb.deleteRow(1);  
  51.             }  
  52.         }         
  53.         //2秒自动刷新一次,2秒取得一次数据.  
  54.         function MyShow(){  
  55.             timer = window.setInterval("getResult()",2000);  
  56.         }         
  57.     </script>   
  58.     <body onload="MyShow()">  
  59.         <table width="47%" height="23" border="0" cellpadding="1" cellspacing="0" id="tb">  
  60.             <tr>  
  61.                 <td>代码</td>  
  62.                 <td>价格</td>  
  63.             </tr>  
  64.         </table>   
  65.         <form>  
  66.             <p>输入股票代码:  
  67.                 <input type="text" size="14" name="phone" id="phone"/>  
  68.             </p>  
  69.             <p>你交易的数量:</p>  
  70.             <p><textarea name="order" rows="6" cols="50" id="order"></textarea></p>  
  71.             <p><input type="submit" value="提交" id="submit" /></p>  
  72.         </form>  
  73.     </body>   
  74. </html>  

<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 onload="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代码

   1. <?xml version="1.0" encoding="UTF-8"?>  
   2. <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">  
   3.   <display-name>demo</display-name>  
   4.     
   5.     <display-name>Welcome to Tomcat</display-name>  
   6.     <description>Welcome to Tomcat</description>  
   7.       
   8.     <servlet>  
   9.         <servlet-name>AajaxServlet</servlet-name>  
  10.         <servlet-class>vivi.servlet.ajax.AjaxServlet</servlet-class>  
  11.     </servlet>  
  12.     <servlet-mapping>  
  13.         <servlet-name>AajaxServlet</servlet-name>  
  14.         <url-pattern>/AajaxServlet</url-pattern>  
  15.     </servlet-mapping>   
  16.     
  17. </web-app>  

分享到:
评论

相关推荐

    servlet执行过程与生命周期

    servlet的执行过程与生命周期心得体会

    第一个servlet开发全过程

    使用oracle的jdeveloper开发一个servlet应用程序的截图及简述的完整全过程。

    servlet过滤器配置及运行过程.doc

    servlet过滤器配置及运行过程,servlet实例用法。

    servlet 8个最基础demo

    我们老师教学演示的servlet例子 从简单到难文件夹有八个demo供初学者学习 servlet01 servlet02 servlet03 servlet04 servlet05 servlet06 servlet07 servlet08 servlet是在服务器上运行的小程序。...实现过程

    java Servlet对表单的处理过程

    java Servlet对表单的处理过程 java Servlet对表单的处理过程 java Servlet对表单的处理过程

    servlet编写、部署、运行全过程

    servlet编写、部署、运行全过程。该资料就能解决这个问题。

    Servlet 制作登陆小程序及的使用SQL中简单存储过程

    Servlet 制作登陆小程序及的使用SQL中简单存储。。。。JAVAMAIL 的使用

    Servlet运行原理图

    Servlet运行原理图,描述servlet运行的步骤方向和servlet运行过程

    servlet原理和实践

    讲述了java EE项目搭建,以及servlet的实现原理及实践过程

    Servlet项目实践 实现学生信息系统的全部代码

    二、Servlet的运行过程 Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:  ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。 ...

    如何运行Servlet程序

    servlet运行方法,servlet开发过程

    09配置+servlet+高速缓存

    过程 在管理控制台中,单击控制台导航树中的服务器 &gt; 应用程序服务器 &gt; server_name &gt; Web 容器设置 &gt; Web 容器。 选择“配置”选项卡下的启用 servlet 高速缓存。 单击应用或确定。 重新启动 WebSphere ...

    servlet-api.jar

    比如从请求信息中可以获取客户端的ip,用户提交的信息等等,从响应信息中可以获取客户端的输出流,响应类型等等,当然中间的过程是由servlet容器封装好的,等我们开发servlet时会直接使用这些接口来编写具体的业务...

    实验四 JavaBean及Servlet使用

    一、实验目的 1.熟悉JavaBean的开发过程。 2.掌握Servlet的开发过程。 二、实验学时 2H 三、实验性质 综合性实验

    servlet 5分钟入门理解

    servlet web.xml 运行过程

    Servlet 工作原理解析

    Servlet 工作原理解析 Servlet 容器的启动过程 Web 应用的初始化工作 创建 Servlet 实例

    servlet登录(带数据库)

    servlet 登录到注销整个过程,带数据库

    servlet和jsp学习指南

    《Servlet和JSP学习指南》是系统学习Servlet和JSP的必读之作。...第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet3中的两项新特性;第18章介绍Struts 2的用法。

    JSP & Servlet学习笔记

    本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP & Servlet时遇到的概念、操作、应用或认证考试等问题及解决方案。, 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做...

    用servlet写的文件上传及下载功能带进度条

    自己用servlet写的文件上传及下载功能带进度条 主要用到两个jar:commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar 内容介绍: com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 ...

Global site tag (gtag.js) - Google Analytics