博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet的生命周期总结及虚拟路径的配置方法
阅读量:2439 次
发布时间:2019-05-10

本文共 2899 字,大约阅读时间需要 9 分钟。

Servlet的生命周期的定义:

Servlet是使用java Servlet应用程序设计接口及相关类和方法的java程序。

Servlet的生命周期过程:

Servlet的生命周期主要分为3个阶段;

  • 初始化阶段:检测web服务器中是否存在Servlet实例,若不存在,则装载Servlet类并创建Servlet实例,调用Servlet的init( config)初始化方法;
  • 服务阶段:初始化完毕,调用Servlet的service( req, res)方法响应客户端的请求;
  • 销毁阶段:服务器调用Servlet的destroy()方法移除servlet对象;

注意:init()方法只有在Servlet第一次被请求加载的时候被调用一次,当有客户发出请求Servlet服务时,Web服务器将启动一个新的线程,在该线程中,调用service方法响应客户的请求;在Servlet的整个生命周期内,Servlet的init方法只被调用一次。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。

若对Servlet生命周期有啥不懂的可以参考以下图片:

接下来举一个简单的描述Servlet生命周期的实例,下面是代码:

 分为两步:第一步编写Servlet的java程序;

package cn.itcast.servlet;import java.io.IOException;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class ServletLifeDemo implements Servlet {/** * Servlet实例被创建后,调用init方法进行初始化 * Servlet什么时候被创建呢? * 		*并不是服务器一启动,实例就创建,第一次访问的时候,实例才被创建。 * init方法调用几次? * 		*只被调用一次 */	@Override	public void init(ServletConfig config) throws ServletException {		// TODO Auto-generated method stub		System.out.println("调用了init方法");	}/** * Servlet服务什么时候被调用呢? *有一次请求调用一次 */	@Override	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {		// TODO Auto-generated method stub		System.out.println("调用了service方法");	}	@Override	public void destroy() {		// TODO Auto-generated method stub		System.out.println("调用了destroy方法");	}	@Override	public ServletConfig getServletConfig() {		// TODO Auto-generated method stub		return null;	}/** * Servlet实例什么时候被销毁呢? * 		*服务器关闭,手动移除。 * destroy调用几次? * 		*一次 */	@Override	public String getServletInfo() {		// TODO Auto-generated method stub		return null;	}}

第二步:配置Servlet的web.xml配置文件;

ServletLifeDemo
cn.itcast.servlet.ServletLifeDemo
ServletLifeDemo
/servletLife

Servlet虚拟路径的三种配置方法:

*以完全路径开头

            *以/开头      格式是“*.扩展名”   可以命名为  /demo     也可以命名为 /servlet/demo ,然后通过虚拟路径访问

*目录匹配

           *以/开头        格式是以正斜杠(/)开头并以“/*”结尾。可以命名为  /*     也可以命名为 /aa/*  然后可以通过  /demo或者 /servlet/demo都能访问

*扩展名匹配

          *不能以/开头         可以命名为  *.do     也可以命名为 *.action    然后可以通过 demo.do或者 /servlet/demo.do都能访问,但必须以.do结尾

*虚拟路径优先级:完全优先级>目录匹配>扩展名匹配

如果想更深刻的理解虚拟文件路径的优先级顺序:

对于如下的一些映射关系:

Servlet1 映射到 /abc/* Servlet2 映射到 /* Servlet3 映射到 /abc Servlet4 映射到 *.do 问题:

当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应     Servlet引擎将调用Servlet1。

当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应     Servlet引擎将调用Servlet3。

当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应     Servlet引擎将调用Servlet1。

当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应     Servlet引擎将调用Servlet2.

当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应     Servlet引擎将调用Servlet2。

参考:传智播客  www.itcast.cn

转载地址:http://kzdqb.baihongyu.com/

你可能感兴趣的文章
运用VC或Java对Office进行编程操作 (转)
查看>>
Linux Shell 裡一些很少用到卻很有用的指令 (转)
查看>>
第10章 模型管理视图 (转)
查看>>
第7章 活 动 视 图 (转)
查看>>
“管家婆”软件用于维修管理 (转)
查看>>
第13章 术 语 大 全 (8) (转)
查看>>
第13章 术 语 大 全 (9) (转)
查看>>
人月神话读书笔记(二) (转)
查看>>
附录 UML元模 (转)
查看>>
A Brief Look at C++ 中文版 (转)
查看>>
JBuilder Editor中光标不能正确定位问题的解决 (转)
查看>>
XML加ASP实现网页“本地化” (转)
查看>>
Java中的异步网络编程 (转)
查看>>
用于核心模式驱动程序的网络体系结构(1) (转)
查看>>
More Effective C++ 条款20 (转)
查看>>
一个程序员的爱恋 (转)
查看>>
足球战术->边锋之Decorator篇 (转)
查看>>
编写优质无错代码(1) (转)
查看>>
MySQL 4.1.0 中文参考手册 --- 6.3 用于 SELECT 和 WHERE 子句的函数 (1) (转)
查看>>
vs.net beta 2中利用DataGrid分页详解 (转)
查看>>