`
mllongze
  • 浏览: 82980 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

web.xml解析

阅读更多
【1】.web.xml头文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
【2】session的超时时间设定
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

主要指定默认的会话超时时间间隔,单位是以分种为单位如上:30分种;该元素必须为整数如果该参数为0或负数则表示session会话永不超时!
setMaxInactiveInterval方法是设置当前会话的失效时间而不是整个web的失效时间单位是以秒为单位如为0或负数表示同上,常用于表示当前会话失效时间!

【3】ContextLoaderListener监听类
<listener>
   <listener-class>
	org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>
主要是在web容器启动的时候自动装配ApplicationContext的配置信息;如果web.xml中不写配置信息默认的路径是/WEB-INF/appliactionContext.xml所以必须在相应的目录下创建名称与applicationContext.xml文件名相同的文件在web.xml才会启动!也可以自定义其文件名可以在web.xml中加入contextConfigLocation这个context参数
<context-param>
   <param-name>contextConfigLocation</param-name>
	<param-value>
          	classpath:modules/applicationContext.xml,
		classpath:modules/**/spring-conf/*.xml,
		classpath:modules/**/struts-spring-conf/*.xml		 </param-value>
</context-param>
classpath:表示在classpath下查找
*:表示通配符
注:在web.xml里也可指定多个context参数
【4】filter过虑器
<filter>
  <filter-name>encodingFilter</filter-name>
	<filter-class>			   org.springframework.web.filter.CharacterEncodingFilter
	</filter-class>
  <init-param>
	<param-name>encoding</param-name>
	<param-value>UTF-8</param-value>
         <param-name>forceEncoding</param-name>
         <param-value>true</param-value>
  </init-param>
</filter>	
这里使用spring工具类里的CharacterEncodingFilter编码过虑器encoding表示编码格式forceEncoding表示是否强制编码
注:这里要说明一点就是在配置多个过滤器的时候(拿struts2中的
<filter>
<filter-name>Struts2</filter-name>
<filter-class>
   org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
)为例
spring中CharactorEncodingFilter的核心方法为doFilterInternal
(截取一断代码)
if (this.encoding != null && (this.forceEncoding ||request.getCharacterEncoding() == null)) {   
        request.setCharacterEncoding(this.encoding);//设置字符集编码   
    if (this.forceEncoding&&responseSetCharacterEncodingAvailable) {   
          response.setCharacterEncoding(this.encoding);      
   }   
}   
filterChain.doFilter(request, response);//激活下一个过滤器  


这里的this.encoding就是上面配置文件中的<param-name>里的encoding这里我们清楚的看到this.encoding!=null的时候就会setCharactorEncoding最后执行下一个过滤器(也就是struts2)在执行struts2中的FilterDispatcher

    查看一下FilterDispatcher的源码在其doFilter里找到了方法prepareDispatcherAndWrapRequest(是对request预处理和封装的方法

protected HttpServletRequest prepareDispatcherAndWrapRequest(HttpServletRequest request,HttpServletResponse response) throw ServletException{

        Dispatcher du = Dispatcher.getInstance();
        if(du==null){
            Dispatcher.setInstance(dispatcher);
            [color=red]dispatcher.prepare(request,response);[/color]        }
        //////
       return request;


}
prepare(request,response)方法【

public void prepare(HttpServletRequest request,HttpServletResponse response){

      if(defaultEncoding!=null){
          encoding = [color=red]defaultEncoding[/color];
      }
      ////
      if(encoding!=null){
         try {   
            request.setCharacterEncoding(encoding);//设置了字符集  
         } catch (Exception e) {   
            LOG.error("Error setting character encoding to '" + encoding + "' - ignoring.", e);   
         }   
      }
}
@Inject(StrutsConstants.STRUTS_I18N_ENCODING)   
public static void setDefaultEncoding(String val) {   
       defaultEncoding = val;   
}  


这里的defaultEncoding就是struts.xml里配置struts.i18n.encoding属性值
)
】时候里面设置的设置编码是跟据struts.xml里struts.i18n.encoding里的值【这里说明的主要目的是这俩个过滤器在一起的时候(spring在前)即使spring指定utf-8在Action中也可能出现乱码】最后注意一点就是在配置多个过滤器的同时要把struts2的过滤器放到最后。。为了防止过滤器链中断!
注:拦截器与过滤器的区别

1.拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2.过滤器依赖servlet容器,而拦截器不依赖servlet容器
3.拦截器只能对action请求作用而过滤器则可以对所有的请求起作用
4.在action的生命同期拦截器可以调用多次,而过滤器只能在容器初始化时被调用一次

struts的拦截器是指
【5】OpenSessionInViewFilter
OpenSessionInViewFilter类是spring提供针对Hibernate的一个支持类
<filter>
    <filter-name>lazyLoadingFilter</filter-name>
<filter-class>
  org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>	
<init-param>
   <param-name>singleSession</param-name>
   <param-value>false</param-value>
</init-param>
</filter>
在这里说一下为什么使用OpenSessionInViewFilter?
在Hibernate+spring时候如果设置了lazy=true那在读取数据当读取了父数据后Hibernate session就会关闭这样当使用用子数据的时候就会报出lazyinit异常这时就需要使用spring的OpenSessionInViewFilter
OpenSessionInViewFilter主要是保持Session状态直到request将全部页面发送到客户端这样就可以解决延迟加载的问题.
这个Filter和上面的Filter一样都要放到Struts2Filter之后
在OpenSessionInViewFilter中的singleSession(默认true)如果设置成true表示一个request只能打开一个session如果设置为false表示session可以打开多个这时可能会出现update,delete报打开多个session异常但当设置为true的时候系统的性能会因为用户的网络受到影响在request生成页面之后session才会被释放如用户网络很差那么连接池中的连接会迟迟不回收,造成内存增加,系统性能受损,但如果不true lazy的功效发挥不出来!!!
OpenSessionInViewFilter的调用流程:request->open session->transaction ->controller->View(JSP)->结束transaction并close session 流程没有什么问题
但想一下如果其中某一部分堵塞了。。那么connection就一直占用不放,最有可能堵塞的就是jsp这一部分一方面可能是页面内容大,response.write()时间长另一方面可能是网络慢,服务器与用户交互时久,当大量这样的情况出现时,就会出现连接池不足造成页面假死!!!
【6】ActionContextCleanUp
ActionContextCleanUp的作用是延长action中属性的生命周期,包括自定义属性,以便在jsp页面可以访问让ActionContextCleanUp来清除不让action自己来清除!
注:ActionContextCleanUp自struts2.1.3版本开始就已经不在采用这种方式了
将使用StrutsPrepareFilter和StrutsExecuteFilter来替代 如项目中遇到sitemesh Filter的话一定要注意顺序先(ActionContextCleanUp)StrutsPrepareFilter -- sitemesh ---StrutsExecuteFilter。
ActionContextFilter struts2.1.3之后邮(StrutsPrepareFilter和StrutsExecuteFilter)组合来代替.

自Struts2.1.3以后就这样去定义了
<filter>  
<filter-name>StrutsPrepareFilter</filter-name>  
<filter-class>
 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>  
</filter> 】
<filter>  
        <filter-name>struts-cleanup</filter-name>  
        <filter-class>
            org.apache.struts2.dispatcher.ActionContextCleanUp
        </filter-class>  
</filter> 

是告诉会通知FilterDispatcher在正确的时间清除请求
【6】StrutsPrepareAndExecuteFilter
FilterDispatcher是早期struts的过滤器2.1.3以后就都使用StrutsPrepareAndExecuteFilter了这样替代的好处就是如果是FilterDispatcher的话我必须使用Action的环境,而又想在执行action之前拿filter做一些事, 用FilterDispatcher是做不到的.!
StrutsPrepareAndExecuteFilter是可以分成StrutsPrepareFilter和StrutsExecuteFilter的;“可以在这两个过滤器之间加上我们自己的过滤器”
【7】FCK与Struts2Filter冲突问题

Fckeditor在web.xml中的配置
<servlet>
	<servlet-name>ConnectorServlet</servlet-name>
		<servlet-class>
			net.fckeditor.connector.ConnectorServlet
		</servlet-class>
		<load-on-startup>2</load-on-startup>
	</servlet>
<servlet-mapping>
	<servlet-name>ConnectorServlet</servlet-name>
	<url-pattern>
            /skin/fckeditor/editor/filemanager/connectors/*
         </url-pattern>
</servlet-mapping>

想使用fckeditor还必须在fckeditor.properties设置
connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
需要把Struts2的Mapping只过滤*.jsp/*.action这样
【8】web.xml中taglib标签不识别问题
如果web.xml的web-app_2.3.dtd 就可以直接去写如

<taglib>  
  <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>  
  <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>  
</taglib> 

如果是web-app_2.4.dtd就需要这样去写

<jsp-config>  
<taglib>  
  <taglib-uri>/WEB-INF/validator-user.tld</taglib-uri>  
  <taglib-location>/WEB-INF/validator-user.tld</taglib-location>  
</taglib>  
</jsp-config>  
分享到:
评论
2 楼 mllongze 2011-04-29  
haidage 写道
哥们咱能不能分几章写,多好。

这样给看的人一次看完的机会,,,
1 楼 haidage 2011-04-28  
哥们咱能不能分几章写,多好。

相关推荐

    在web.xml中引入其他xml配置文件的步骤

    ### 在web.xml中引入其他XML配置文件的步骤 在Java Web开发中,`web.xml`作为Web应用程序的核心配置文件,负责定义应用级别的配置信息。为了提高代码的可维护性和复用性,有时需要将一部分配置内容提取到独立的XML...

    tomcat配置文件web.xml与server.xml解析

    Tomcat 配置文件 web.xml 与 server.xml 解析 Tomcat 配置文件 web.xml 和 server.xml 是 Tomcat 自身的配置文件,用于配置 Tomcat 服务器的行为和性能。在本文中,我们将对 web.xml 和 server.xml 中的主要配置项...

    web.xml+详细解析.rar

    《web.xml详解与应用》 在Java Web开发中,`web.xml`文件是核心配置文件,它是应用服务器启动时加载的部署描述符,用于定义Web应用程序的结构、配置及行为。本篇将深入探讨`web.xml`的重要概念、元素、属性以及在...

    web.xml加载顺序与web.xml常用节点解析

    了解`web.xml`的加载顺序和节点解析,有助于我们更有效地配置和管理Web应用程序,确保其在运行时能够按照预期工作。通过合理的配置,我们可以实现诸如初始化资源、拦截请求、处理异常、安全管理等多种功能,提高Web...

    web.xml配置解析

    ### web.xml配置解析 #### 一、概述 `web.xml`是Java Web应用程序中的核心配置文件,用于描述和管理Web应用程序的各种组件,如Servlet、过滤器(Filter)、监听器(Listener)等。它是一个XML文件,遵循特定的DTD...

    web.xml 中的listener、 filter、servlet 加载顺序及其详解.doc

    Web.xml 中的 listener、filter、servlet 加载顺序及其详解 在 Web 应用程序中,web.xml 文件扮演着非常重要的角色,它定义了 Web 应用的结构和配置。其中,listener、filter、servlet 是三个非常重要的概念,它们...

    web.xml配置详解

    web.xml 文件必须遵守 DTD 文件的规则,否则将无法被正确解析。 部署描述符 web.xml 文件是 Servlet/JSP 应用的部署描述符,用于描述应用程序的各个方面的元素,如 servlet 注册、servlet 映射以及监听器注册。...

    WEB.XML详解

    WEB.xml详解主要涉及了Java EE Web应用程序的标准配置文件web.xml的详细使用说明,这是Servlet规范中定义的一个配置文件,用于配置web应用的初始化参数、servlet和filter、监听器等组件。 首先,web.xml文件在Web...

    无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl

    标题中的问题“无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl”指出,这可能是Java Web应用开发中遇到的一个常见错误,涉及到JSP(JavaServer Pages)和JSTL(Java...

    SpringMVC基于代码的配置方式(零配置,无web.xml)

    传统的SpringMVC配置往往依赖于XML文件,如web.xml和spring-servlet.xml等,但随着Spring框架的发展,出现了基于代码的配置方式,实现了零XML配置,提高了开发效率。本文将详细介绍如何在不使用web.xml的情况下,...

    Jboss启动报Failed to parse WEB-INFweb.xml; - nested throwable错误

    但是,如果web.xml文件存在语法错误或配置错误,Jboss将无法正确地解析该文件,从而导致启动报错Failed to parse WEB-INF/web.xml; - nested throwable。 错误分析 从错误日志中可以看到,Jboss在启动时抛出了一个...

    web.xml详细解析四合一.docx

    《web.xml详细解析四合一》 web.xml是Java EE应用程序中的核心配置文件,它定义了Web应用的行为和结构。此文件对于理解Web应用如何运行至关重要,因为它提供了服务器如何处理请求、初始化Servlet、过滤请求以及处理...

    java web项目 web.xml配置详解

    本文将深入解析`web.xml`配置,帮助开发者理解其背后的原理和用途。 一、web.xml文件概述 `web.xml`被称为部署描述符(Deployment Descriptor),它位于Java Web项目的`WEB-INF`目录下。这个文件告诉应用服务器如何...

    Web项目没有web.xml配置文件

    在现代的Web开发中,"Web项目没有web.xml配置文件"是一个常见的现象,尤其是在使用Spring Boot、Spring MVC等框架时。传统的Java Web应用通常依赖于`web.xml`文件来配置Servlet、过滤器、监听器等核心组件,但在最新...

    Web.xml配置文件.pdf

    `Web.xml`文件是Servlet容器(如Tomcat、Jetty)解析的配置文件,它为Web应用程序提供了元数据,包括Servlet、过滤器、监听器、会话配置、错误页面等。该文件位于`WEB-INF`目录下,是Java Web应用的标准配置部分。 ...

    web.xml+详细解析四合一

    DOCTYPE声明类似于框架结构,它告诉解析器关于web.xml文档结构的规则,确保web.xml文档格式的正确性。例如: ```xml &lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "***"&gt;...

    web.xml配置详细介绍(CHM)

    这个CHM文件深入解析了`web.xml`的各种配置元素,帮助开发者更好地理解和控制Web应用程序的运行方式。 1. **web.xml的作用** `web.xml`是Servlet容器(如Tomcat、Jetty等)启动时读取的配置文件,用于指导服务器...

    Web.xml配置详解

    首先,`web.xml`文件的结构遵循XML规范,文件以XML头开始,声明XML版本和字符编码,紧接着是DOCTYPE声明,用于指定servlet规范的版本和DTD,确保解析器能正确解析文件内容。`web-app`是整个文件的根元素,需要注意的...

    web.xml 2.4详细说明

    《深入解析Web.xml 2.4配置详解》 在Java Web开发中,`web.xml`文件是核心配置文件之一,它定义了应用程序的行为和结构,是Servlet容器(如Tomcat)运行Web应用程序的基础。本文将深入探讨`web.xml 2.4`版本中的...

Global site tag (gtag.js) - Google Analytics