JavaWeb中的web.xml文件配置解析

Wesley13
• 阅读 765

一 web.xml的文件重要性

    web.xml是servlet规定的启动配置文件,凡属基于servlet的javaWeb容器必遵守这个规范,而目前主流的容器都是基于servlet的,因此可以理解web.xml是每个javaweb应用都离不开web.xml配置文件。

    web.xml完整的名字应该叫做部署描述符文件,当容器启动时会去读这个文件,然后加载相关配置(不延伸servlet更多的知识),该文件通常会放在WEB-INF文件夹下。

二 启动与加载顺序(未得到完全验证与深入)

   当一个web项目启动时,容器会按照下面的顺序执行:

  1. 读取配置文件web.xml,首先读取两个元素节点。

  2. 接着容器创建ServletContext(servlet上下文),后面web所有部分都将共享这个上下文。

  3. 容器将的值对转换为key-value,交给servletContext。

  4. 容器创建中的类实例,创建监听器。

    理论上web.xml的标签加载顺序与标签在web.xml的书写位置无关,但是服务器有可能会拒绝执行不按标准顺序的web.xml,所以为了让web.xml具备可移植性,建议最好还是按照标准顺序来书写。那标准的加载顺序大概是什么样的呢?

ServletContext -> context-param -> listener -> filter -> servlet

事实上servletContext在web.xml上不会明文出现,对于多个servlet的加载顺序可以有元素5定义优先级。中间的数值表示:

                           当值为0或者大于0时,表示容器在应用启动时就加载这个servlet; 

                           当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载;

                           正数的值越小,启动该servlet的优先级越高。 

三 web.xml的标签详解

web.xml和所有的xml文件一样,需要有个一个xml头,这个头给出了xml的版本和文件的字符编码,所以web.xml不同于HTML,所有字符都是大小写敏感的。DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义)。所有部署描述符文件的顶层(根)元素为web-app。也就是说web.xml主要有三个部分构成:xml头,DOCYTPE声明和包(web.xml的核心标签都在这个包里面)。

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">  
<web-app>  
</web-app>

当然DOCTYPE声明也可以写在里面,如:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>

中的主要的元素按顺序排列如下:

JavaWeb中的web.xml文件配置解析

具体释义:

元素1:

含义

icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径.
/路径/smallicon.gif
small-icon元素应指向web站台中某个小图标的路径,大小为16 X 16 pixel,但是图象文件必须为GIF或JPEG格式,扩展名必须为:.gif或.jpg.

/路径/largeicon-jpg
large-icon元素应指向web站台中某个大图表路径,大小为32 X 32 pixel,但是图象文件必须为GIF或JPEG的格式,扩展名必须为; gif或jpg.

范例

   /images/small.gif    /images/large.gif

元素2、3:

含义

应用名称
定义应用的名称。

应用描述
对应用做出描述。

范例

test

测试应用V1.0

元素4:

含义

context-param 元素用来设定web应用的环境参数(context),它包含两个子元素:
param-name和param-value.
参数名称
设定Context名称

设定Context名称的值

范例

   param_name
   param_value

此所设定的参数,在JSP网页中可以使用下列方法来取得:
${initParam.param_name}
若在Servlet可以使用下列方法来获得:
String param_name=getServletContext().getInitParamter("param_name");

元素5,6:

含义

filter元素用来设定web应用的过滤器,它的两个主要子元素filter-name和filter-class用来定义Filter所对应的class

Filter的名称
定义Filter的名称
Filter的类名称
定义Filter的类名称

filter-mapping 元素的两个主要子元素filter-name和url-pattern.用来定义Filter所对应的URL.
Filter的名称
定义Filter的名称.
URL
Filter所对应的RUL.例如:/Filter/*

范例

  Encoding   ghjf.test.filter.SetCharacterEncodingFilter        encoding      GBK      Encoding    /\*

元素7:

含义

listener元素用来定义Listener接口,它的主要子元素为
Listener的类名称

定义Listener的类名称

范例

  org.springframework.web.context.ContextLoaderListener

元素8、9:

含义

servlet元素的两个主要子元素servlet-name和servlet-class用来定义servlet所对应的class

servlet的名称
定义servlet的名称
servlet的类名称
定义servlet的类名称

servlet-mapping元素包含两个子元素servlet-name和url-pattern.用来定义servlet所对应URL.
Servlet的名称
定义Servlet的名称.
Servlet URL
定义Servlet所对应的RUL.例如:/Servlet/*

范例

 dwr-invoker  DWR Servlet  Direct Web Remoter Servlet  uk.ltd.getahead.dwr.DWRServlet        debug      true    dwr-invoker  /dwr/\*

元素10:

含义

session-config包含一个子元素session-timeout.定义web应用中的session参数.
分钟
定义这个web站台所有session的有效期限.单位为分钟.

范例

   30

元素11:

含义

mime-mapping包含两个子元素extension和mime-type.定义某一个扩展名和某一MIME Type做对映.
扩展名名称
扩展名称
MIME格式
MIME格式.

范例

   doc    application/vnd.ms-word    xls    application/vnd.ms-excel    ppt    application/vnd.ms-powerpoint

元素12:

含义

welcome-file-list包含一个子元素welcome-file.用来定义首页列单.
用来指定首页文件名称
welcome-file用来指定首页文件名称.我们可以用指定几个首页,而服务器会依照设定的顺序来找首页.

范例

  index.jsp   index.htm

元素13:

含义

error-page元素包含三个子元素error-code,exception-type和location.将错误代码(Error Code)或异常(Exception)的种类对应到web应用资源路径.
错误代码
HTTP Error code,例如: 404、403
Exception
一个完整名称的Java异常类型
/路径
在web应用内的相关资源路径

范例

   404    /error404.jsp    java.lang.Exception    /exception.jsp

元素14:

含义

jsp-config元素主要用来设定JSP的相关配置,jsp:config包括两个子元素.其中元素
在JSP 1.2时就已经存在了;而是JSP 2.0新增的元素.

taglib元素包含两个子元素taglib-uri和taglib-location.用来设定JSP网页用到的Tag Library路径. URI    taglib-uri定义TLD文件的URI,JSP网页的taglib指令可以经由这个URI存取到TLD文件. /WEB-INF/lib/xxx.tld    TLD文件对应Web站台的存放位置. jsp-property-group元素包含8个元素,分别为: Description 此设定的说明

Name
此设定的名称

URL
设定值所影响的范围,如:/CH2 或者/*.jsp

true|false
若为true,表示不支持EL语法.

true|false
若为true表示不支持<%scription%>语法.

encoding
设定JSP网页的编码

.jspf
设置JSP网页的抬头,扩展名为.jspf

.jspf
设置JSP网页的结尾,扩展名为.jspf

范例

   Taglib    /WEB-INF/tlds/MyTaglib.tld          Special property group for JSP Configuration JSP example.       JSPConfiguration    /\*    true    GB2312    true

元素15:

含义

resource-env-ref有两个子元素:
资源名  
资源的名称 相对于java:comp/env
查找资源时返回的资源类名
当web应用查找该资源的时候,返回的Java类名的全称

范例

   
  jdbc/mssql  
  javax.sql.DataSource  
 
 

元素16:

含义

resource-ref元素包括五个子元素description,res-ref-name,res-type,res-auth,res-sharing-scope.利用JNDI取得应用可利用资源.
说明
资源说明
资源名称
资源名称
资源种类
资源种类
Application|Container
资源由Application或Container来许可
Shareable|Unshareable
 资源是否可以共享.默认值为 Shareable

范例

   JNDI JDBC DataSource    jdbc/data    javax.sql.DataSoruce    Container
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这