博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java.Web】web.xml详解
阅读量:4005 次
发布时间:2019-05-24

本文共 7724 字,大约阅读时间需要 25 分钟。

web.xml文件是Java Web应用的XML格式的配置文件,存放在WEB-INF子目录下。web.xml文件由开发人员编写,共Servlet容器访问。web.xml文件也被称为Java Web应用的发布描述符文件,Servlet容器在加载和启动Java Web应用时会读取它的web.xml文件,从中获得关于当前Web应用的发布信息。

定义元素

web.xml中定义了如下的元素:

  • <web-app>——Web应用的根元素
  • <display-name>——Web应用的名字
  • <description>——对Web应用的描述
  • <distributalbe>——指定该站点是否可分布式处理
  • <context-param>——设定站点的环境参数
  • <filter>——定义过滤器
  • <filter-mapping>——为过滤器指定URL映射
  • <servlet>——定义Servlet
  • <servlet-mapping>——为Servlet指定URL映射
  • <listener>——用来设定listener接口
  • <mime-mapping>——定义某一个扩展名和某一个MIME TYPE的映射
  • <session-config>——配置HTTP会话
  • <welcome-file-list>——设置Web应用的Welcome文件清单
  • <error-page>——处理错误代码或异常的页面
  • <taglib>——声明引用的标签库
  • <resource-ref>——声明引用的JNDI资源
  • <security-constraint>——配置安全约束
  • <login-config>——配置安全验证登陆界面
  • <security-role>——配置安全角色

配置详解

根元素<web-app>

配置站点的环境参数<context-param>

例如:

my_param
hello
在此设定的参数,可以在servlet中用
getServletContext().getInitParameter("my_param") 来取得。

子元素:

  • <param-name>——参数名称
  • <param-value>——参数值

配置参数 —— webAppRootKey

在web容器下部署两个或者多个项目时,web.xml文件中最好定义webAppRootKey参数,不过不定义,将会缺省为”webapp.root“,如下:

webAppRootKey
webapp.root

最好对每个项目设置不同的值,以免引起项目冲突:

webAppRootKey
webapp.root1
webAppRootKey
webapp.root2

可以用System.getProperty("webapp.root")来动态获项目的运行路径。

一般返回结果例如:/usr/local/tomcat6/webapps/项目名

对多个项目进行不同的webAppRootKey的设置的目的:主要是为了设置 log 日志的输出目录:

通常,我们想将 log 日志的输出到对应项目的根目录下,在log4j的配置文件.properties或xml中通过指定该参数的值指定对应应用的根目录:

在log4j.properties配置文件,就可以按下面的方式使用${webapp.root}

log4j.appender.file.File=${webapp.root}/WEB-INF/logs/sample.log 或 log4j.appender.file.File=${webapp.root1}/WEB-INF/logs/sample.log 或 log4j.appender.file.File=${webapp.root2}/WEB-INF/logs/sample.log

就可以在运行时动态的找出项目的路径,设置log的输出路径。

参见Spring MVC 中的 Listener

配置过滤器<filter>

在Web应用中加入过滤器,需要在web.xml中配置两个元素:<filter>和<filter-mapping>。例如:

SampleFilter
mypack.SampleFilter
上面代码定义了一个过滤器,filter元素的子元素描述参见表:

  • <filter-name>——定义过滤器的名字,当Web应用中有多个过滤器时,不允许过滤器重名
  • <filter-class>——指定实现这一过滤器的类,这个类负责具体的过滤事务

<filter-mapping>元素用来设定过滤器负责过滤的URL,

SampleFilter
*.jsp
上面代码指明当客户请求访问Web应用中的所有JSP文件时,将处罚SampleFilter过滤器工作。具体的过滤事务由在<filter>元素中指定的类完成。

<filter-mapping>元素的子元素描述参见表:

  • <filter-name>——指定过滤器名,这里的过滤器名必须和<filter>元素中定义的过滤器名匹配
  • <url-pattern>——指定过滤器负责过滤的URL

配置Servlet<servlet>

<servlet>元素用来定义servlet,例如:

SampleServlet
mypack.SampleServlet
initParm1
2
1
<servlet>元素属性描述参见:

  • <servlet-name>——定义Servlet的名字
  • <servlet-class>——指定实现这个Servlet的类
  • <init-param>——定义Servlet的初始化参数(包括参数名和参数值),在一个<servlet>元素中可以有多个<init-param>,在Servlet类中通过getInitParameter(String name)方法访问初始化参数
  • <laod-on-startup>——指定当web应用启动时,加载Servlet的次序,当这个值为正数或零时,Servlet容器先加载数值较小的Servlet,再依次加载其他数值大的Servlet。如果这个值为负数或者没有设定,那么Servlet容器在Web客户端首次访问这个Servlet时加载它。

配置Servlet映射<servlet-mapping>

<servlet-mapping>元素用来设定客户访问某个Servlet的URL,例如:

SampleServlet
/sample
<servlet-mapping>使得程序中定义的Servlet类名和访问URL彼此独立。当Servlet类名发生改变时,只要修改<servlet-class>子元素即可。

<servlet-mapping>元素的子元素参见:

  • <servlet-name>——指定Servlet的名字,与<servlet>元素中的名字匹配
  • <url-pattern>——指定访问这个Servlet的URL,这里只需给出相对于整个Web应用的URL路径。参见 Servlet 和 Filter 的 URL 一节

url-pattern的设置

参见 Servlet 和 Filter 的 URL 设置一节。

配置Listener<listener>

例如,

com.myTest.ContextListener

子元素,

  • <listener-class>——定义listener类的名字

配置Session<session-config>

<session-config>元素用来设定HTTP Session的生命周期。例如,

30
指明Session可以保持不活动状态的最长时间为30秒,超过这一时间,Servelt容器将把它作为无效的Session处理。

<session-config>元素之包括一个子元素<session-timeout>,用来设定Session可以保持不活动状态的最长时间,这里采用的单位是“秒”。

配置MIME TYPE映射<mime-mapping>

例如,

doc
application/vnd.ms-word
xls
application/vnd.ms-excel
子元素,

  • <extension>——扩展名名称
  • <mime-type>——MIME格式

配置Welcome文件清单<welcome-file-list>

当客户访问Web应用时,如果仅仅给出Web应用的ROOT URL,没有指定具体的文件名,Servlet容器会自动调用Web应用的Welcome文件。<welcome-file-list>元素用来设定Welcome文件清单。

login.jsp
index.htm
在<welcome-file-list>中可以包含多个<welcome-list>,当Servlet容器调用Web应用的Welcome文件时,会自动寻找第一个<welcome-file>指定的文件(
通常位于Webcontent目录下,与WEB-INF同一层级)。如果这个文件存在,那么把这一文件返回给客户;如果不存在,则Servlet容器依次寻找下一个Welcome文件,直到找到为止;如果<welcome-file-list>元素中指定的所有文件都不存在,服务器向客户端返回“HTTP 404 NOT FOUND”的错误信息。

配置ERROR页面<error-page>

例如:

404
/error404.jsp
java.lang.Exception
/exception.jsp
子元素,

  • <error-code>——错误代码
  • <exception-type>——Java异常类型
  • <location>——相关资源路径

配置Tag Library<taglib>

<taglib>元素用来设置Web应用所引用的Tag Library,

/mytaglib
/WEB-INF/mytaglib.tld

<taglib>元素的子元素,

  • <taglib-uri>——设定Tag Library的唯一标识符,在Web应用中将根据这一标识符来引用Tag Library
  • <taglib-location>——指定Tag Library对应的TLD文件的位置

在JSP文件中可以引用Tag,

<%@ taglib prefix="c" uri="/mytaglib" %>
注:也可以不在web.xml中显式声明<taglib>;可以直接在jsp文件中引用,具体参见JSP标签库的使用

配置资源引用<resource-ref>

如果Web应用访问了由Servlet容器管理的某个JNDI Resource。则必须在web.xml文件中声明对这个JNDI Resource的引用。

表示资源引用的元素为<resource-ref>,

DB Connection
jdbc/sampleDB
javav.sql.DataSource
Container
<resource-ref>的子元素,

  • <description>——对所引用的资源的说明
  • <res-ref-name>——指定所引用资源的JNDI名字
  • <res-type>——指定所引用资源的类名字
  • <res-auth>——指定管理所引用资源的Manager,它有两个可选值:Container和Application,Container表示由容器来创建和管理Resource;Application表示由Web应用来创建和管理Resource

安全登陆、验证

配置web.xml来限制对某些资源,servlet的请求。有时我们只希望通过认证的用户才能请求某些servlet的话,就可以在web.xml中来进行相应的配置,来达到此目的。

对于tomcat,如果要在web.xml使用<security-constraint>元素,需要在位于<Tomcat-installation-directory>/conf/tomcat-users.xml的XML文件中创建用户名和密码。例如:

此XML片段包括一个tomcat-users根元素,它包含一个或多个role和user元素。

注:可参见《》(Category: Tomcat)

配置安全约束<security-constraint>

<security-constraint>用来保护为Web应用定义安全约束,

下面指明当用户访问该Web应用下的所有资源时,必须具备admin角色,

sample application
/*
GET
POST
This applies only to the "tomcat" security role
admin
子元素,

  • <web-resource-collection>——声明受保护的Web资源
  • <auth-constaint>——声明可以访问受保护的资源的角色,可以包含多个<role-name>子元素
  • <web-resource-name>——表示受保护的Web资源
  • <url-pattern>——指定受保护的URL路径
  • <>http-method>——指定安全限制覆盖的HTTP方法

注:该元素在web.xml中应该出现在<login-config>元素的紧前面

配置安全验证登陆界面<login-config>

<login-config>元素指定当Web客户访问受保护的Web资源(<security-constraint>元素中指定)时,系统弹出的登录对话框的类型。

Web应用程序通过login-config元素来认证用户,并确认该用户是否为正确的角色。

FORM
Form-Based Authentication Area
/login.jsp
/error.jsp

子元素,

  • <auth-method>——指定验证方法,有3个可选值:BASIC,DIGEST和FORM
  • <realm-name>——设定安全域的名称
  • <form-login-config>——当验证方法为FORM时,配置验证网页和出错网页
  • <form-login-page>——当验证方法为FORM时,设定验证网页
  • <form-error-page>——当验证方法为FORM时,设定出错网页

注:登陆验证的后台处理程序为j_security_check;在使用自定义FORM时,用户名和密码的参数名有固定的名称

BASIC是一种常见的Web认证方式,浏览器给用户提示一个对话框,要求输入用户名和密码,随后Tomcat将给出的用户名和密码与tomcat-users.xml中的用户名和密码进行比较,然后使用前面的security-constraint配置来确定用户是否可访问受保护的servlet。

配置对安全验证角色的引用

<security-role>元素指明这个Web应用引用的所有角色的名字,

The rile that is required to log in to the sample Application
admin

其实这种认证方法实际上有两个步骤:

  1. 检查提供的用户名和密码是否正确。
  2. 判断用户是否映射到特定的安全角色。例如,用户可能提供了正确的用户名和密码,但没有映射到特定的安全角色,也将被禁止访问特定的Web资源。

配置的加载顺序

  • 对于filter和servlet配置来说,<filter>,<servlet>在web.xml中的位置必须出现在对应<filter-mapping>,<servlet-mapping>之前;
  • 对于filter,web容器启动时按照filter在web.xml中定义的顺序来初始化;当匹配多个filter时,按照<filter-mapping>定义顺序调用doFilter方法;
  • web.xml的加载顺序是context-param -> listener -> filter -> servlet;
  • 同类型之间的调用顺序按照mapping定义的顺序;
  • filter的定义出现在servlet的定义之前;

转载地址:http://rcwfi.baihongyu.com/

你可能感兴趣的文章
概念区别
查看>>
关于静态块、静态属性、构造块、构造方法的执行顺序
查看>>
final 的作用
查看>>
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
优化IDEA启动速度,快了好多。后面有什么优化点,会继续往里面添加
查看>>
JMeter 保持sessionId
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>
Jenkins 启动命令
查看>>
Maven项目版本继承 – 我必须指定父版本?
查看>>
Maven跳过单元测试的两种方式
查看>>
通过C++反射实现C++与任意脚本(lua、js等)的交互(二)
查看>>
利用清华镜像站解决pip超时问题
查看>>
[leetcode BY python]1两数之和
查看>>