web.xml常用标签详解

这次主要整理下JavaWeb开发过程中所用的配置文件web.xml,web.xml的作用以及常用标签的含义


一、web.xml的作用

web.xml主要用于配置web项目启动时加载的信息,例如

  • welcome-file-list 用来配置欢迎页
  • context-param 用来配置初始参数
  • listener 用来配置监听器
  • filter 用来配置过滤器
  • servlet 用来配置servlet实例

二、web.xml标签详解

<?xml version="1.0" encoding="UTF-8"?>
  • 用于声明xml的版本以及xml传输数据时的字符编码

1、web-app

  • xml文件的根标签,用于声明命名空间、schema约束等
    • xmlns="http://java.sun.com/xml/ns/javaee"
      • XML Namespaces,声明了命名空间,用于避免命名冲突,有疑惑的小伙伴可以点击这里
    • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      • XML Schema Instance,声明了web.xml所需要遵循的xml规范
        (xsi只是一个别名,可以自行定义,不过约定俗成使用xsi来表示)
    • xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      • schemaLocation 是xsi的一个子元素,所以以 xsi:schemaLocation 来命名,它由一个 URI引用对 组成,两个URI之间以 空白符 分隔。第一个URI是 命名空间的名字,第二个URI是 模式文档的位置,模式处理器将从这个位置读取模式文档
      • 声明了 XML Namespace和对应的 XSD(Xml Schema Definition) 文档的位置,实际上就是声明了该命名空间对应的具体模板是哪个
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
         version="3.0">
</web-app>

2、icon

  • 当使用GUI(Graphic User Interface)工具时,
    用于指定web应用的图标,拥有两个字子标签,只支持 gifjpg 格式

    • <small-icon></small-icon>
      • 小图标为 16*16像素
    • <large-icon></small-icon>
      • 大图标为 32*32像素
<icon>
    <small-icon>/images/xxx.jpg</small-icon>
    <large-icon>/images/xxx.jpg</large-icon>
</icon>

3、display-name

  • 当使用GUI(Graphic User Interface)工具时,用于指定web应用的名称
<display-name>xxxxxxxxxxxxxxx</display-name>

4、description

  • 用于描述web应用的相关信息
<description>xxxxxxxxxxxxxxx</description>

5、distributable

  • 如果在web.xml中指定该标签,则表示应用程序已经可以部署在分布式的servlet容器中了,即此应用程序可以在多个实例之间分发servlet及会话
  • 只要看web.xml中是否出现该标签,就可以判断web项目是否具有分布式的功能
<distributable/>

6、context-param

  • 初始化参数,应用与整个web项目,有两个子标签
    • <param-name></param-name>
      可以理解为map中的key
    • <param-value></param-value>
      可以理解为map中的value
  • 在容器启动时,会创建一个 ServletContext(上下文对象,也可以理解为web应用环境对象),然后会去读取 context-param 标签,容器会将 param-nameparam-value 的值以 key-value 的形式set进ServletContext中
  • 在servlet中,通过 this.getServletContext().getInitParameter(“key”) 来获取值value
<context-param>
    <param-name>key</param-name>
    <param-value>value</param-value>
</context-param>

7、filter

  • 过滤器,可以对目标资源的请求和响应进行过滤,主要用于 过滤字符编码,当然你可以自定义过滤器,来处理自己的业务逻辑
    • <filter-name></filter-name>
      过滤器名称,与下文提到的 filter-mapping 标签的 filter-name 相对应
    • <filter-class></filter-class>
      过滤器类的完整类名
    • <init-param></init-param>
      filter类的初始化参数,有两个子标签
      • <param-name></param-name>
        可以理解为map中的key
      • <param-value></param-value>
        可以理解为map中的value
  • 在filter中,通过 (request.getServletContext().getInitParameter(“key”); 来获取值value,注意:此处的request为 ServletRequest

8、filter-mapping

  • 过滤器的映射,与 filter 标签搭配使用,且必须先配置 filter 再配置 filter-mapping,有两个子标签
    • <filter-name></filter-name>
      过滤器名称,与上文提到的 filter 标签的 filter-name 相对应
    • <url-pattern></url-pattern>
      映射路径,所有符合该模式的URL都会应用于该过滤器

Spring提供的字符编码过滤器

  <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>false</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>
  • <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>

    设置编码格式为UTF-8
  • <param-name>forceEncoding</param-name>
    <param-value>false</param-value>

    若为true,则表示强制设置 response 的编码与 request 一致
  • 以下是 CharacterEncodingFilter 的源码,当 forceEncodingtrue 时,会短路 request.getCharacterEncoding() == null,从而设置 respond 的编码与 request 一致
    这里写图片描述
  • <filter-name>encodingFilter</filter-name>
    <url-pattern>*.do</url-pattern>

    此处表示将所有以 .do 结尾的请求,使用UTF-8编码

9、listener

  • 监听器,可以用来监听客户端的请求,服务端的操作等,常用的监听器有
    • ServletContext 监听器
      • ServletContextListener
        用于对整个Servlet上下文在 创建销毁 时进行监听
      • ServletContextAttributeListener
        用于对Servlet上下文属性的 增删改 操作进行监听
    • Session 监听器
      • HttpSessionListener
        用于对Session在 创建销毁 时进行监听
      • HttpSessionAttributeListener
        用于对Session属性的 增删改 操作进行监听
    • Request 监听器
      • ServletRequestListener
        用于对Request在 创建销毁 时进行监听
      • ServletRequestAttributeListener
        用于对Request属性的 增删改 操作进行监听

10、servlet

  • 用来声明一个servlet数据,常用的有以下几个子标签
    • <servlet-name></servlet-name>
      servlet名称,与下文提到的 servlet-mapping 标签的 servlet-name 相对应
    • <servlet-class></servlet-class>
      servlet类的完整类名
    • <init-param></init-param>
      servlet类的初始化参数,有两个子标签
      • <param-name></param-name>
        可以理解为map中的key
      • <param-value></param-value>
        可以理解为map中的value
    • <load-on-startup></load-on-startup>
      当web应用启动时,用于指定加载servlet的顺序
      当值 大于等0 时,web容器会按照值大小 从小到大 顺序加载
      当值 为负或未定义 时,web容器会在首次访问该servlet时加载它
  • 在servlet中,通过 this.getInitParameter(“key”) 来获取值value

11、servlet-mapping

  • servlet的映射,与 servlet 标签搭配使用,且必须先配置 servlet 再配置 servlet-mapping,有两个子标签
    • <servlet-name></servlet-name>
      servlet名称,与上文提到的 servlet 标签的 servlet-name 相对应
    • <url-pattern></url-pattern>
      映射路径,使用该路径可以访问到想要访问的 servlet,可自行定义
<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>com.lala.servlet.Login</servlet-class>
    <init-param>
        <param-name>key</param-name>
        <param-value>value</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/servlet/abc</url-pattern>
</servlet-mapping>
  • 在页面上,通过简单的form表单就可以访问到对应的servlet
<form action="servlet/abc" method="post">
    <input type="submit" value="提交" />
</form>

12、session-config

  • 设置 session 超时时间,单位为分钟
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

13、welcome-file-list

  • 设置欢迎页,若不设置则会默认访问 WEB-INF 下的 index.html 页面
<welcome-file-list>
    <welcome-file>index1.html</welcome-file>
    <welcome-file>index2.html</welcome-file>
    <welcome-file>index3.html</welcome-file>
</welcome-file-list>
  • 当访问项目时,容器会按顺序依次搜索页面,如果有对应的页面存在,则显示该页面,若都没匹配到,则会报404错误

14、error-page

  • 设置错误页,当404或500或指定异常时可以跳转至指定页面,有三个子标签
    • <error-code></error-code>
      错误码,例如 404, 500等
    • <exception-type></exception-type>
      异常类型,例如 java.lang.NullPointerException(空指针异常)
    • <location></location>
      用来设置错误页
<error-page>
    <error-code>404</error-code>
    <location>/error_404.html</location>
</error-page>
<error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/error_null.html</location>
</error-page>

此外,如果文章有什么错误之处,还请小伙伴们指出来,我会及时更正的

猜你喜欢

转载自blog.csdn.net/goodbye_youth/article/details/80792935