web.xml 详解

  1. 参数设置
    1. context-param
    2. listener
    3. servlet
      1. 为 Servlet 命名:
      2. 为 Servlet 定制 URL
      3. Load-on-startup
    4. filter
    5. session
    6. welcom-file-list
      1. 关于欢迎页面:
    7. error-page

web.xml 文件是用来配置:欢迎页、servlet、filter、listener 等的。当你的 web 项目工程没用到这些时,你可以不用 web.xml 文件来配置你的 web 工程。
如果项目中有多项标签,其加载顺序依次是:context-param >> listener >> filter >> servlet (同类多个节点出现顺序依次加载)

  1. web.xml 先读取 context-param 和 listener 这两种节点;
  2. 然后容器创建一个 ServletContext (上下文),应用于整个项目;
  3. 容器会将读取到的 context-param 转化为键值对并存入 servletContext;
  4. 根据 listener 创建监听;
  5. 容器会读取,根据指定的类路径来实例化过滤器;
  6. 此时项目初始化完成;
  7. 在发起第一次请求是,servlet 节点才会被加载实例化。

参数设置

context-param

context-param 节点是 web.xml 中用于配置应用于整个 web 项目的​上下文。包括两个子节点,其中 param-name 设定上下文的参数名称。必须是唯一名称;param-value 设定的参数名称的值。

读取节点的方法如下:

${initParam. 参数名}

Servlet 中 String paramValue=getServletContext ().getInitParameter (“参数名”)​

web.xml 中配置 spring 必须使用 listener 节点,但 context-param 节点可有可无,如果缺省则默认 contextConfigLocation 路径为 “/WEB-INF/applicationContext.xml”;如果有多个 xml 文件,使用”,“分隔

listener

<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

为 web 应用程序定义监听器,监听器用来监听各种事件,比如:application 和 session 事件,所有的监听器按照相同的方式定义,功能取决去它们各自实现的接口,常用的 Web 事件接口有如下几个:
ServletContextListener:用于监听 Web 应用的启动和关闭;
ServletContextAttributeListener:用于监听 ServletContext 范围(application)内属性的改变;
ServletRequestListener:用于监听用户的请求;
ServletRequestAttributeListener:用于监听 ServletRequest 范围(request)内属性的改变;
HttpSessionListener:用于监听用户 session 的开始和结束;
HttpSessionAttributeListener:用于监听 HttpSession 范围(session)内属性的改变。

配置 Listener 只要向 Web 应用注册 Listener 实现类即可,无序配置参数之类的东西,因为 Listener 获取的是 Web 应用 ServletContext(application)的配置参数。为 Web 应用配置 Listener 的两种方式:

  1. 使用 @WebListener 修饰 Listener 实现类即可。
  2. 在 web.xml 文档中使用进行配置。

servlet

servlet 即配置所需用的 servlet,用于处理及响应客户的请求。容器的 Context 对象对请求路径 (URL) 做出处理,去掉请求 URL 的上下文路径后,按路径映射规则和 Servlet 映射路径()做匹配,如果匹配成功,则调用这个 Servlet 处理请求。

为 Servlet 命名:

<servlet>
  <servlet-name>servlet</servlet-name>
  <servlet-class>org.whatisjava.TestServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

为 Servlet 定制 URL

<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

Load-on-startup

Load-on-startup 元素在 web 应用启动的时候指定了 servlet 被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该 servlet 被调用的时候,加载这个 servlet 。如果值是正整数或零,容器在配置的时候就加载并初始化这个 servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。
当值为 0 或者大于 0 时,表示容器在应用启动时就加载这个 servlet;
当是一个负数时或者没有指定时,则指示容器在该 servlet 被选择时才加载。
正数的值越小,启动该 servlet 的优先级越高。

filter

设置过滤器:如编码过滤器,过滤所有资源

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

session

设置会话 (Session) 过期时间,其中时间以分钟为单位,加入设置 60 分超时:

<session-config>
    <session-timeout>60</session-timeout>
</session-config>

welcom-file-list

<welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
  <welcome-file>index.html</welcome-file>
</welcome-file-list>

PS: 指定了两个欢迎页面,显示时按顺序从第一个找起,如果第一个存在,就显示第一个,后面的不起作用。如果第一个不存在,就找第二个,以此类推。如果都没有就 404.

关于欢迎页面:

访问一个网站时,默认看到的第一个页面就叫欢迎页,一般情况下是由首页来充当欢迎页的。一般情况下,我们会在 web.xml 中指定欢迎页。但 web.xml 并不是一个 Web 的必要文件,没有 web.xml,网站仍然是可以正常工作的。只不过网站的功能复杂起来后,web.xml 的确有非常大用处,所以,默认创建的动态 web 工程在 WEB-INF 文件夹下面都有一个 web.xml 文件。

error-page

<!-- 错误码 -->
<error-page>
    <error-code>404</error-code>
    <location>/error404.jsp</location>
</error-page>
<!-- 错误类型 -->
<error-page>
    <exception-type>java.lang.Exception<exception-type>
    <location>/exception.jsp<location>
</error-page>

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com

×

喜欢就点赞,疼爱就打赏