您的位置:首页 > 其它

Servlet工作原理

2016-04-06 21:04 183 查看
一、Servlet执行过程

   当客户端向服务器发送一个http请求后,web服务器会将这个请求交给Servlet容器去处理,Servlet容器首先对请求的URL进行解析并根据web.xml配置文件找到对应的Servlet去处理,同时将Request、Response对象传递给它,Servlet通过请求对象可知道客户端的请求者、请求信息等,Servlet处理完请求后会把所需要的信息放入Response对象中并返回给客户端,Servlet一旦处理请求,Servlet容器会刷新Response对象,并把控制权重新返回给web服务器。

二、Servlet生命周期

   1、初始化阶段,调用init()方法;

   当客户端第一次向服务器请求Servlet时,Servlet容器启动时会自动装载某些Servlet,Servlet类源文件被更新,重新装载Servelt,Servlet被装载后,Servlet容器创建一个Servelt实例并且调用Servlet的init()方法,在Servlet生命周期内,init()方法只调用一次;

   Servlet容器启动时会自动装载某些Servlet,实现它,只需要在web.xml文件中配置如下代码:

<!--
标记Servlet容器是否启动时就加载这个Servlet,当值>=0时,表示Servlet容器启动时就加载这个Servlet,
当数值为负数或者没有指定是,表示Servlet容器在该Servlet选择时才加载,正数的值越小,启动该Servlet的优先级越高。
-->
<load-on-startup>1</load-on-startup>
   2、响应请求阶段,调用service()方法;

   服务器装载并初始化Servlet后,Servlet容器会创建ServletRequest对象与ServletResponse对象,然后调用Servlet的service()方法,service()方法从ServletRequest对象中获取客户请求信息,处理该请求,并通过ServletRespons对象向客户端返回响应信息。在Servlet生命周期内,service()方法调用多次;

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
// 页面跳转
request.getRequestDispatcher("/alluser.jsp").forward(request, response);
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
   3、服务器终止阶段,调用destroy()方法;

   当web应用被终止、Servlet容器终止运行、Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroty()方法来释放Servlet所占用的资源,在Servlet整个生命周期内,destroty()方法被调用一次。

   Servlet生命周期测试:

public void init() throws ServletException {
System.out.println("我是init()方法,我在Servlet生命周期中只执行一次...");
super.init();
}

public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("我是service()方法,我负责客户端的request请求与response响应,在Servlet生命周期中执行多次...");
super.service(arg0, arg1);
}

public void destroy() {
System.out.println("我是destrot()方法,在服务器停在或者卸载时执行此方法,我负责释放资源,在Servlet生命周期中执行一次...");
super.destroy();
}

  运行效果:



三、Servlet工作原理

 客户端发送一个请求,Servlet调用service()方法对请求进行响应,通过源码可见,service()方法对请求的方式进行了匹配,选择调用doGet、doPost等这些方法,然后在进入对应的方法中调用逻辑的方法,实现对客户端的响应,在Servlet接口中是没有doGet、doPost等等这些方法,HttpServlet中定义了这些方法,但是返回error信息,所以,每次定义一个Servlet时,都必须实现doGet或者doPost等这些方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Servlet