其实我们开发的时候
非常容易就会遇到乱码问题
我们先来一段简单代码
看一看
比如这样
<html>
<head>
<title>登录</title>
</head>
<body>
<<a href="/login?username=张三">点击这里get</a>
<form action="/login" method="post">
<input type="text" name="username" value="张三">
<input type="submit" value="点击这里post">
</form>
</body>
</html>
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
resp.getWriter().println(username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
resp.getWriter().println(username);
}
}
很简单,就是一个登录然后把用户名直接打印出来
我们发现不管是get还是post
全都是乱码
那么怎么解决呢
我们来创建一个Filter
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
HttpServletRequest req = (HttpServletRequest) servletRequest;
if (req.getMethod().equals("GET")) {
//处理get请求编码问题
EncodingRequest request = new EncodingRequest(req);
filterChain.doFilter(request, servletResponse);
} else {
//处理post请求编码问题
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
}
}
然后创建request
public class EncodingRequest extends HttpServletRequestWrapper {
private HttpServletRequest req;
public EncodingRequest(HttpServletRequest request) {
super(request);
this.req = request;
}
@Override
public String getParameter(String name) {
String value = req.getParameter(name);
try {
value = new String(value.getBytes("iso-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return value;
}
}
然后是servlet
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
String username = req.getParameter("username");
resp.getWriter().println(username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
String username = req.getParameter("username");
resp.getWriter().println(username);
}
}
现在我们的编码问题就解决了