关闭

Java web项目中web.xml的配置

319人阅读 评论(0) 收藏 举报

(转载)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那么过滤器什么也不会做。



0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:221784次
    • 积分:3919
    • 等级:
    • 排名:第8033名
    • 原创:119篇
    • 转载:371篇
    • 译文:0篇
    • 评论:12条