web.xml配置文件

来源:互联网 发布:手机号被绑定淘宝账号 编辑:程序博客网 时间:2024/06/05 11:14

我们所创建的web项目,通常都有一个web.xml的配置文件,这个文件并不是必须存在的。

web中我们需要加载对数据库的支持(提供数据)和servlet的支持(请求返回响应信息),也是web不可缺少的一部分。


web的执行:

      当web项目启动时,会去读取web.xml的文件。



      首先读取<context-param>节点,他是用来转换键值对的。

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

     然后,容器会创建一个servletContext(servlet的上下文),然后web项目会共享整个上下文。

             再解释一下上下文的意思:servlet的上下文是一个全局的存储信息的空间,服务器启动的时候创建,服务器关闭就释放。从个人理解,当context-param获取到web项目需要的内容信息后,放入servletContext这个全局存储空间,分享到web的整个项目,供用户使用时web项目提取相应的信息。那为什么要用servletContext呢?例如,当用户提取数据库信息时,我们把信息存入session,每次用户访问都要去访问数据库,效率很慢,所以放入servletContext,直接在上下文中提取信息就行。




      其次是listener, filter,他们的初始化会用到servletContext(servlet上下文)中的信息。


                <!-- 用来实例化spring容器的监听器   listener -->

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

            


              filter过滤器,可以阻止url请求,过滤url请求,当请求符合要求时才会批准请求,进行响应。

              用户在访问某个目标资源之前,对访问的请求和响应进行拦截,做一些处理,然后再调用目标程序,这样做的好处是可以对一些公共的操作进行抽象,就拿设置字符集来说,如果不使用这种方式,我们每个页面都要写设置字符集的语句。不但麻烦而且维护困难,但是如果使用filter的话,只需要添加一个类,在xml中配置一下,如果不想使用了,将配置文件中的内容去除即可。


               <!-- 对于某类配置节而言,与它们出现的顺序是有关的 -->

                <!-- filter-mapping 必须出现在 filter 之后,否则当解析到 filter-mapping 时,它所对应的 filter-name 还未定义。

                     web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,

                     filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的 -->

                 <filter>
                     <filter-name>SpringEncodingFilter</filter-name>
                     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
                     <init-param>
                         <param-name>encoding</param-name>
                         <param-value>UTF-8</param-value>
                     </init-param>
                     <init-param>
                            <param-name>forceEncoding</param-name>
                            <param-value>true</param-value>
                    </init-param>
                </filter>
                <filter-mapping>
                     <filter-name>SpringEncodingFilter</filter-name>
                      <url-pattern>/*</url-pattern>
                 </filter-mapping> 



          最后是servlet

               servlet只有在web.xml中配置了,程序才能加载并执行servlet代码

                      <servlet>
                           <servlet-name>mybatis</servlet-name>
                           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                           <init-param>
                                 <param-name>contextConfigLocation</param-name>
                                 <param-value>classpath:mybatis-servlet.xml</param-value>
                            </init-param>
                            <load-on-startup>1</load-on-startup>
                      </servlet>

           注意:load-on-startup:标记容器是否在启动的时候就加载这个servlet。

                       当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

                       当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

                       正数的值越小,启动该servlet的优先级越高。




小结:web.xml的执行顺序

                       context-param –> listener –> filter –> servlet


                      

              


     

   


0 0