Servlet知识总结

本篇博文总结以下Servlet的基础知识。

  • Servlet的生命周期
  • Servlet的三个装载时机
  • Servlet的执行过程
  • web.xml里面的相关配置都是什么意思
  • Servlet路径跳转
  • request和response的各个方法
  • Filter
  • war包的结构
  • Servlet 3.0的新特性

Servlet的生命周期

  1. 创建Servlet。
  2. 执行构造方法,一般在Servlet第一次加载的时候执行。
  3. 执行初始化方法,init()。
  4. 根据Tomcat的解析执行不同的相应方法,主要有service(),doGet(),doPost()方法。
  5. 执行销毁方法,destory()。

Servlet的三个装载时机
首先明确一点。Servlet在创建之后,自始至终都是存在于内存中的。

  1. 第一次访问Servlet的时候创建。
  2. 容器(Tomcat)启动时创建(自动装载)。
    • 由在web.xml文件中为Servlet设置的<load-on-startup>属性决定
    • 数字越小,优先级越高,最小是0。
  3. Servlet文件被修改之后,需要重新装载servlet。

Servlet的执行过程

<a href="servlet/HelloServlet"/>为例。

最简单的web.xml的配置如下:

  <servlet>
    <servlet-name>servletTest</servlet-name>
    <servlet-class>servlet.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>servletTest</servlet-name>
    <url-pattern>/servlet/HelloServlet</url-pattern>
  </servlet-mapping>
  1. 根据a标签里的路径去<servlet-mapping></servlet-mapping>这个标签里找路径所对应的servlet的名字。路径应该是存在这里的<url-pattern>/servlet/HelloServlet</url-pattern>
  2. 然后根据servlet的名字去<servlet></servlet>这个标签里找对应的java类。java类应该是存在这里的:<servlet-class>servlet.HelloServlet</servlet-class>
  3. 然后执行doGet()或者doPost()方法。这就是一个Servlet的最简单的执行过程。

web.xml里面的相关配置都是什么意思

No. 元素 意义
1 servlet 在向Servlet或者JSP页面制定初始化参数或者定制URL时,必须首先命名Servlet或者JSP页面。Servlet就是用来完成此项任务的。
2 servlet-mapping 一般在更改URL参数时,以便servlet可以访问初始化参数或者更容易的处理相对路径。在更改缺省URL的时候一般都会用到这个元素。
3 load-on-startup 标记容器是否在启动的时候就加载这个servlet,数字越小优先级越高。
4 init-param servlet的初始化参数。一般是以key-value的形式存在于servlet元素中的。
5 context-param context-param元素声明应用范围之内的初始化参数。
6 filter 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。
7 filter-mapping 一旦命名了过滤器元素,就要利用filter-mapping元素把它与一个或者多个JSP页面相关联。
8 listener 当建立,修改或者删除servlet时得到通知,Listener元素将指出事件监听程序类。
9 error-page 当程序抛出异常时,能够指定到显示的异常页面。


web.xml里面的相关配置详解

Servlet路径跳转
路径的跳转主要是分为两种:

  • 第一种是服务器内部跳转,这个方法是使用最广泛的。
以相对路径为例:
request.getRequestDispatcher("../test.jsp").forward(request, response);

之后浏览器显示的路径就是:

http://localhost:8080/项目名称/test.jsp
  • 第二种是使用请求重定向。
首先使用request.getContextPath()获得上下文对象。
response.sedRedirect(request.getContextPath()+"/test.jsp")

request和response的各个方法

Filter
Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。

扫描二维码关注公众号,回复: 123655 查看本文章
  • Filter有如下几个用处。
    • 在HttpServletRequest到达Servlet之前,拦截客户HttpServletRequest。
    • 根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
    • 在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
    • 根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

优点:过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容。而在实际使用时,就要特别注意过滤链的执行顺序问题。

穿件一个Filter的步骤如下:

  1. 建立一个实现Filter接口的类。这个类需要三个方法,分别是:doFilter、init和destroy。doFilter方法包含主要的过滤代码(见第2步),init方法建立设置操作,而destroy方法进行清楚。
  2. 在doFilter方法中放入过滤行为。doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,如下一步所述,此参数用来调用servlet或JSP页。
  3. 调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
  4. 对相应的servlet和JSP页面注册过滤器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。
  5. 禁用激活器servlet。防止用户利用缺省servlet URL绕过过滤器设置。

web.xml的配置如下:

    <filter>    
        <filter-name>LogFilter</filter-name>    
        <filter-class>com.mucfc.LogFilter</filter-class>    
    </filter>    
    <filter-mapping>    
        <filter-name>LogFilter</filter-name>    
        <url-pattern>/*</url-pattern><!-- 表示处理根目录下的所有请求 -->  
    </filter-mapping>  

映射到servlet:

<filter-mapping>  
    <filter-name>FilterName</filter-name>  
    <servlet-name>ServletName1</servlet-name>  
</filter-mapping>  
<filter-mapping>  
    <filter-name>FilterName</filter-name>  
    <servlet-name>ServletName2</servlet-name>  
</filter-mapping> 

映射到JSP:

<filter-mapping>  
    <filter-name>FilterName</filter-name>  
    <url-pattern>/path/FileName.jsp</url-pattern>  
</filter-mapping>  

映射到任意URL:

<filter-mapping>  
    <filter-name>FilterName</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>  

war包的结构

下面是最常见的war包结构:

webapp.war 

  |    index.jsp 
  | 
  |— images 
  |— META-INF 
  |— WEB-INF 
          |   web.xml                   // WAR包的描述文件 
          | 
          |— classes 
          |          action.class       // java类文件,编译后的字节码
          | 
          |— lib 
                    other.jar           // 依赖的jar包 
                    share.jar

Servlet 3.0的新特性

http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html

猜你喜欢

转载自blog.csdn.net/wangchengming1/article/details/78467385
今日推荐