`
cpf1985
  • 浏览: 78289 次
  • 性别: 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>  

分享到:
评论

相关推荐

    深入 Java Servlet 网络编程

    三、Servlet 过程 3.1 请求处理:当客户端发起一个HTTP请求,Servlet容器(如Tomcat)接收到请求后,通过映射配置找到对应的Servlet,调用其service()方法。 3.2 doGet()与doPost():Servlet通过重写doGet()和...

    J2EE学习,servlet学习

    【描述】中的"自己在平常学习中积累下来的,希望有所帮助"表明这是一份个人学习资料集合,包含了作者在学习J2EE和Servlet过程中积累的知识和经验,旨在分享并帮助其他学习者。 【标签】"java api,servlet,js,...

    SERVLET代码

    在"上课的笔记"这个标签下,这个压缩包可能包含了作者学习Servlet过程中的重要笔记、代码示例和练习,帮助回顾和理解Servlet的核心概念和实际应用。通过对这些代码的阅读和实践,可以深入掌握Servlet的运作机制和...

    servlet执行过程与生命周期

    ### Servlet执行过程与生命周期详解 在探讨Servlet的执行过程与生命周期之前,我们首先明确Servlet的基本概念:Servlet是一种服务器端的Java应用程序,它处理客户端发送的请求,并生成动态响应。Servlet通常运行在...

    第一个servlet开发全过程

    ### 第一个Servlet开发全过程 #### 一、概述 本文将详细介绍如何使用Oracle的JDeveloper工具来开发一个简单的Servlet应用程序,并通过一系列步骤展示整个过程。Servlet技术是Java Web开发中的核心组成部分之一,它...

    SERVLET资源

    【描述】"我收集的一些有用的东西,打包发布"表明这些文档是由一位热心的IT从业者精心整理的,他/她将自己在学习和实践Servlet过程中积累的知识点和经验分享出来,供他人参考和学习,体现了IT社区的共享精神。...

    Servlet学习笔记

    ### Servlet学习笔记 #### 一、JavaWeb 开发环境搭建 ...以上内容为个人学习Servlet过程中总结的重要知识点,涵盖了从开发环境搭建、Servlet基本概念到具体实践等多个方面,希望能对学习Servlet技术的同学有所帮助。

    手工编写Servlet的详细过程+实例

    在这个"手工编写Servlet的详细过程+实例"中,我们将深入探讨如何从零开始创建一个Servlet,包括Servlet的生命周期、部署描述符的配置以及实际编程步骤。首先,我们来理解Servlet的基本概念。 Servlet是一种Java类,...

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

    ### Servlet编写、部署、运行全过程详解 #### 一、Servlet基础知识概述 在开始详细介绍Servlet的编写、部署与运行过程之前,我们首先需要了解一些基本概念。 - **Servlet**:Servlet是一种Java技术,它用于扩展...

    对jsp、servlet的学习总接.

    描述中提到的"NULL 博文链接:https://holic-xm.iteye.com/blog/842669"表明这是一个博客文章的链接,虽然具体内容未提供,但可以推测这篇文章可能包含了作者在学习JSP和Servlet过程中的经验总结、常见问题、最佳...

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    - 使用Maven或Gradle等构建工具时,可以在pom.xml或build.gradle文件中添加对应的依赖,这样在构建过程中会自动下载并引入这些库。 5. **Servlet生命周期** - 初始化:当Servlet首次被请求或者在web.xml中配置了`...

    servlet笔记,servlet的总结

    在处理请求的过程中,Servlet可能会使用到各种资源,如数据库连接、文件流等。使用完这些资源后,应及时关闭或释放,以避免资源泄露和性能问题。合理管理资源对于保持服务器稳定运行至关重要。 #### 十、结论 ...

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

    Servlet是Java Web开发中的核心组件,...以上就是基于Servlet制作登录小程序并结合SQL存储过程以及JavaMail进行邮箱验证的基本流程和关键知识点。实际开发中,还需要考虑安全性,如密码哈希、SQL注入防护、异常处理等。

    servlet api 与servlet src

    在开发过程中,理解Servlet API和源码对于提高代码质量、优化性能以及解决问题都至关重要。通过对Servlet API的深入学习,开发者可以更好地掌握Web应用程序的架构设计和实现,从而提升开发效率和应用性能。

    java Servlet对表单的处理过程

    本篇将详细讲解Java Servlet对表单数据的处理过程。 1. 表单提交 首先,HTML表单通过`&lt;form&gt;`标签定义,表单数据由用户填写并提交。表单的提交方式通常有两种:GET和POST。GET方式将数据附加到URL后面,而POST方式...

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

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

    Servlet基础知识总结

    #### 二、Servlet的运行过程 Servlet的运行过程主要包括以下几个步骤: 1. **客户端发起HTTP请求**:客户端通过浏览器或其他工具向服务器发送HTTP请求。 2. **Web容器接收请求**:服务器上的Web容器接收到这个请求...

    Servlet-Servlet生命周期

    ### Servlet生命周期详解 #### 一、引言 在Java Web开发中,Servlet作为一种重要的技术,被...在实际开发过程中,合理利用Servlet的生命周期特性可以帮助我们更好地管理资源、提高系统性能。希望本文能对你有所帮助。

    Servlet

    容器负责Servlet的加载、初始化、服务和销毁过程,以及线程安全问题。开发者无需关心这些细节,只需关注业务逻辑。 四、Servlet配置 在Web应用的`web.xml`配置文件中,可以声明Servlet,指定Servlet类、URL映射、...

Global site tag (gtag.js) - Google Analytics