• Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)


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

    • Tomcat是一个Servlet容器:

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

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

    • Servlet的注册与运行

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

    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加载时创建家实例,且值越小越早被创建。

    配置示例:

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

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

    比如:

     1 <!-- 配置和映射 servlet -->
     2     <servlet>
     3         <!-- Servlet注册的名字 -->
     4         <servlet-name>helloServlet</servlet-name>
     5         <!-- Servlet全类名 -->
     6         <servlet-class>com.dx.hello.HelloServlet</servlet-class>
     7         <load-on-startup>1</load-on-startup>
     8     </servlet>
     9     <servlet-mapping>
    10         <!-- 对应servlet节点下的servlet-name的注册名字一致 -->
    11         <servlet-name>helloServlet</servlet-name>
    12         <!-- 映射具体的访问路径,其中/代表当前web的根目录 -->
    13         <url-pattern>/hello</url-pattern>
    14     </servlet-mapping>
    15     <servlet-mapping>
    16         <!-- 对应servlet节点下的servlet-name的注册名字一致 -->
    17         <servlet-name>helloServlet</servlet-name>
    18         <!-- 映射具体的访问路径,其中/代表当前web的根目录 -->
    19         <url-pattern>/hello2</url-pattern>
    20     </servlet-mapping>

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

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

    比如:

     1 <servlet-mapping>
     2         <!-- 对应servlet节点下的servlet-name的注册名字一致 -->
     3         <servlet-name>helloServlet2</servlet-name>
     4         <!-- 映射具体的访问路径,其中/代表当前web的根目录 -->
     5         <url-pattern>*.do</url-pattern>
     6         <!-- <url-pattern>*.html</url-pattern> -->
     7     </servlet-mapping>
     8     <servlet-mapping>
     9         <!-- 对应servlet节点下的servlet-name的注册名字一致 -->
    10         <servlet-name>helloServlet1</servlet-name>
    11         <!-- 映射具体的访问路径,其中/代表当前web的根目录 -->
    12         <url-pattern>/hello2/*</url-pattern>
    13         <!-- <url-pattern>/*</url-pattern> -->
    14     </servlet-mapping>

    但需要注意事项:

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

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

  • 相关阅读:
    《我所理解的生活》—读书总结
    《给你一个团队,你能怎么管?》—读书总结
    关于投资那点儿事
    《30岁前的每一天》—读书总结
    《书都不会读,你还想成功》-读书总结
    解决问题—麦肯锡方法:解决问题的七个步骤
    解决问题—基本流程
    关于接入新浪微博第三方登录
    搭建Spring、Spring MVC、Mybatis和Freemarker
    Eclipse+Maven创建webapp项目<二>
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/5224362.html
Copyright © 2020-2023  润新知