该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法。

  • Tomcat是一个Servlet容器:

1、Servlet容器管理了Servlet的整个生命周期,并调用servlet的生命周期的方法。

2、Servlet容器不只是Servlet的生命周期,而且还是Jsp,Filter,Listener,Tag等生命周期管理容器。

  • Servlet的注册与运行

1、Servlet程序必须通过Servlet容器来启动运行,并且存储目录有特殊要求,通常servlet编译好的.class文件要存储在<WEB应用程序目录>\WEB-INF\classes\目录中。

2、Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载被外界访问。

3、一个<servlet>元素用户注册一个Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用户设置Servlet的注册名称和Servlet的完整类名。

4、一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用户指定Servlet的注册名称和Servlet的对外访问路径。

  • Servlet容器相应客户请求的过程:

1、servlet引擎检查是否已经装载被创建该servlet的实例对象。如果已经创建,则直接执行第4步;否则,执行第2步。

2、装载并创建该servlet的一个实例对象:调用该servlet的构造函数。

3、调用servlet实例对象的init方法。

4、创建一个用于封装请求的ServletRequest对象和一个代表相应消息的ServletResponse对象,然后调用Servlet的service方法并将请求和相应对象作为参数传递进去。

5、web应用程序被停止或者重启之前,servlet引擎将卸载servlet,并在卸载之前调用servlet的destory方法。

  • Servlet生命周期的方法(以下方法都是有Servlet容器负责调用):

1、首先是创建实例时调用构造器:只被调用一次,只有第一次请求Servlet时,创建Servlet的实例,调用构造器。
2、init方法:只被调用一次,在创建好Servlet实例后立即调用init函数,用户初始化当前Servlet实例

3、service方法:被多次调用,每次请求都会被调用,用于相应请求。

4、destory方法:只被调用一次,在当前servlet所在的web应用被卸载前调用,用于释放servlet所占用的资源。

  • Servlet配置需要注意事项:

servlet节点下的load-on-startup配置:

1、可以指定servlet被创建的时机;

2、默认该参数为负数,在加载web应用时,不加载servlet实例,而在第一次请求时被创建;

3、若为0或者正数,则在当前WEB应用被servlet加载时创建家实例,且值越小越早被创建。

配置示例:

 <!-- 配置和映射 servlet -->
<servlet>
<!-- Servlet注册的名字 -->
<servlet-name>helloServlet</servlet-name>
<!-- Servlet全类名 -->
<servlet-class>com.dx.hello.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 对应servlet节点下的servlet-name的注册名字一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射具体的访问路径,其中/代表当前web的根目录 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
  • Servlet映射的细节:

1、同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。

比如:

 <!-- 配置和映射 servlet -->
<servlet>
<!-- Servlet注册的名字 -->
<servlet-name>helloServlet</servlet-name>
<!-- Servlet全类名 -->
<servlet-class>com.dx.hello.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 对应servlet节点下的servlet-name的注册名字一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射具体的访问路径,其中/代表当前web的根目录 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<!-- 对应servlet节点下的servlet-name的注册名字一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射具体的访问路径,其中/代表当前web的根目录 -->
<url-pattern>/hello2</url-pattern>
</servlet-mapping>

这样子就可以通过http://localhost:8080/MyServlet001/hello和http://localhost:8080/MyServlet001/hello2访问同一个servlet。

2、在Servlet映射到URL中也可以使用*通配符,但是只能有两种固定的格式:一种是“*.扩展名”,另外一种是以正斜杠“/”开头并以“/”结尾。

比如:

 <servlet-mapping>
<!-- 对应servlet节点下的servlet-name的注册名字一致 -->
<servlet-name>helloServlet2</servlet-name>
<!-- 映射具体的访问路径,其中/代表当前web的根目录 -->
<url-pattern>*.do</url-pattern>
<!-- <url-pattern>*.html</url-pattern> -->
</servlet-mapping>
<servlet-mapping>
<!-- 对应servlet节点下的servlet-name的注册名字一致 -->
<servlet-name>helloServlet1</servlet-name>
<!-- 映射具体的访问路径,其中/代表当前web的根目录 -->
<url-pattern>/hello2/*</url-pattern>
<!-- <url-pattern>/*</url-pattern> -->
</servlet-mapping>

但需要注意事项:

1、*.html这样写是没有问题的,如果配置为/*.html或者/*.action、/*.do等格式的,是错误的配置,加载时会跑出异常信息。

2、若果配置为*没有后缀名,则必须浅表带/,格式为:/*或者/a/*等等。

Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)的更多相关文章

  1. java web(二): servlet的简单使用和介绍

    前言:通过编写一个servlet类,向浏览器发送hello world来阐述servlet. 一:创建动态web项目 1. 首先切换到javaEE视图. 在ecplise左边即项目管理器哪里右键点击新 ...

  2. Android系列之Fragment(二)----Fragment的生命周期和返回栈

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  3. Java对象在JVM中的生命周期

          当你通过new语句创建一个java对象时,JVM就会为这个对象分配一块内存空间,只要这个对象被引用变量引用了,那么这个对象就会一直驻留在内存中,否则,它就会结束生命周期,JVM会在合适的时 ...

  4. Service具体解释(二):Service生命周期

    < Service具体解释(一):什么是Service> < Service具体解释(二):Service生命周期> <Service具体解释(三):Service的使用 ...

  5. Java多线程——线程的优先级和生命周期

    Java多线程——线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...

  6. vue基本配置和生命周期

    Vue的实例是Vue框架的入口,其实也就是前端的ViewModel,它包含了页面中的业务逻辑处理.数据模型等,当然它也有自己的一系列的生命周期的事件钩子,辅助我们进行对整个Vue实例生成.编译.挂着. ...

  7. vue 源码详解(二): 组件生命周期初始化、事件系统初始化

    vue 源码详解(二): 组件生命周期初始化.事件系统初始化 上一篇文章 生成 Vue 实例前的准备工作 讲解了实例化前的准备工作, 接下来我们继续看, 我们调用 new Vue() 的时候, 其内部 ...

  8. VueJs 源码分析 ---(二)实力化生命周期,以及解析模版和监听数据变化

    Vue 源码第二步 当前 Vue 的版本 V2.2.2 生命周期 相关介绍 我们可以从 setp1 中 去看到那张 vue 的生命周期图中看到,vue 的生命周期钩子. 具体的钩子时干什么的? 以及在 ...

  9. Servlet配置及生命周期

    1.设置Ecilipse快捷  file new 2.创建Servlet程序 1). 创建一个 Servlet 接口的实现类.              public class HelloServl ...

随机推荐

  1. Windows与Linux/Mac系统时间不一致的解决方法

    Windows与Linux/Mac系统时间不一致的解决方法 分类: linux2012-02-12 14:25 1691人阅读 评论(1) 收藏 举报 windowsubuntusystemlinux ...

  2. 解决ORA-00054资源正忙的问题

    有时候在drop表或者其他对象的时候,会遇到ORA-00054:资源正忙,要求指定NOWAIT(中文字符集)或者ORA-00054: resource busy and acquire with NO ...

  3. ViewData ViewBag TempData

    ViewData(一个字典集合类型):传入的key必须是string类型,可以保存任意对象信息,特点:它只会存在这次的HTTP的要求中而已,并不像session可以将数据带到下一个Http要求.   ...

  4. 使用fsck修复文件系统错误

    1.问题描述 服务器maint_samba   由于服务器maint_samba (debian操作系统)没有正常关机,在重新启动过程中/dev/sdb1出现文件系统错误,需要手动使用fsck进行扫描 ...

  5. IOS 跳转时传参数的常用方法

    在iOS开发中常用的参数传递有以下几种方法: 采用代理模式 采用iOS消息机制 通过NSDefault存储(或者文件.数据库存储等) 通过AppDelegate定义全局变量(或者使用UIApplica ...

  6. Mongo命令行中执行CRUD

    在命令行中使用mongo自带的shell命令来执行CRUD操作 首先链接到数据库 增 db.qiao.insert({"qq":1}) db.qiao.save({"qq ...

  7. Http请求工具

    package cn.com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.Input ...

  8. Shell 字符串常见操作

    参考文章:http://blog.csdn.net/chen_jp/article/details/8922582 一 字符替换 origin=原字符串  str=替换后的字符串 替换命令: str= ...

  9. Android笔记:利用InputStream和BufferedReader 进行字节流 字符流处理

    通过socket获取字节流处理时最初使用的是BufferedReader和PrintWriter  这种方式在解析字符串时是比较方便的 但是在处理字节时不够方便最终还是回归到InputStream和O ...

  10. C++中string转化为常用数值类型

    //模板类 用于将string类型转化为 常用数值类型 template <class Type> Type stringToNum(const string& str) { is ...