web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.util.filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB18030</param-value>
</init-param>
<init-param>
<param-name>cityCode</param-name>
<param-value>091</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>/TestServlet</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>org.mvo.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
filter
package com.util.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.mvo.common.StringUtils;
import java.util.*; // For Date class
/**
* Simple filter that prints a report on the standard output each time an
* associated servlet or JSP page is accessed.
*/
// 定义一个成员变量用于在init()方法里得到配置文件里<init-param>中对应 <paramname>encoding</param-name> 的
// <param-value>GB18030</param-value>值;其中GB18030值可以更改比如gbk等;
public class CharsetEncodingFilter implements javax.servlet.Filter {
FilterConfig fc;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws ServletException, IOException {
// 1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
HttpServletRequest req = (HttpServletRequest) request;// 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest。
// request1.setCharacterEncodeing("");
// System.out.println("进来");
String provCode = fc.getInitParameter("cityCode");
boolean flg = false;
HttpSession session = req.getSession();
String cityCode = (String) session.getAttribute("CityCode");
cityCode = StringUtils.StrNullDeal(cityCode);
System.out.println(cityCode);
if (cityCode.equals(provCode)) {
if ("有手机号".equals("有手机号")) {
session.setAttribute("CityCode", "910");
flg = true;
}
}
chain.doFilter(request, response);
if (flg) {
session.setAttribute("CityCode", provCode);
}
System.out.println(session.getAttribute("CityCode").toString());
// System.out.println("出去");
// 2.调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
}
public void init(FilterConfig config) throws ServletException {
this.fc = config;
// String provCode = config.getInitParameter("cityCode");
// System.out.println(provCode);
// encoding =
// FilterConfig.getInitParameter("encoding");//FilterConfig对象具有一个getInitParameter方法,它能够访问部署描述符件
// //(web.xml)中分配的过滤器初始化参数
}
public void destroy() {
fc.getInitParameter("cityCode");
}
}