web.xml 配置-filter

本文介绍了一种用于处理HTTP请求和响应编码的过滤器——编码过滤器。该过滤器通过配置文件初始化并设置字符编码,确保所有请求和响应使用统一的编码格式。


  • 定义
[html]  view plain  copy
  1. <pre class="html" name="code"><filter>  
  2. <filter-name>encodingfilter</filter-name>  
  3. <filter-class>com.my.app.EncodingFilter</filter-class>  
  4. <init-param>  
  5. <param-name>encoding</param-name>  
  6. <param-value>UTF-8</param-value>  
  7. </init-param>  
  8. </filter>  
  9. <filter-mapping>  
  10. <filter-name>encodingfilter</filter-name>  
  11. <url-pattern>/*</url-pattern>  
  12. </filter-mapping></pre><br>  
  13. <pre></pre>  
  14. <pre></pre>  
  • 作用

用于指定WEB容器的过滤器,在请求和响应对象在Servlet处理之前和之后,可以通过此过滤器对这两个对象进行处理。

  • 备注

filter-class 中指定的过滤器类须继承 javax.servlet.Filter 具有须有以下三种方法

init(FilterConfig filterConfig):初始化;一般情况下时读取配置文件中的init-param参数值 如 filterConfig.getInitParameter("encoding")

doFilter(...):用于对request,response进行处理,并能过chain.doFilter(...) 交过下一个控制器

destroy():资源销毁

  • 示例:如编码过滤器

web.xml配置

[html]  view plain  copy
  1. <filter>  
  2. <filter-name>encodingfilter</filter-name>  
  3. <filter-class>com.my.app.EncodingFilter</filter-class>  
  4. <init-param>  
  5. <param-name>encoding</param-name>  
  6. <param-value>UTF-8</param-value>  
  7. </init-param>  
  8. </filter>  
  9. <filter-mapping>  
  10. <filter-name>encodingfilter</filter-name>  
  11. <url-pattern>/*</url-pattern>  
  12. </filter-mapping>  


Java 代码

[java]  view plain  copy
  1. /** 
  2.  *  
  3.  */  
  4. package com.myapp;  
  5.   
  6. import java.io.IOException;  
  7.   
  8. import javax.servlet.Filter;  
  9. import javax.servlet.FilterChain;  
  10. import javax.servlet.FilterConfig;  
  11. import javax.servlet.ServletException;  
  12. import javax.servlet.ServletRequest;  
  13. import javax.servlet.ServletResponse;  
  14. import javax.servlet.http.HttpServletRequest;  
  15. import javax.servlet.http.HttpServletResponse;  
  16.   
  17. /** 
  18.  * @author louisliao 
  19.  * 
  20.  */  
  21. public class EncodingFilter implements Filter {  
  22.   
  23.     /** 
  24.      * 配置中默认的字符编码 
  25.      */  
  26.     protected String encoding = null;    
  27.     protected FilterConfig filterConfig;  
  28.     /** 
  29.      * 当没有指定默认编码时是否允许跳过过滤 
  30.      */  
  31.     protected boolean ignore = true;   
  32.     /** 
  33.      *  
  34.      */  
  35.     public EncodingFilter() {  
  36.         // TODO Auto-generated constructor stub  
  37.     }  
  38.   
  39.     /* (non-Javadoc) 
  40.      * @see javax.servlet.Filter#destroy() 
  41.      */  
  42.     public void destroy() {  
  43.         // TODO Auto-generated method stub  
  44.         this.encoding=null;  
  45.         this.filterConfig=null;  
  46.     }  
  47.       
  48.     /* (non-Javadoc) 
  49.      * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) 
  50.      */  
  51.     public void doFilter(ServletRequest request, ServletResponse response,  
  52.             FilterChain chain) throws IOException, ServletException {  
  53.         // TODO Auto-generated method stub  
  54.         HttpServletRequest hRequest=(HttpServletRequest)request;  
  55.         HttpServletResponse hResponse=(HttpServletResponse)response;  
  56.         //Conditionally select and set the character encoding to be used    
  57.         if(ignore || hRequest.getCharacterEncoding()==null){  
  58.             String coding=selectEncoding(hRequest);  
  59.             if(coding!=null){  
  60.                 hRequest.setCharacterEncoding(coding);  
  61.                 hResponse.setCharacterEncoding(coding);  
  62.             }  
  63.         }  
  64.         //将控制器传向下一个filter  
  65.         chain.doFilter(hRequest, hResponse);  
  66.   
  67.     }  
  68.   
  69.     /* (non-Javadoc) 
  70.      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 
  71.      */  
  72.     public void init(FilterConfig filterConfig) throws ServletException {  
  73.         // TODO Auto-generated method stub  
  74.         this.filterConfig=filterConfig;  
  75.         this.encoding=filterConfig.getInitParameter("encoding");  
  76.         System.out.println(this.encoding);  
  77.         String value = filterConfig.getInitParameter("ignore");  
  78.         if (value == null) {  
  79.             this.ignore = true;  
  80.         } else if (value.equalsIgnoreCase("true")) {  
  81.             this.ignore = true;  
  82.         } else if (value.equalsIgnoreCase("yes")) {  
  83.             this.ignore = true;  
  84.         } else {  
  85.             this.ignore = false;  
  86.         }  
  87.     }  
  88.     protected String selectEncoding(ServletRequest request) {  
  89.         return (this.encoding);  
  90.     }  
  91.   
  92. }  
  93. init方法是在WEB应用启动就会调用,doFilter则是在访问filter-mapping映射到的url时会调用。  
  • 定义
[html]  view plain  copy
  1. <pre class="html" name="code"><filter>  
  2. <filter-name>encodingfilter</filter-name>  
  3. <filter-class>com.my.app.EncodingFilter</filter-class>  
  4. <init-param>  
  5. <param-name>encoding</param-name>  
  6. <param-value>UTF-8</param-value>  
  7. </init-param>  
  8. </filter>  
  9. <filter-mapping>  
  10. <filter-name>encodingfilter</filter-name>  
  11. <url-pattern>/*</url-pattern>  
  12. </filter-mapping></pre><br>  
  13. <pre></pre>  
  14. <pre></pre>  
  • 作用

用于指定WEB容器的过滤器,在请求和响应对象在Servlet处理之前和之后,可以通过此过滤器对这两个对象进行处理。

  • 备注

filter-class 中指定的过滤器类须继承 javax.servlet.Filter 具有须有以下三种方法

init(FilterConfig filterConfig):初始化;一般情况下时读取配置文件中的init-param参数值 如 filterConfig.getInitParameter("encoding")

doFilter(...):用于对request,response进行处理,并能过chain.doFilter(...) 交过下一个控制器

destroy():资源销毁

  • 示例:如编码过滤器

web.xml配置

[html]  view plain  copy
  1. <filter>  
  2. <filter-name>encodingfilter</filter-name>  
  3. <filter-class>com.my.app.EncodingFilter</filter-class>  
  4. <init-param>  
  5. <param-name>encoding</param-name>  
  6. <param-value>UTF-8</param-value>  
  7. </init-param>  
  8. </filter>  
  9. <filter-mapping>  
  10. <filter-name>encodingfilter</filter-name>  
  11. <url-pattern>/*</url-pattern>  
  12. </filter-mapping>  


Java 代码

[java]  view plain  copy
  1. /** 
  2.  *  
  3.  */  
  4. package com.myapp;  
  5.   
  6. import java.io.IOException;  
  7.   
  8. import javax.servlet.Filter;  
  9. import javax.servlet.FilterChain;  
  10. import javax.servlet.FilterConfig;  
  11. import javax.servlet.ServletException;  
  12. import javax.servlet.ServletRequest;  
  13. import javax.servlet.ServletResponse;  
  14. import javax.servlet.http.HttpServletRequest;  
  15. import javax.servlet.http.HttpServletResponse;  
  16.   
  17. /** 
  18.  * @author louisliao 
  19.  * 
  20.  */  
  21. public class EncodingFilter implements Filter {  
  22.   
  23.     /** 
  24.      * 配置中默认的字符编码 
  25.      */  
  26.     protected String encoding = null;    
  27.     protected FilterConfig filterConfig;  
  28.     /** 
  29.      * 当没有指定默认编码时是否允许跳过过滤 
  30.      */  
  31.     protected boolean ignore = true;   
  32.     /** 
  33.      *  
  34.      */  
  35.     public EncodingFilter() {  
  36.         // TODO Auto-generated constructor stub  
  37.     }  
  38.   
  39.     /* (non-Javadoc) 
  40.      * @see javax.servlet.Filter#destroy() 
  41.      */  
  42.     public void destroy() {  
  43.         // TODO Auto-generated method stub  
  44.         this.encoding=null;  
  45.         this.filterConfig=null;  
  46.     }  
  47.       
  48.     /* (non-Javadoc) 
  49.      * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) 
  50.      */  
  51.     public void doFilter(ServletRequest request, ServletResponse response,  
  52.             FilterChain chain) throws IOException, ServletException {  
  53.         // TODO Auto-generated method stub  
  54.         HttpServletRequest hRequest=(HttpServletRequest)request;  
  55.         HttpServletResponse hResponse=(HttpServletResponse)response;  
  56.         //Conditionally select and set the character encoding to be used    
  57.         if(ignore || hRequest.getCharacterEncoding()==null){  
  58.             String coding=selectEncoding(hRequest);  
  59.             if(coding!=null){  
  60.                 hRequest.setCharacterEncoding(coding);  
  61.                 hResponse.setCharacterEncoding(coding);  
  62.             }  
  63.         }  
  64.         //将控制器传向下一个filter  
  65.         chain.doFilter(hRequest, hResponse);  
  66.   
  67.     }  
  68.   
  69.     /* (non-Javadoc) 
  70.      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 
  71.      */  
  72.     public void init(FilterConfig filterConfig) throws ServletException {  
  73.         // TODO Auto-generated method stub  
  74.         this.filterConfig=filterConfig;  
  75.         this.encoding=filterConfig.getInitParameter("encoding");  
  76.         System.out.println(this.encoding);  
  77.         String value = filterConfig.getInitParameter("ignore");  
  78.         if (value == null) {  
  79.             this.ignore = true;  
  80.         } else if (value.equalsIgnoreCase("true")) {  
  81.             this.ignore = true;  
  82.         } else if (value.equalsIgnoreCase("yes")) {  
  83.             this.ignore = true;  
  84.         } else {  
  85.             this.ignore = false;  
  86.         }  
  87.     }  
  88.     protected String selectEncoding(ServletRequest request) {  
  89.         return (this.encoding);  
  90.     }  
  91.   
  92. }  
  93. init方法是在WEB应用启动就会调用,doFilter则是在访问filter-mapping映射到的url时会调用。  
在 `web.xml` 中配置 JSP 属性是通过 `<jsp-config>` 标签来实现的,该配置允许定义 JSP 页面的行为和默认设置。以下是一个完整的配置示例,展示了如何在 `web.xml` 文件中配置 JSP 属性[^2]: ```xml <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspf</url-pattern> <page-encoding>UTF-8</page-encoding> <scripting-invalid>false</scripting-invalid> <include-prelude>/WEB-INF/jsp/base.jspf</include-prelude> <trim-directive-whitespaces>true</trim-directive-whitespaces> <default-content-type>text/html</default-content-type> </jsp-property-group> </jsp-config> ``` ### 配置说明: - **`<url-pattern>`**:指定 JSP 页面的 URL 匹配模式,例如 `*.jsp` 或 `*.jspf`。 - **`<page-encoding>`**:定义 JSP 页面的默认编码格式,例如 UTF-8。 - **`<scripting-invalid>`**:控制是否允许在 JSP 页面中使用脚本代码(如 Java 代码)。设置为 `true` 时,脚本将被禁用。 - **`<include-prelude>`**:指定在每个 JSP 页面加载之前自动包含的文件路径,例如 `/WEB-INF/jsp/base.jspf`。 - **`<trim-directive-whitespaces>`**:控制是否移除 JSP 页面中指令之间的空白字符。设置为 `true` 可以减少输出中的多余空格。 - **`<default-content-type>`**:定义 JSP 页面的默认内容类型,例如 `text/html`。 通过这些配置,可以有效地管理 JSP 页面的行为,确保一致性和安全性。 ### 注意事项: 1. **可选性**:`web.xml` 文件不是必须的,只有在需要配置初始化信息(如 JSP 属性、Servlet、Filter 等)时才需要使用 `web.xml` 文件[^3]。 2. **作用范围**:这些配置仅对 JSP 页面生效,并且对所有匹配 `<url-pattern>` 的页面生效。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值