欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javaWeb应用的生命周期

程序员文章站 2022-05-22 20:28:58
...

首先介绍两个概念:

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+"次");
	}
	
	@Override
	public 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