JavaWeb-web.xml
web.xml
是Servlet
规范制定的JavaWeb
应用发布描述文件.
二级元素
名称 | 描述 | 常用 |
---|---|---|
display-name | 定义了WEB应用的名字 | T |
description | 声明WEB应用的描述信息 | T |
distributable | 元素为空标签,它的存在与否可以指定站台是否可分布式处理.如果web.xml中出现这个元素,则代表站台在开发时已经 被设计为能在多个JSP Container 之间分散执行. | F |
context-param | 声明应用范围内的初始化参数。在应用内共享. | T |
filter | 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。 | T |
filter-mapping | 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。 | T |
listener | servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。 | T |
servlet | 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。 | T |
servlet-mapping | 定义了servlet与url之间的映射关系,其name与<servlet> 元素相连. |
T |
session-config | 如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。 可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。 |
T |
mime-mapping | 如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。 | F |
welcome-file-list | 欢迎页面(html ,htm 或jsp 等) |
T |
error-page | 异常被抛出时,指定将要显示的页面。 | T |
jsp-config | 用于为Web应用程序中的JSP文件提供全局配置信息。 它有两个子元素,taglib 和jsp-property-group 。 |
F |
security-constraint | 用于将安全约束与一个或多个Web资源集合相关联 | F |
login-config | 指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint 元素联合使用。 |
T |
security-role | 定义安全角色.该定义包括对安全角色的可选描述以及安全角色名称。 | F |
resource-env-refType | 声明与资源相关的一个管理对象。 | F |
resource-ref | 声明一个资源工厂使用的外部资源。 | F |
配置过滤器
对于Servlet
容器收到的客户请求,以及发出的响应结果,过滤器都能检查和修改其中的信息.在web
应用中加入过滤器,需要在web.xml
中配置两个元素:<filter>
和<filter-mapping>
.以下是<filter>
元素的示范:
<filter>
<filter-name>SampleFilter</filter-name>
<filter-class>com.yan.SampleFilter</filter-class>
</filter>
以上代码定义了一个过滤器,名为SampleFilter
,实现这个过滤器的类是com.yan.SampleFilter
.
<filter>
的子元素:
属性 | 描述 |
---|---|
<filter-name> | 定义过滤器的名字,当Web应用中有多个过滤器时,不允许重名 |
<filter-class> | 指定实现这一过滤器的类,这个类负责具体的过滤事务. |
<filter-mapping>元素用来设定过滤器负责过滤的URL
,一下是示范:
<filter-mapping>
<filter-name>SampleFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
以上代码指明当客户请求访问Web
应用中的所有JSP
文件时,将触发SampleFilter
过滤器工作.具体的过滤事务由在<filter>
元素中指定的类中完成.
<filter-mapping>
元素的子元素描述:
属性 | 描述 |
---|---|
<filter-name> |
指定过滤器名,这里的过滤器名必须和<filter> 元素中定义的名称对应. |
<url-pattern> |
指定过滤器负责过滤的URL |
配置Servlet
<servlet>
元素用来定义Servlet
,以下代码定义了一个名为SampleServlet
的Servlet
,实现这个Servlet
类的是com.yan.servlet.SampleServlet
:
<servlet>
<servlet-name>SampleServlet</servlet-name>
<servlet-class>com.yan.servlet.SampleServlet</servlet-class>
</servlet>
<servlet>
元素的属性描述:
属性 | 描述 |
---|---|
<servlet-name> |
定义Servlet 名字 |
<servlet-class> |
指定实现这个Servlet 的类 |
<init-param> |
定义Servlet 的初始化参数,对应的是<servlet-class> 定义的类中的实例属性.包含参数名和参数值,在一个 <servlet> 元素中可以有多个<init-param> .在Servlet 类中通过getInitParameter(String name) 方法访问初始化参数. |
<load-on-startup> |
指定当Web 应用启动时,加载Servlet 的次序,当这个值为正数或0时,Servlet 容器先加载数值较小的Servlet ,如果为负数或没有设定,那么Servlet 容器将在Web 客户首次访问这个Servlet 时加载它,即懒加载. |
配置Servlet映射
<servlet-mapping>
元素用来设定客户访问某个Servlet
的URL
,以下代码为SampleServlet
指定URL
为/sample
:
<servlet-mapping>
<servlet-name>SampleServlet</servlet-name>
<url-parttern>/sample</url-parttern>
</servlet-mapping>
<servlet-mapping>
使得程序中定义的Servlet
类名和客户访问的URL
彼此独立.当Servlet
类名发生改变时,只要修改<servlet>
元素中的<servlet-class>
子元素即可.
而客户端访问Servlet
的URL
无须做相应的改动.
<servlet-mapping>
元素的子元素:
属性 | 描述 |
---|---|
<servlet-name> |
指定Servlet 名字,与<servlet> 元素中定义的名字匹配 |
<url-pattern> |
指定访问这个Servlet 的URL ,这里只需给出相对于整个Web 应用的URL 路径 |
配置Session
<session-config>
元素用来设定HTTP Session
的生命周期.例如,如下代码指明Session
可以保持不活动状态的最长时间为30秒,超过这一时间,Servlet
容器将把它作为无效Session
处理.
<session-config>
<session-timeout>30</session-timeout>
</session-config>
配置Welcome文件清单
当客户访问Web
应用时,如果仅仅给出Web
应用的Root URL
,没有指定具体的文件名或资源路径,Servlet
会自动调用Web
应用的Welcome
文件.<welcome-file-list>
元素用来设定Welcome
文件清单.:
<welcom-file-list>
<welcome-file>login.jsp</welcome-file>
<welcome-file>login.html</welcome-file>
</welcom-file-list>
<welcome-file>
可以是一个序列,找到第一个合法文件即返回给客户端.
配置资源引用
如果Web
应用访问了由Servlet
容器管理的某个JNDI Resource,则必须在web.xml
文件中声明对这个JNDI Resource的引用.表示资源引用的元素为<resource-ref>
:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/sampleDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
其子元素描述:
属性 | 描述 |
---|---|
<description> |
说明 |
<res-ref-name> |
指定所引用资源的JNDI名字 |
<res-type> |
指定所引用资源的类名字 |
<res-auth> |
指定管理所引用资源的Manager ,有两个可选值:Container 和Application ,分别表示由容器还是Web应用 来创建和管理Resource . |
配置安全约束
<security-constraint>
用来为Web
应用应以安全约束.以下代码指明当前用户访问该Web
应用下的所有资源时,必须具备admin
角色.
<security-constraint>
<web-resource-collection>
<web-resource-name>sample application</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
元素的子元素:
元素 | 描述 |
---|---|
<web-resource-collection> |
声明受保护的Web 资源 |
<auth-constraint> |
声明可以访问受保护的资源的角色,可以包含多个<role-name> 子元素 |
<user-data-constraint> |
核心是<transport-guarantee> ,它指定客户端和服务器之间的通信应为NONE ,INTEGRAL 或CONFIDENTIAL 。默认为 NONE ,表示该应用程序不需要任何运输保证。值 INTEGRAL 表示应用程序要求在客户端和服务器之间发送的数据必须以在传输过程中无法更改的方式发送。机密意味着应用程序要求以防止其他实体观察传输内容的方式传输数据。 在大多数情况下,如果出现 INTEGRAL 或CONFIDENTIAL 标志,则表明需要使用SSL。 |
<web-resource-collection>
元素的子元素:
元素 | 描述 |
---|---|
<web-resource-name> |
标识受保护的Web 资源 |
<url-pattern> |
指定受保护的URL 路径,可以是多个 |
<http-method> |
指定受保护的方法,可以是多个 |
配置安全验证登录界面
<login-config>
元素指定当Web
客户访问受保护的Web
资源时,系统弹出的登录对话框的类型.以下代码配置了基于表单验证的登录界面:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Form-Based Authentication</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
<login-config>
元素的各个子元素:
属性 | 描述 |
---|---|
<auth-method> |
指定验证方法,它有三个可选:BASIC (基本验证),DIGEST (摘要验证)和FORM (表单验证) |
<realm-name> |
设定安全域的名称 |
<form-login-config> |
当验证方法为FORM 时,配置验证页面和出错页面 |
<form-login-page> |
当验证方法为FORM 时,登录界面路径 |
<form-error-page> |
当验证方法为FORM 时,设定出错页面 |
配置对安全验证角色的引用
<security-role>
元素指明这个Web
应用引用的所有角色的名字.例如,如下代码声明引用了admin
角色:
<security-role>
<description>
The Role that is required to log in to the sample Application
</description>
<role-name>admin</role-name>
</security-role>
安全配置的说明
如上我们所配置的安全信息生效,需要在WEB-INF/tomcat-user.xml
中配置相应的角色信息:
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin"/>
当用户访问当前页面/sample
时,会找到<login-config>
的实际配置给用户一个登录渠道,当用户输入的用户名密码对应上tomcat-user.xml
中配置的user
后找到其归属的role
,如果role
为admin
,则允许访问.