Java web项目中web.xml的配置

(转载)http://blog.csdn.net/dreamrealised/article/details/9123201

在java的web项目中,我们都能发现一个web.xml文档,但是这个文档并不是必须的,web.xml的主要功能是用来初始化项目工程的配置信息,比如说welcome页面,filter,servlet等,当你的web工程中没用到这些当然也就不需要这个xml文件来配置你的apllication。
下面简单介绍web.xml的几个功能的配置和作用:

1.context-param
容器启动后创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.容器将转化为键值对,并交给ServletContext。
[html]  view plain  copy
  1.   <context-param>  
  2. <param-name>webAppRootKey</param-name>  
  3. <param-value>web.xkxt.root</param-value>  
  4.       </context-param>  
上面这个context-param的配置主要是区分tomcat的webapp下的不同项目,能够让log能将日志写到对应项目根目录下。
[html]  view plain  copy
  1.    <context-param>  
  2.     <param-name>log4jConfigLocation</param-name>  
  3.     <param-value>classpath:log4j.xml</param-value>  
  4. </context-param>  
  5. <listener>  
  6.     <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
  7. </listener>  
       上面的配置信息是建立log4j的键值对并且建立log4j的监听。
[html]  view plain  copy
  1.    <context-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>/WEB-INF/applicationContext*.xml</param-value>  
  4. </context-param>  
  5. <listener>  
  6.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  7. </listener>  
Java <wbr>web项目中web.xml的配置
       上面的配置是启动web的时候初始化spring的配置文档applicationContext.xml。 applicationContext.xml的配置详见 http://blog.sina.com.cn/s/blog_6cad92b701019thl.html
2.配置拦截器dispatcher
[html]  view plain  copy
  1.    <servlet>  
  2.     <servlet-name>dispatcher</servlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.       
  5.     <load-on-startup>1</load-on-startup>  
  6. </servlet>  
  7. <servlet-mapping>  
  8.     <servlet-name>dispatcher</servlet-name>  
  9.     <url-pattern>*.do</url-pattern>  
  10. </servlet-mapping>  
  11. <servlet-mapping>  
  12.     <servlet-name>dispatcher</servlet-name>  
  13.     <url-pattern>*.aj</url-pattern>  
  14. </servlet-mapping>  
Java <wbr>web项目中web.xml的配置
        以上配置是针对拦截器,可以看到拦截器文档的名字应该叫做dispatcher-servlet.xml,拦截的url请求是以do和aj为结尾。具体的dispatcher-servlet.xml的配置请参见:后续会详细介绍dispatcher-servlet.xml。
3.welcome-file-list
[html]  view plain  copy
  1.    <welcome-file-list>  
  2.     <welcome-file>main.do</welcome-file>  
  3. </welcome-file-list>  
        该标签是为了指定欢迎列表,可以配置多个welcome-file,显示时候按照顺序从第一个开始找起。对于tomcat来说,当你只指定一个web的根名,没有指定具体页面,去访问时一个web时,如果web.xml文件中配置了欢迎页,那么就返回指定的那个页面作为欢迎页,如果web.xml中没指定欢迎页的情况下,它默认先查找index.html文件,如果找到了,就把index.html作为欢迎页还回给浏览器。如果没找到index.html,tomcat就去找index.jsp。找到index.jsp就把它作为欢迎页面返回。而如果index.html和index.jsp都没找到,那此时tomcat就不知道该返回哪个文件,那么前端会报错。
4.过滤器
[html]  view plain  copy
  1.    <filter>  
  2.     <filter-name>encodingFilter</filter-name>  
  3.     <filter-class>nju.software.xkxt.web.filter.SetEncodeFilter</filter-class>  
  4.     <init-param>  
  5.         <param-name>encoding</param-name>  
  6.         <param-value>UTF-8</param-value>  
  7.     </init-param>  
  8.     <init-param>  
  9.         <param-name>forceEncoding</param-name>  
  10.         <param-value>true</param-value>  
  11.     </init-param>  
  12. </filter>  
  13. <filter-mapping>  
  14.     <filter-name>encodingFilter</filter-name>  
  15.     <url-pattern>*.do</url-pattern>  
  16. </filter-mapping>  
          该过滤器主要是解决前台JSP页面和JAVA代码中使用了不同的字符集进行编码的时候出现的表单提交的数据或者上传/下载中文名称文件出现乱码的问题。其中filter标签内部配置的是过滤器的名字和具体的类。而filter-mapping中配置的是过滤器对什么文件有效,此处在页面请求.do操作的时候会进行拦截,然后执行过滤器代码。其中SetEncodingFilter类的具体代码如下:
[java]  view plain  copy
  1. package nju.software.xkxt.web.filter;  
  2.   
  3. import java.io.IOException;  
  4. import javax.servlet.Filter;  
  5. import javax.servlet.FilterChain;  
  6. import javax.servlet.FilterConfig;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.ServletRequest;  
  9. import javax.servlet.ServletResponse;  
  10.   
  11. /** 
  12.  * @author typ 
  13.  *  
  14.  */  
  15. public class SetEncodeFilter implements Filter {  
  16.   
  17.     public void doFilter(ServletRequest request, ServletResponse response,  
  18.             FilterChain chain) throws IOException, ServletException {  
  19.         request.setCharacterEncoding("utf-8");  
  20.         chain.doFilter(request, response);  
  21.     }  
  22.   
  23.     public void destroy() {  
  24.         // TODO Auto-generated method stub  
  25.   
  26.     }  
  27.   
  28.     public void init(FilterConfig arg0) throws ServletException {  
  29.         // TODO Auto-generated method stub  
  30.   
  31.     }  
  32.   
  33. }  
该类需要继承Filter类,并实现Filter类中的三个抽象方法:doFilter,destroy,init。doFilter中的request.setCharacterEncoding("utf-8");语句的作用是设置用户界面提交的数据是以utf-8编码格式提交到服务器。

encoding用来指定一个具体的字符集  forceEncoding作用很单一,当request中已经被指定了一个字符集的时候是否再将用endcoding对应的字符集设置到request中去。举个例子来说明,假如 forceEncoding=false,当请求被提交之后,过滤器会判断request.getCharacterEncoding()是否为null,如果是null那么就会进行request.setCharacterEncoding("UTF-8")的操作,如果不是null那么过滤器什么也不会做。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值