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数据。它的子元素:
Element | Required/Optional | Description |
<icon> | Optional | 指出IDE和GUI工具用来表示web应用的大图标和小图标 |
<servlet-name> | Required | servlet的标准名称,用于在部署描述块的其它地方 |
<display-name> | Optional | GUI工具显示的简短名字 |
<description> | Optional | servlet的描述 |
<servlet-class> | Required(或<jsp-file>) | servlet的完全限定类名 |
<jsp-file> | Required | jsp文件在web应用中相对于web应用根目录的完整路径 |
<init-param> | Optional | 包含一个键值对作为servlet的初始化属性,<init-param>可以有多个 |
<load-on-startup> | Optional | 服务器启动时,服务器初始化servlet的时间。当值为正数或0时,servlet容器先加载数值小的servlet;当值为负数或未定义时,servlet容器会在应用启动期间以任意次序加载(首次访问这个servlet时) |
<servlet-mapping>:servlet和url的映射。子元素:
Element | Required/Optional | Description |
<servlet-name> | Required | |
<url-pattern> | Required |
<filter>:定义一个filter类及它的初始化属性。子元素:
Element | Required/Optional | Description |
<icon> | Optional | |
<filter-name> | Required | |
<display-name> | Optional | |
<description> | Optional | |
<filter-class> | Required | |
<init-param> | Optional |
Element | Required/Optional | Description |
<filter-name> | Required | |
<url-pattern> | Required - or map by <servlet> | |
<servlet-name> | Required - or map by <url-pattern> |
Element | Required/Optional | Description |
<session-timeout> | Optional | session失效时间,单位为分钟 |
Element | Required/Optional | Description |
<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的方式 :
相关文章推荐
- web项目启动初始化java Demo
- Javaweb 项目启动数据初始化
- java web项目初始化启动一个java方法
- maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
- linux 下 启动web项目报 java.net.UnknownHostException
- maven项目 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Gradle 使用Jetty插件启动web项目时出现"java.lang.OutOfMemoryError: PermGen space"解决方法
- Maven工程启动报错:maven 项目出现 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoad
- 【Java.Web】Servlet —— Servlet容器的启动及Servlet创建及初始化,容器默认的Servlet
- java web项目启动时浏览器路径不用输入项目名称方法
- maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
- maven创建spring项目之后,启动报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade
- java web项目启动加载顺序之web.xml部分
- tomcat启动java web项目时报…
- 启动Java Web项目时提示错误:A child container failed during start
- web项目启动报错 : java.lang.OutOfMemoryError: Java heap space
- JAVAWEB系统启动时,初始化配置文件信息
- maven项目 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- IntelliJ IDEA 14.0 javaweb项目发布及启动