1 post请求乱码
<form action="/WEB24/encodeServlet" method="post">
<input type="text" name="username">
<input type="submit" value="提交">
</form>
servlet中打印输入内容
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String str = request.getParameter("username");
System.out.println(str);
}
在输入框中输入中文后,打印结果
哈å
在doGet()方法中加入这一句
request.setCharacterEncoding("UTF-8");
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String str = request.getParameter("username");
System.out.println(str);
}
重新输入中文后,打印结果
哈哈
2 get请求乱码
<form action="/WEB24/encodeServlet" method="get">
<input type="text" name="username">
<input type="submit" value="提交">
</form>
doGet()方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String str = request.getParameter("username");
System.out.println(str);
}
输入中文后打印结果
哈å
在doGet()方法中加入String name = new String(str.getBytes("ISO8859-1"),"UTF-8");
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String str = request.getParameter("username");
String name = new String(str.getBytes("ISO8859-1"),"UTF-8");
System.out.println(name);
}
打印结果
哈哈
3 全局乱码处理
在每个servlet中处理乱码比较麻烦,所以使用过滤器处理
jsp中使用get请求
<form action="/WEB24/encodeServlet" method="get">
<input type="text" name="username">
<input type="submit" value="提交">
</form>
过滤器
public class EncodeFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
//当req调用getParameter()方法时,实际调用的是增强类对象的getParameter方法。
EnhanceRequest enhanceRequest = new EnhanceRequest(req);
chain.doFilter(enhanceRequest, response);
}
@Override
public void destroy() {
}
/**
* 装饰着模式
* 增强getparameter()方法
* @author YeLiang
*
*/
static class EnhanceRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
public EnhanceRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
String parameter = request.getParameter(name);
try {
parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return parameter;
}
}
}
web.xml中的配置
<filter>
<filter-name>EncodeFilter</filter-name>
<filter-class>com.yeliang.encode.EncodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
servlet中的doGet方法没有做操作
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String str = request.getParameter("username");
System.out.println(str);
}
打印结果
哈哈