您的位置:首页 > 编程语言 > Java开发

java web项目的启动及初始化

2017-05-08 09:22 113 查看


一、web.xml的加载过程

在java web项目启动时,容器会读取配置文件web.xml,加载顺序与web.xml中内容的先后顺序无关。配置文件加载的先后顺序为:

①<context-param>,②<listener>,③<filter>,④<servlet>.

1、web项目启动时,首先读取配置文件中的<listener>和<context-param>两个节点

  <context-param>元素包含web应用servlet上下文初始化参数的声明。

  <listener>元素用来注册一个监听器类。事件监听程序在①应用的启动和关闭;②session的创建与销毁,属性的新增、移除和更改;③对象被绑定到session中或从session中删除;时得到通知。

2、容器创建ServletContext,将<context-param>转化为键值对,并交给ServletContext

3、容器创建<listener>中的类实例


二、web.xml标签含义

web.xml的模式文件由Sun公司定义,在文件根元素<web-app>中须注明文件使用的哪个模式文件。

<display-name>:指定web应用程序显示的名字,这个名字可以通过GUI tools显示

<context-param>:包含web应用servlet上下文初始化参数的声明。listener、filter等在初始化时可以使用这些上下文信息。在servlet中可以通过getServletContext().getInitParameter("context/param")方法获取参数的值

 

<listener>:用来注册一个监听器类。事件监听程序在①应用的启动和关闭;②session的创建与销毁,属性的新增、移除和更改;③对象被绑定到session中或从session中 删除;时得到通知。

//TODO:三种listener

 

 <servlet>:声明一个Servlet数据。它的子元素:
ElementRequired/OptionalDescription
<icon>Optional指出IDE和GUI工具用来表示web应用的大图标和小图标
<servlet-name>Requiredservlet的标准名称,用于在部署描述块的其它地方
<display-name>OptionalGUI工具显示的简短名字
<description>Optionalservlet的描述
<servlet-class>Required(或<jsp-file>)servlet的完全限定类名
<jsp-file>Requiredjsp文件在web应用中相对于web应用根目录的完整路径
<init-param>Optional包含一个键值对作为servlet的初始化属性,<init-param>可以有多个
<load-on-startup>Optional服务器启动时,服务器初始化servlet的时间。当值为正数或0时,servlet容器先加载数值小的servlet;当值为负数或未定义时,servlet容器会在应用启动期间以任意次序加载(首次访问这个servlet时)
 

<servlet-mapping>:servlet和url的映射。子元素:
ElementRequired/OptionalDescription
<servlet-name>Required 
<url-pattern>Required 
 

<filter>:定义一个filter类及它的初始化属性。子元素:
ElementRequired/OptionalDescription
<icon>Optional 
<filter-name>Required 
<display-name>Optional 
<description>Optional 
<filter-class>Required 
<init-param>Optional 
<filter-mapping>:filter和url的映射。子元素:
ElementRequired/OptionalDescription
<filter-name>Required 
<url-pattern>Required - or map

by <servlet>
 
<servlet-name>Required - or map

by <url-pattern>
 
<session-config>:定义web应用的session属性。子元素:
ElementRequired/OptionalDescription
<session-timeout>
Optionalsession失效时间,单位为分钟
<welcome-file-list>:包含一个<welcome-file>的列表。当请求的url是一个目录名还不是文件名时,使用第一个<welcome-file>中的文件,若不存在,使用第二个<welcome-file>中的文件。子元素:
ElementRequired/OptionalDescription
<welcome-file>Optional用做默认的welcome file的文件名,例如index.html

方法.用于关闭应用前释放资源.比如说数据库连接的关闭.

web.xml节点加载顺序:

可以肯定的是,节点的加载顺序与它们在 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() 方法的
a48f


       servlet 同 filter 类似,此处不再赘述。

【加载spring

       比如filter 需要用到 bean ,但加载顺序是: 先加载filter 后加载spring,则filter中初始化操作中的bean为null;

       所以,如果过滤器中要使用到 bean,可以将spring 的加载 改成 Listener的方式 :
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java web web.xml
相关文章推荐