filter过滤器是配置在web.xml中,下面是代码:
<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>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>这只是最基本的filter字符编码过滤,网络上还有加强版本的过滤器,那是编写好了的文件,直接用就可以了。
由于文件无法上传,这里直接将源代码发出来,有两个文件。
第一个文件名:MVC_filter.java,代码如下:
package mvc_filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import mvc_filter.MyRequest;
@WebFilter("/MVC_filter")
public class MVC_filter implements Filter {
public MVC_filter() {
}
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
MyRequest myRequest = new MyRequest(request);
chain.doFilter(myRequest, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
第二个文件名:MyRequest.java,源代码如下:package mvc_filter;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class MyRequest extends HttpServletRequestWrapper {
private HttpServletRequest request = null;
private boolean flag = false;
public MyRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public Map<String, String[]> getParameterMap() {
String method = this.request.getMethod();
if ("post".equalsIgnoreCase(method)) {
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Map<String, String[]> map = this.request.getParameterMap();
return map;
} else if ("get".equalsIgnoreCase(method)) {
Map<String, String[]> map = this.request.getParameterMap();
if (flag) {
return map;
}
if (map == null) {
return super.getParameterMap();
} else {
Set<String> key = map.keySet();
for (String string : key) {
String[] value = map.get(string);
for (int i = 0; i < value.length; i++) {
try {
String string2 = new String(
value[i].getBytes("iso-8859-1"), "utf-8");
value[i] = string2;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
flag = true;
return map;
}
} else {
return super.getParameterMap();
}
}
@Override
public String[] getParameterValues(String name) {
Map<String, String[]> map = this.getParameterMap();
if (map == null) {
return super.getParameterValues(name);
} else {
String[] strings = map.get(name);
return strings;
}
}
@Override
public String getParameter(String name) {
String[] values = this.getParameterValues(name);
if (values == null) {
return super.getParameter(name);
} else {
return values[0];
}
}
}
这两个文件放入工程中以后,在web.xml中配置以下代码就可以了。
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3937

被折叠的 条评论
为什么被折叠?



