servlet生命周期与工作原理

来源:互联网 发布:mac怎么关掉死机程序 编辑:程序博客网 时间:2024/05/20 13:05
加载 :读取web.xml配置文件中的信息,加载类,生成.class文件
【实例化】:构造指定的Servlet对象
【初始化】 init()
【服务】  service(),把创建的HttpRequest对象和HttpResponse对象作为参数传进去,通过调用他们各自的相关方法获取请求信息,生成相应数据,把相应结果返回给web客户端。
【销毁】 destory()


servlet工作原理:
1、Web Client 向Servlet容器(Tomcat)发出Http请求


2、Servlet容器接收Web Client的请求


3、Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中


4、Servlet容器创建一个HttpResponse对象


5、Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数


     传给 HttpServlet对象


6、HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息,req.getattribute()等。


7、HttpServlet调用HttpResponse对象的有关方法,生成响应数据 resp.getRequestDispatcheer("").forward(req,resp); resp.sendRedirect("");


8、Servlet容器把HttpServlet的响应结果传给Web Client


运行在JVM上的每一个web应用程序都有一个与之对应的Servlet上下文(Servlet运行环境)
Servlet API提供ServletContext接口用来表示Servlet上下文,ServletContext对象可以被web应用程序中所有的Servlet和jsp访问
ServletContext对象是web服务器中的一个已知路径的根
如http://localhost:8080/ch08,所以/ch08被称为上下文根路径,那么所有以/ch08开始的请求路径都会被发送到与此上下文关联的web应用程序中


如何获取ServletContext对象
由外面的关系图可知:使用ServletConfig的getServletContext()


使用GenericServlet的getServletContext()


使用ServletContext的getContext(String uri)可以获取其他web应用程序的上下文对象
要完成请求转发,那么就需要使用javax.servlet. RequestDispatcher接口


在web.xml文件中为servlet设置了<load-on-startup>元素
 
<servlet>  
<servlet-name>servlet1</servlet-name> 
<servlet-class>servlet.servlet1</servlet-class> 
<load-on-startup>0</load-on-startup> 
</servlet> 
说明:
  
1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
2)它的值必须是一个整数,表示servlet应该被载入的顺序
3)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
4)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
5)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
6)当值相同时,容器就会自己选择顺序来加载。
0 0