javaWeb应用的生命周期

来源:互联网 发布:软件售后服务流程图 编辑:程序博客网 时间:2024/05/18 01:55

首先介绍两个概念:

servlet容器-->可以理解为可以放很多servlet的盒子,所以叫容器   例如tomcat

servlet-->-一个类,应用的入口。

Web应用在web.xml中配置的servlet。一个应用可以有多个servlet,一般只有一个,例如使用springmvc的ervlet:是org.springframework.web.servlet.DispatcherServlet,

当然也可以自己建一个,像底下的实例,实现servlet接口就行啦。

Servlet的基本方法

init(ServletConfig config);   初始化调用

service(ServletRequest request, ServletResponse response)   用户每次访问调用

destroy();  销毁时调用

web应用的访问过程:

                                              _tomcat_________

用户 -------->浏览器--------> |       应用 servlets  |         

                                              |_______________ |           

浏览器将用户的信息发送给servlet容器,容器再根据配置的servlet进行处理,将结果返回给用户

 一个tomcat里可以放n个应用,一个应用也可以有n个servlet


javaweb应用的生命周期是由Servlet容器来控制的,包括以下以下三个步骤

1.启动

tomcat启动的时候会自动启动放在/webapps里的Web应用,步骤如下

(1).将web.xml加载到内存中

(2)为应用创建ServletContext对象<---一个应用一个,应用的所有的servlet共享一个

(3).初始化Filter  (过滤器,拦截一些请求)

(4).初始化Servlet init()(web.xml中配置<load-on-startup>值不小于0的,负数的servlet是在用户初次调用的时候才初始化)

2.运行

servlet处于待命状态,调用servlet的service()方法

3.终止

(1) 销毁所有运行时servlet destroy()

(2) 销毁Filter

(3) 销毁与JavaWeb应用相关的对象,如ServletContext


以下实例来自《Tomcat与Java Web开发技术详解》一书

1.搭建好一个web工程

2.创建servlet

package com.my.demo.system;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.GenericServlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class lifeServlet extends GenericServlet {private int initVar=0;private int serviceVar=0;private int destroyVar=0;private String name;public void init(ServletConfig config) throws ServletException{super.init(config);name=config.getServletName();initVar++;System.out.println(name+"init():Servlet被初始化了"+initVar+"次");}public void destory() {destroyVar++;System.out.println(name+"destory():Servlet被销毁了"+destroyVar+"次");}@Overridepublic void service(ServletRequest request, ServletResponse response)throws ServletException, IOException {serviceVar++;System.out.println(name+"service():Servlet共响应了"+serviceVar+"次");String content1="初始化:"+initVar;String content2="响应:"+serviceVar;String content3="销毁:"+destroyVar;PrintWriter out=response.getWriter();out.print("<html><head><title>LifeServlet</title>");out.print("</head><body>");out.print("<h1>"+content1+"</h1>");out.print("<h1>"+content2+"</h1>");out.print("<h1>"+content3+"</h1>");out.print("</body></html>");out.close();}}

3.修改web.xml,配置两个Servlet

  <servlet>    <servlet-name>demo</servlet-name>      <servlet-class>com.my.demo.system.lifeServlet</servlet-class>      <load-on-startup>1</load-on-startup>    </servlet>  <servlet-mapping><servlet-name>demo</servlet-name><url-pattern>/demo</url-pattern>  </servlet-mapping>      <servlet>    <servlet-name>demo1</servlet-name>      <servlet-class>com.my.demo.system.lifeServlet</servlet-class>  </servlet>  <servlet-mapping><servlet-name>demo1</servlet-name><url-pattern>/demo1</url-pattern>  </servlet-mapping>
4.启动,分别访问 localhost:8080/应用名/demo 和 localhost:8080/应用名/demo1