JavaWeb-web.xml

web.xmlServlet规范制定的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,htmjsp等) T
error-page 异常被抛出时,指定将要显示的页面。 T
jsp-config 用于为Web应用程序中的JSP文件提供全局配置信息。 它有两个子元素,taglibjsp-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,以下代码定义了一个名为SampleServletServlet,实现这个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>元素用来设定客户访问某个ServletURL,以下代码为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>子元素即可.

而客户端访问ServletURL无须做相应的改动.

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

属性 描述
<servlet-name> 指定Servlet名字,与<servlet>元素中定义的名字匹配
<url-pattern> 指定访问这个ServletURL,这里只需给出相对于整个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,有两个可选值:ContainerApplication,分别表示由容器还是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>,它指定客户端和服务器之间的通信应为NONEINTEGRALCONFIDENTIAL
默认为NONE,表示该应用程序不需要任何运输保证。
INTEGRAL表示应用程序要求在客户端和服务器之间发送的数据必须以在传输过程中无法更改的方式发送。
机密意味着应用程序要求以防止其他实体观察传输内容的方式传输数据。
在大多数情况下,如果出现INTEGRALCONFIDENTIAL标志,则表明需要使用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,如果roleadmin,则允许访问.

posted @ 2020-04-09 03:25  舒山  阅读(421)  评论(0编辑  收藏  举报