zoukankan      html  css  js  c++  java
  • JavaWeb学习——web.xml文件说明

    JavaWeb学习——web.xml文件说明

    摘要:本文主要学习了web.xml文件的作用以及如果配置。

    是什么

    web.xml文件是用来在JavaWeb项目里面初始化配置信息的,比如:访问的首页、Servlet信息、Filter信息、Listener信息、启动信息等。

    如果项目用到了Servlet、Filter、Listener等组件,就需要配置web.xml,如果没有用到,也可以不需要web.xml。

    标签说明

    文档有效性检查

    一般是xml文件的声明,定义了xml文件的版本和编码格式,指明xml文件遵循的约束,指明xsd文件的位置,xsd文件定义了xml可用使用的标签元素。

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3     xmlns="http://java.sun.com/xml/ns/javaee"
    4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    5     id="WebApp_ID" version="3.0">
    6     ...
    7 </web-app>

    项目图标

    定义表示项目的大图标和小图标,可以没有。

    1 <icon> 
    2     <small-icon>/images/app_small.gif</small-icon> 
    3     <large-icon>/images/app_large.gif</large-icon> 
    4 </icon> 

    项目名称

    定义项目的名称,可以没有。

    1 <display-name>HelloWorld</display-name>

    欢迎页面

    定义项目的欢迎页面,按照从上到下的优先级顺序,若没有配置将默认使用index.html作为欢迎页,若所有页面都不存在,将会提示“The requested resource (/XXX) is not available”。

    1 <welcome-file-list>
    2     <welcome-file>index.html</welcome-file>
    3     <welcome-file>index.htm</welcome-file>
    4     <welcome-file>index.jsp</welcome-file>
    5     <welcome-file>default.html</welcome-file>
    6     <welcome-file>default.htm</welcome-file>
    7     <welcome-file>default.jsp</welcome-file>
    8 </welcome-file-list>

    错误页面

    通过错误码指定错误处理页面。

    1 <error-page>
    2     <error-code>404</error-code>
    3     <location>/error404.jsp</location>
    4 </error-page>

    通过异常类型指定错误处理页面。

    1 <error-page>
    2     <exception-type>java.lang.Exception<exception-type>
    3     <location>/exception.jsp<location>
    4 </error-page>

    上下文参数

    设置当前应用的初始化参数。

    在Jsp页面中可以使用 ${initParam.param_name} 获取,在Servlet程序里可以使用 this.getServletConfig().getServletContext().getInitParameter(param_name); 获取。

    1 <context-param>
    2     <param-name>param_name</param-name>
    3     <param-value>param_value</param-value>
    4 </context-param>

    会话参数

    设置项目的session参数, session-timeout 元素用来指定会话超时时间,以分钟为单位,该元素值必须为整数,如果值为零或负数,则表示会话将永远不会超时。

    1 <session-config>
    2     <session-timeout>120</session-timeout>
    3 </session-config>

    Servlet

    设置项目的Servlet。

    可以使用 init-param 将初始化参数名和参数值传递给Servlet,访问Servlet配置参数可以通过 this.getServletConfig().getInitParameter(param_name); 获取。

    ServletConfig获取配置参数的方法和ServletContext获取配置参数的方法完全一样,只是ServletConfig是取得当前Servlet的配置参数,而ServletContext是获取整个Web应用的配置参数。

    使用 load-on-startup 元素可以控制容器在启动时是否要初始化Servlet,取值必须是整数。如果值大于或者等于0,表示在启动时间就加载并初始化Servlet,元素的值越小,启动的优先级越高。如果值为负数,则表示在用到的时候才去加载和初始化。

     1 <servlet>
     2     <servlet-name>TestServlet</servlet-name>
     3     <servlet-class>com.TestServlet</servlet-class>
     4     <init-param>
     5         <param-name>publishContext</param-name>
     6         <param-value>false</param-value>
     7     </init-param>
     8     <load-on-startup>1</load-on-startup>
     9 </servlet>
    10 <servlet-mapping>
    11     <servlet-name>TestServlet</servlet-name>
    12     <url-pattern>/TestServlet</url-pattern>
    13 </servlet-mapping>

    Filter

    设置项目的Filter。

    在 filter-mapping 元素里可以使用 url-pattern 或者 servlet-name 两种方式指定要过滤的访问路径,这两种方式使用一个即可。

    版本规范在部署描述符中新增了 dispatcher 元素,这个元素有四个可能的取值,这四种方式可以组合使用,配置多个元素即可。需要注意的是, dispatcher 元素必须写在 filter-mapping 元素的最后。

    四种可能的取值如下:

    1)REQUEST:只要发起的操作是一次HTTP请求,比如请求某个URL、发起了一个GET请求或者POST请求。一次重定向则前后相当于发起了两次请求,这些情况下有几次请求就会走几次指定过滤器。

    2)FOWARD:只有在当前页面是通过请求转发过来的情况下,才会走指定的过滤器。

    3)INCLUDE:只要是通过 <jsp:include page="xxx.jsp" /> ,嵌入进来的页面,每嵌入的一个页面,都会走指定的过滤器。

    4)ERROR:假如配置了 error-page 元素,并且触发了配置里的状态码,就会走指定的过滤器。需要注意的是,虽然把请求转发到error.jsp是一次转发的过程,但并不会走FORWARD指定的过滤器。

     1 <filter>
     2     <filter-name>EncodingFilter</filter-name>
     3     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
     4     <init-param>
     5         <param-name>encoding</param-name>
     6         <param-value>UTF-8</param-value>
     7     </init-param>
     8     <init-param>
     9         <param-name>forceEncoding</param-name>
    10         <param-value>true</param-value>
    11     </init-param>
    12 </filter>
    13 <filter-mapping>
    14     <filter-name>EncodingFilter</filter-name>
    15     <url-pattern>/*</url-pattern>
    16     <servlet-name>TestServlet</servlet-name>
    17     <dispatcher>INCLUDE</dispatcher>
    18 </filter-mapping>

    Listener

    设置项目的Listener。

    配置Listener只需要使用元素 listener-class 指定Listener的实现类即可。

    1 <listener>  
    2     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    3 </listener>  

    路径的通配符匹配

    配置方式

    1)精确匹配

    在 url-pattern 元素中配置的项必须与URL完全精确匹配。

    1 <servlet-mapping>
    2     <servlet-name>TestServlet</servlet-name>
    3     <url-pattern>/test/show.html</url-pattern>
    4     <url-pattern>/index.html</url-pattern>
    5     <url-pattern>/demo</url-pattern>
    6 </servlet-mapping>

    2)路径匹配

    在 url-pattern 元素中配置的项只匹配了一部分URL。

    1 <servlet-mapping>
    2     <servlet-name>TestServlet</servlet-name>
    3     <url-pattern>/test/*</url-pattern>
    4 </servlet-mapping>

    3)扩展匹配

    在 url-pattern 元素中配置的项只匹配了URL的扩展名。

    1 <servlet-mapping>
    2     <servlet-name>TestServlet</servlet-name>
    3     <url-pattern>*.do</url-pattern>
    4 </servlet-mapping>

    优先顺序

    当一个URL与多个Servlet的匹配规则可以匹配时,则按照“精确路径 > 最长路径 > 扩展名”这样的优先级匹配到对应的Servlet。

    注意:不要既有路径匹配,又有扩展匹配,这样做会导致容器无法去判断匹配哪个,例如: <url-pattern>/*.action</url-pattern> 就是错误的写法。

    /和/*的区别

    /:会匹配到/login这样的路径型URL,不会匹配到*.jsp这样的后缀型URL。

    /*:会匹配所有URL,包括路径型的和后缀型的。

    文件加载过程

    当启动一个Web项目容器时,首先会去读取web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常的被启动起来。

    启动Web项目的时候,容器首先会去读取web.xml配置文件中的两个元素: listener 和 context-param 。

    紧接着,容器创建一个ServletContext,这个Web项目的所有部分都将共享这个上下文。容器以 context-param 元素的 name 作为键,以 value 作为值,将其转化为键值对,存入ServletContext。  

    容器创建 listener 元素中的类实例,根据 listener-class 元素里配置的class类路径来创建监听,在监听中会有初始化方法。

    接着,容器会读取 filter 元素的内容,根据指定的类路径来实例化过滤器。

    以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的那几个要迟。

    总的来说,web.xml的加载顺序是: context-param -> listener -> filter -> servlet 。

    其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。

  • 相关阅读:
    python 将字符串作为脚本运行
    Django Model获取字段名称并转为List存储
    django 过滤查询
    django 视图中异步执行python脚本
    python 异步执行python脚本
    django 筛选不等于的内容
    phpstorm中快速添加函数注释
    搜索模板elasticsearch
    laravel模型关联
    laravel关联用户
  • 原文地址:https://www.cnblogs.com/shamao/p/12058936.html
Copyright © 2011-2022 走看看