乱码详情
总结:讨论了使用GET和POST方法,控制台和JSP页面显示的问题。
最终发现:在servlet或者过滤器中添加: request.setCharacterEncoding("utf-8");
res.setContentType("text/html;charset=utf-8");
即可解决页面显示乱码问题。
JSP页面中
<%@ page language="java" pageEncoding="UTF-8"%>Insert title here
过滤器页面:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; //放行!!!—————————————————————— chain.doFilter(newRequest, res); }
编写的servlet的get方法中:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String str=request.getParameter("text"); if(str!=null)System.out.println(str); response.getWriter().write(str); }
我们在过滤器中注释掉
//req.setCharacterEncoding("utf-8");
// res.setContentType("text/html;charset=utf-8"); | 控制台显示 | JSP页面显示 |
GET | 你好啊 | ??? |
POST | ä½ å¥½å | :浣犲ソ鍟� |
在filte过滤器加上: request.setCharacterEncoding("utf-8");
res.setContentType("text/html;charset=utf-8");
| 控制台显示 | JSP页面显示 |
GET | 你好啊 | 你好啊 |
POST | 你好啊 | 你好啊 |
这里JSP页面出现乱码是因为:在getParameter()方法中,得到的字符串是乱码的。
在Filter中:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; //放行!!!——————————————————————// EnhanceRequest newRequest=new EnhanceRequest(req); // req.setCharacterEncoding("utf-8"); // res.setContentType("text/html;charset=utf-8"); System.out.println("filtering"); chain.doFilter(newRequest, res); }
使用装饰者模式,增强getParameter().
小插曲: 装饰者模式:
增强类与被增强类实现统一接口。
增强类中传入被增强的类
需要增强的方法重写。
之后在Filter中增强req:
class EnhanceRequest extends HttpServletRequestWrapper { private HttpServletRequest request; public EnhanceRequest(HttpServletRequest req) { super(req); this.request=req; } //对getParameter增强 @Override public String getParameter(String name) { String parameter =request.getParameter(name);//乱码 try { parameter=new String(parameter.getBytes("iso8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return parameter; } }
| 控制台显示 | JSP页面显示 |
GET | ??? | ??? |
POST | 你好啊 | ??? |
同时发现:当JSP页面中去除掉这条代码 contentType="text/html; charset=UTF-8",将造成JSP页面显示数据为乱码。
结论:要解决JSP页面和控制台的乱码问题,只要 在filter过滤器加上:request.setCharacterEncoding("utf-8");
res.setContentType("text/html;charset=utf-8");
或者就在servlet页面上添加: request.setCharacterEncoding("utf-8");
res.setContentType("text/html;charset=utf-8");
便可解决POST和GET方法的乱码问题。