产品
解决方案
文档与社区
权益中心
定价
云市场
合作伙伴
支持与服务
了解阿里云
备案
控制台
登录/注册
开发者社区
首页
探索云世界
探索云世界
云上快速入门,热门云上应用快速查找
了解更多
问产品
动手实践
考认证
TIANCHI大赛
活动广场
活动广场
丰富的线上&线下活动,深入探索云世界
任务中心
做任务,得社区积分和周边
高校计划
让每位学生受益于普惠算力
训练营
资深技术专家手把手带教
话题
畅聊无限,分享你的技术见解
开发者评测
最真实的开发者用云体验
乘风者计划
让创作激发创新
阿里云MVP
遇见技术追梦人
直播
技术交流,直击现场
下载
下载
海量开发者使用工具、手册,免费下载
镜像站
极速、全面、稳定、安全的开源镜像
技术资料
开发手册、白皮书、案例集等实战精华
插件
为开发者定制的Chrome浏览器插件
探索云世界
新手上云
云上应用构建
云上数据管理
云上探索人工智能
云计算
弹性计算
无影
存储
网络
倚天
云原生
容器
serverless
中间件
微服务
可观测
消息队列
数据库
关系型数据库
NoSQL数据库
数据仓库
数据管理工具
PolarDB开源
向量数据库
热门
Modelscope模型即服务
弹性计算
云原生
数据库
物联网
云效DevOps
龙蜥操作系统
平头哥
钉钉开放平台
大数据
大数据计算
实时数仓Hologres
实时计算Flink
E-MapReduce
DataWorks
Elasticsearch
机器学习平台PAI
智能搜索推荐
人工智能
机器学习平台PAI
视觉智能开放平台
智能语音交互
自然语言处理
多模态模型
pythonsdk
通用模型
开发与运维
云效DevOps
钉钉宜搭
支持服务
镜像站
码上公益
开发者社区
开发与运维
文章
正文
Tomcat之web.xml
2016-05-19
1819
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和 《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介:
+关注继续查看
一、 tomcat
加载
web.xml
的方法
1
、启动一个
WEB
项目的时候,
WEB
容器会去读取它的配置文件
web.xml
,读取
<listener>
和
<context-param>
两个结点。
2
、紧急着,容创建一个
ServletContext
(
servlet
上下文),这个
web
项目的所有部分都将共享这个上下文。
3
、容器将
<context-param>
转换为键值对,并交给
servletContext
。
4
、容器创建
<listener>
中的类实例,创建监听器。
二、
load- on-startup
元素在
web
应用启动的时候指定了
servlet
被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该
servlet
被调用的时候,加载这个
servlet
。如果值是正整数或零,容器在配置的时候就加载并初始化这个
servlet
,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。
在
servlet
的配置当中,
<load-on- startup>5</load-on-startup>
的含义是:
标记容器是否在启动的时候就加载这个
servlet
。
当值为
0
或者大于
0
时,表示容器在应用启动时就加载这个
servlet
;
当是一个负数时或者没有指定时,则指示容器在该
servlet
被选择时才加载。
正数的值越小,启动该
servlet
的优先级越高。
三、
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰。
首先可以肯定的是,加载顺序与它们在
web.xml
文件中的先后顺序无关。即不会因为
filter
写在
listener
的前面而会先加载
filter
。最终得出的结论是:
listener -> filter ->
servlet
同时还存在着这样一种配置节:
context-param
,它用于向
ServletContext
提供键值对,即应用程序上下文信息。我们的
listener, filter
等在初始化时会用到这些上下文中的信息,那么
context-param
配置节是不是应该写在
listener
配置节前呢?实际上
context-param
配置节可写在任意位置,因此真正的加载顺序为:
context- param -> listener -> filter ->
servlet
对于某类配置节而言,与它们出现的顺序是有关的。以
filter
为例,
web.xml
中当然可以定义多个
filter
,与
filter
相关的一个配置节是
filter-mapping
,这里一定要注意,对于拥有相同
filter-name
的
filter
和
filter-mapping
配置节而言,
filter-mapping
必须出现在
filter
之后,否则当解析到
filter-mapping
时,它所对应的
filter- name
还未定义。
web
容器启动时初始化每个
filter
时,是按照
filter
配置节出现的顺序来初始化的,当请求资源匹配多个
filter-mapping
时,
filter
拦截资源是按照
filter-mapping
配置节出现的顺序来依次调用
doFilter()
方法的。
servlet
同
filter
类似
,此处不再赘述。
由此,可以看出,
web.xml
的加载顺序是:
context- param -> listener -> filter ->
servlet
,而同个类型之间的实际程序调用的时候的顺序是根据对应的
mapping
的顺序进行调用的。
web.xml
文件详解
Web.xml
常用元素
<web-app>
<display-name></display-name>
定义了
WEB
应用的名字
<description></description>
声明
WEB
应用的描述信息
<context-param></context- param> context-param
元素声明应用范围内的初始化参数。
<filter></filter>
过滤器元素将一个名字与一个实现
javax.
servlet
.Filter
接口的类相关联。
<filter- mapping></filter-mapping>
一旦命名了一个过滤器,就要利用
filter-mapping
元素把它与一个或多个
servlet
或
JSP
页面相关联。
<listener></listener>
servlet
API
的版本
2.3
增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或
servlet
环境时得到通知。
Listener
元素指出事件监听程序类。
<
servlet
></
servlet
>
在向
servlet
或
JSP
页面制定初始化参数或定制
URL
时,必须首先命名
servlet
或
JSP
页面。
Servlet
元素就是用来完成此项任务的。
<
servlet
- mapping></
servlet
-mapping>
服务器一般为
servlet
提供一个缺省的
URL
:
http://host /webAppPrefix/
servlet
/ServletName
。
但是,常常会更改这个
URL
,以便
servlet
可以访问初始化参数或更容易地处理相对
URL
。在更改缺省
URL
时,使用
servlet
-mapping
元素。
<session- config></session-config>
如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。
可通过使用
HttpSession
的
setMaxInactiveInterval
方法明确设置单个会话对象的超时值,或者可利用
session- config
元素制定缺省超时值。
<mime-mapping></mime-mapping>
如果
Web
应用具有想到特殊的文件,希望能保证给他们分配特定的
MIME
类型,则
mime-mapping
元素提供这种保证。
<welcome- file-list></welcome-file-list>
指示服务器在收到引用一个目录名而不是文件名的
URL
时,使用哪个文件。
<error-page></error-page>
在返回特定
HTTP
状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。
<taglib></taglib>
对标记库描述符文件(
Tag Libraryu Descriptor file
)指定别名。此功能使你能够更改
TLD
文件的位置,
而不用编辑使用这些文件的
JSP
页面。
<resource-env-ref></resource-env-ref>
声明与资源相关的一个管理对象。
<resource-ref></resource-ref>
声明一个资源工厂使用的外部资源。
<security-constraint></security-constraint>
制定应该保护的
URL
。它与
login-config
元素联合使用
<login-config></login- config>
指定服务器应该怎样给试图访问受保护页面的用户授权。它与
sercurity-constraint
元素联合使用。
<security- role></security-role>
给出安全角色的一个列表,这些角色将出现在
servlet
元素内的
security- role-ref
元素
的
role-name
子元素中。分别地声明角色可使高级
IDE
处理安全信息更为容易。
<env-entry></env-entry>
声明
Web
应用的环境项。
<ejb- ref></ejb-ref>
声明一个
EJB
的主目录的引用。
< ejb-local- ref></ ejb-local-ref>
声明一个
EJB
的本地主目录的应用。
</web-app>
相应元素配置
1
、
Web
应用图标:指出
IDE
和
GUI
工具用来表示
Web
应用的大图标和小图标
<icon>
<small-icon>/images/app_small.gif</small-icon>
<large-icon>/images/app_large.gif</large-icon>
</icon>
2
、
Web
应用名称:提供
GUI
工具可能会用来标记这个特定的
Web
应用的一个名称
<display-name>Tomcat Example</display-name>
3
、
Web
应用描述:
给出于此相关的说明性文本
<disciption>Tomcat Example servlets and JSP pages.</disciption>
4
、上下文参数:声明应用范围内的初始化参数。
<context-param>
<param-name>ContextParameter</para-name>
<param-value>test</param-value>
<description>It is a test parameter.</description>
</context-param>
在
servlet
里面可以通过
getServletContext().getInitParameter("context/param")
得到
5
、过滤器配置:将一个名字与一个实现
javaxs.
servlet
.Filter
接口的类相关联。
<filter>
<filter-name>setCharacterEncoding</filter-name>
<filter-class>com.myTest.setCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6
、监听器配置
<listener>
<listerner-class>listener.SessionListener</listener-class>
</listener>
7
、
Servlet
配置
基本配置
<
servlet
>
<
servlet
-name>snoop</
servlet
-name>
<
servlet
-class>SnoopServlet</
servlet
-class>
</
servlet
>
<
servlet
-mapping>
<
servlet
-name>snoop</
servlet
-name>
<url-pattern>/snoop</url-pattern>
</
servlet
-mapping>
高级配置
<
servlet
>
<
servlet
-name>snoop</
servlet
-name>
<
servlet
-class>SnoopServlet</
servlet
-class>
<init-param>
<param-name>foo</param-name>
<param-value>bar</param-value>
</init-param>
<run-as>
<description>Security role for anonymous access</description>
<role-name>tomcat</role-name>
</run-as>
</
servlet
>
<
servlet
-mapping>
<
servlet
-name>snoop</
servlet
-name>
<url-pattern>/snoop</url-pattern>
</
servlet
-mapping>
元素说明
<
servlet
></
servlet
>
用来声明一个
servlet
的数据,主要有以下子元素:
<
servlet
-name></
servlet
-name>
指定
servlet
的名称
<
servlet
-class></
servlet
-class>
指定
servlet
的类名称
<jsp- file></jsp-file>
指定
web
站台中的某个
JSP
网页的完整路径
<init- param></init-param>
用来定义参数,可有多个
init-param
。在
servlet
类中通过
getInitParamenter(String name)
方法访问初始化参数
<load-on- startup></load-on-startup>
指定当
Web
应用启动时,装载
Servlet
的次序。
当值为正数或零时:
Servlet
容器先加载数值小的
servlet
,再依次加载其他数值大的
servlet
.
当值为负或未定义:
Servlet
容器将在
Web
客户首次访问这个
servlet
时加载它
<
servlet
- mapping></
servlet
-mapping>
用来定义
servlet
所对应的
URL
,包含两个子元素
<
servlet
- name></
servlet
-name>
指定
servlet
的名称
<url- pattern></url-pattern>
指定
servlet
所对应的
URL
8
、会话超时配置(单位为分钟)
<session-config>
<session-timeout>120</session-timeout>
</session-config>
9
、
MIME
类型配置
<mime-mapping>
<extension>htm</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
10
、指定欢迎文件页配置
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
11
、配置错误页面
一、
通过错误码来配置
error-page
<error-page>
<error-code>404</error-code>
<location>/NotFound.jsp</location>
</error-page>
上面配置了当系统发生
404
错误时,跳转到错误处理页面
NotFound.jsp
。
二、通过异常的类型配置
error- page
<error-page>
<exception-type>
Java
.lang.NullException</exception-type>
<location>/error.jsp</location>
</error-page>
上面配置了当系统发生
java.lang.NullException
(即空指针异常)时,跳转到错误处理页面
error.jsp
12
、
TLD
配置
<taglib>
<taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri>
<taglib-location>/WEB-INF/jsp/debug-taglib.tld</taglib-location>
</taglib>
如果
MyEclipse
一直在报错
,
应该把
<taglib>
放到
<jsp-config>
中
<jsp-config>
<taglib>
<taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri>
<taglib-location>/WEB-INF/pager-taglib.tld</taglib-location>
</taglib>
</jsp-config>
13
、资源管理对象配置
<resource-env-ref>
<resource-env-ref-name>jms/StockQueue</resource-env-ref-name>
</resource-env-ref>
14
、资源工厂配置
<resource-ref>
<res-ref-name>mail/Session</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
配置
数据库
连接池就可在此配置:
<resource-ref>
<description>JNDI JDBC DataSource of shop</description>
<res-ref-name>jdbc/sample_db</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
15
、安全限制配置
<security-constraint>
<display-name>Example Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/jsp/security/protected/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>tomcat</role-name>
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
16
、登陆验证配置
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Example-Based Authentiation Area</realm-name>
<form-login-config>
<form-login-page>/jsp/security/protected/login.jsp</form-login-page>
<form-error-page>/jsp/security/protected/error.jsp</form-error-page>
</form-login-config>
</login-config>
17
、安全角色:
security-role
元素给出安全角色的一个列表,这些角色将出现在
servlet
元素内的
security-role-ref
元素的
role-name
子元素中。
分别地声明角色可使高级
IDE
处理安全信息更为容易。
<security-role>
<role-name>tomcat</role-name>
</security-role>
18
、
Web
环境参数:
env-entry
元素声明
Web
应用的环境项
<env-entry>
<env-entry-name>minExemptions</env-entry-name>
<env-entry-value>1</env-entry-value>
<env-entry-type>java.lang.Integer</env-entry-type>
</env-entry>
19
、
EJB
声明
<ejb-ref>
<description>Example EJB reference</decription>
<ejb-ref-name>ejb/Account</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>com.mycompany.mypackage.AccountHome</home>
<remote>com.mycompany.mypackage.Account</remote>
</ejb-ref>
20
、本地
EJB
声明
<ejb-local-ref>
<description>Example Loacal EJB reference</decription>
<ejb-ref-name>ejb/ProcessOrder</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>com.mycompany.mypackage.ProcessOrderHome</local-home>
<local>com.mycompany.mypackage.ProcessOrder</local>
</ejb-local-ref>
21
、配置
DWR
<
servlet
>
<
servlet
-name>dwr-invoker</
servlet
-name>
<
servlet
-class>uk.ltd.getahead.dwr.DWRServlet</
servlet
-class>
</
servlet
>
<
servlet
-mapping>
<
servlet
-name>dwr-invoker</
servlet
-name>
<url-pattern>/dwr/*</url-pattern>
</
servlet
-mapping>
22
、配置
Struts
<display-name>Struts Blank Application</display-name>
<
servlet
>
<
servlet
-name>action</
servlet
-name>
<
servlet
-class>
org.apache.struts.action.ActionServlet
</
servlet
-class>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</
servlet
>
<
servlet
-mapping>
<
servlet
-name>action</
servlet
-name>
<url-pattern>*.do</url-pattern>
</
servlet
-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>struts-bean</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-html</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-nested</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-nested.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-logic</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-tiles</taglib-uri>
<taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
</taglib>
23
、配置
spring
(基本上都是在
Struts
中配置的)
<!--
指定
spring
配置文件位置
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
<!--
加载多个
spring
配置文件
-->
/WEB-INF/applicationContext.xml, /WEB-INF/action-
servlet
.xml
</param-value>
</context-param>
<!--
定义
SPRING
监听器,加载
spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
文章标签:
Java
容器
安全
应用服务中间件
开发工具
Spring
IDE
API
数据库
数据库连接
关键词:
Tomcat web.xml
benjaminwhx
目录
相关文章
root8042965
|
6天前
|
负载均衡
应用服务中间件
nginx
Docker配置1台Nginx+3台Tomcat做负载均衡
Docker配置1台Nginx+3台Tomcat做负载均衡
root8042965
20
0
0
姿势不太差
|
6天前
|
Oracle
Java
关系型数据库
JAVAweb 的Eclipse配置及需要安装的jdk及tomcat 完整详细 搭配图片,详细易懂
JAVAweb 的Eclipse配置及需要安装的jdk及tomcat 完整详细 搭配图片,详细易懂
姿势不太差
21
0
0
流烟默
|
6天前
|
Java
应用服务中间件
Maven
Maven - 两种Tomcat插件的配置
Maven - 两种Tomcat插件的配置
流烟默
25
0
0
流烟默
|
6天前
|
Java
应用服务中间件
数据库连接
项目编码解码和Tomcat配置
项目编码解码和Tomcat配置
流烟默
17
0
0
技术小阿哥
|
Web App开发
Java
应用服务中间件
死磕Tomcat7源码之一:解析web.xml
技术小阿哥
1084
0
0
技术小阿哥
|
Java
应用服务中间件
数据库连接
Tomcat 服务器server.xml,web.xml的关键参数配置
技术小阿哥
1293
0
0
互联网编程
|
应用服务中间件
容器
Servlet容器Tomcat中web.xml中url-pattern的配置详解[附带源码分析]
http://www.cnblogs.com/fangjian0423/p/servletContainer-tomcat-urlPattern.html#springmvc
互联网编程
947
0
0
developerguy
|
Java
应用服务中间件
数据安全/隐私保护
tomcat简介之web.xml详解(转)
http://blog.csdn.net/facepp/archive/2008/04/19/2306602.aspx 位于每个Web应用的WEB-INF路径下的web.xml文件被称为配置描述符,这个 web.xml文件对于Java Web应用十分重要,每个Java Web应用都必须包含一个web.xml文件,且必须放在WEB-INF路径下。
developerguy
1472
0
0
shy丶gril
|
XML
Java
应用服务中间件
死磕Tomcat7源码之一:解析web.xml
shy丶gril
3202
0
1
suboysugar
|
网络协议
Java
应用服务中间件
**tomcat简介之web.xml详解
一、Tomcat背景 自从JSP发布之后,推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet, 这样Tomcat就诞生了。
suboysugar
901
0
0
热门文章
最新文章
1
带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(2)
2
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(3)
3
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(6)
4
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(4)
5
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(2)
6
带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(1)
7
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(1)
8
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(5)
9
带你读《Apache Tomcat的云原生演进》——GraalVM static compilation in web container application(3)
10
带你读《Apache Tomcat的云原生演进》——卷首语
1
linux tomcat 解压安装
7
2
Tomcat - 部署项目的四种方式
10
3
Tomcat安装配置后,浏览器在哪里打开
11
4
Tomcat控制台乱码问题修复
13
5
【Linux】jdk、tomcat、MySQL环境搭建的配置安装,Linux更改后端端口
29
6
哇~~真的是你呀!今天是LINUX中的Tomcat
19
7
Docker配置1台Nginx+3台Tomcat做负载均衡
20
8
【JavaWeb学习】—IDEA整合Tomcat服务器(十二)
8
9
【JavaWeb学习】—如何修改Tomcat的端口号(十)
11
10
【JavaWeb学习】—停止Tomcat服务器的几种方式(九)
13
相关产品
云迁移中心
文档详情
产品详情
相关课程
更多
Java Web开发-Web应用、Tomcat、HTTP请求与响应
Tomcat服务器入门详解
XML入门
相关电子书
更多
Apache Tomcat 的云原生演进
WEB SERVICE EFFICENCY
低代码开发师(初级)实战教程
相关实验场景
更多
Html5和Webpack1:Webpack5打包工具介绍
Html5和Webpack2:Webpack5打包JS和样式表
Html5和Webpack3:Webpack5的常见用法
推荐文章
更多
重磅来袭!参与评测赢Iphone14 pro!
文件存储NAS评测征集令!
招募!寻找技术人的伯乐!
乘风者计划邀您入驻社区,精彩权益即刻享
下一篇
手动搭建WordPress(CentOS 8)