Java解决乱码方案

来源:互联网 发布:华联期货软件 编辑:程序博客网 时间:2024/05/22 16:06

在做项目过程中,如果web页存储的是中文,如果不对编码进行处理,存入数据库就会是乱码。因此可以利用Filter对所有从前端过来的页面编辑进行处理。

1.在代码中添加Filter类。

public class GenericEncodingFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// 转型为与协议相关对象HttpServletRequest httpServletRequest = (HttpServletRequest) request;// 对request包装增强HttpServletRequest myrequest = new MyRequest(httpServletRequest);chain.doFilter(myrequest, response);}public void init(FilterConfig filterConfig) throws ServletException {}}// 自定义request对象class MyRequest extends HttpServletRequestWrapper {private HttpServletRequest request;private boolean hasEncode;public MyRequest(HttpServletRequest request) {super(request);// super必须写this.request = request;}// 对需要增强方法 进行覆盖@Overridepublic Map getParameterMap() {// 先获得请求方式String method = request.getMethod();if (method.equalsIgnoreCase("post")) {// post请求try {// 处理post乱码request.setCharacterEncoding("utf-8");return request.getParameterMap();} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else if (method.equalsIgnoreCase("get")) {// get请求Map<String, String[]> parameterMap = request.getParameterMap();if (!hasEncode) { // 确保get手动编码逻辑只运行一次for (String parameterName : parameterMap.keySet()) {String[] values = parameterMap.get(parameterName);if (values != null) {for (int i = 0; i < values.length; i++) {try {// 处理get乱码values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}}hasEncode = true;}return parameterMap;}return super.getParameterMap();}@Overridepublic String getParameter(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);if (values == null) {return null;}return values[0]; // 取回参数的第一个值}@Overridepublic String[] getParameterValues(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);return values;}}

2.在web.xml中对Filter进行配置

<filter><filter-name>encodeFilter</filter-name><filter-class>com.xgq.filter.GenericEncodingFilter</filter-class></filter><filter-mapping><filter-name>encodeFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

3.注意,xml中不要配错,否则会报服务器错误