web.xml

web.xml部署描述符文件是web应用的配置文件,位于WEB-INF目录下。Servlet容器根据web.xml中的配置来指定特定的Servlet处理客户端的具体请求。

<util>标签

使用<util>标签,必须在XML根元素中加入util名称空间(namespace):

<web-app xmlns:util="http://http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">

分别使用<util:list>、<util:map>、<util:set>、<util:properties>等标签来取代ListFactoryBean、MapFactoryBean、SetFactoryBean、PropertiesFactoryBean对象。

其中的<util:properties>标签还可以通过location属性指定其properties属性文件的位置。

<util:properties id=”jdbcProps” location=”classpath:db.properties”/>

在xml中使用spring表达式获取utlil元素中的值:

<bean id=’datasource’ class=’xxx’>

    <property name=’url’ value=’#{jdbcProps.url}’></property>

</bean>

在setter方法前使用@Value注解获取util中的值

@Value(#{jdbcProps.url})

Private String url; 

                                 

<context:property-placeholder location="classpath*:conf/conf*.properties"/>:PropertyPlaceholderConfigurer实现了BeanFactoryPostProcessor接口,它能够对<bean/>中的属性值进行外在化管理,提供单独的属性文件来管理相关属性。将properties加载到spring上下文中,接下来在定义bean的时候就能用${xx.yy}来访问相关属性。

classpath*:是为了同时加载多个匹配的文件,而classpath:只能加载匹配的第一个文件。

在Spring中classpath一般指src目录。

 

<context-param>元素

用来声明整个web应用范围内的上下文初始化参数,该元素只能出现在与文档有关的元素(icon、display-name或description)之后及filter、filter-mapping、listener或 servlet元素之前。

Tomcat容器初始化过程:

1. 在启动Web项目时,容器(Tomcat)会读web.xml配置文件中的<listener>和<contex-param>两个节点。

2. 容器创建一个ServletContext(上下文),整个web应用都使用这个上下文。

3. 容器将读取到<context-param>元素的值传给ServletContext。

4. 容器创建<listener></listener>中的实例。

5. 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法,用于关闭应用前释放资源,比如数据库连接的关闭。

6. 得到这个context-param的值之后,就可以做一些操作了。此时Web项目还没有完全启动。

7. 由上可知容器对于web.xml的加载过程是context-param -> listener -> fileter -> servlet

<context-param><init-param>区别
(1) <context-param>整个application范围内的参数,存放在ServletContext中:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/applicationContext-*.xml</param-value>
</context-param>

servlet中获取的方式:

String paramValue = getServletContext().getInitParameter("contextConfigLocation")

 (2) <init-param>是servlet范围内的参数,只能在对应的servlet或jsp页面中获取:

<servlet>
    <servlet-name>MainServlet</servlet-name>
    <servlet-class>com.wes.controller.MainServlet</servlet-class>
    <init-param>
       <param-name>param</param-name>
       <param-value>avalible in servlet init()</param-value>
    </init-param>
</servlet>

Servlet中获取的方式:

String paramValue = this.getInitParameter("param");

 

<listener>元素

<listener>
    <listener-class>org.springframework.context.ContextLoaderListener</listener-class>
</listener>

作用:

Servlet规范中定义的监听器,用来监听Servlet容器产生的事件并进行相应的处理。

而上述的ContextLoaderListener是Spring提供的ServletContextListener的一个实现类,它会在tomcat容器初始化时查找WEB-INF下的applicationContext.xml文件(没有contextConfigLocation时),创建Spring容器。Spring容器根据其配置文件管理bean对象(bean默认为singleon作用域,applicationContext启动时会将其实例化)。

 

<load-on-startup>元素

<!—tomcat容器初始化时创建springmvc的前端控制器 -->

<servlet>
         <servlet-name>taotao-manager</servlet-name>
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         <init-param>
                   <param-name>contextConfigLocation</param-name>
                   <param-value>classpath:spring/springmvc.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
         <servlet-name>taotao-manager</servlet-name>
         <url-pattern>/</url-pattern>
</servlet-mapping>

用于标记tomcat容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。它的值必须是一个整数,表示servlet应该被载入的顺序。正数的值越小,该servlet的优先级越高,应用启动时就越先加载。当值相同时,容器就会自己选择顺序来加载。当值小于0或者没有指定时,则表示容器在该servlet被请求时才会去加载。当值为0或者大于0时,表示容器在应用启动时就加载并初始化该servlet。

posted @ 2017-04-16 15:24  开发之路  阅读(428)  评论(0编辑  收藏  举报