1.解决全站字符乱码(POST和GET中文编码问题)
➢POST请求:
requestsetCharacterEncoding("utf-8")
➢GET请求:
String name = new String(reguest.getParameter("xx").getBytes("is0-8859-1"),“utf-8"); doFilter(name,value);
响应的乱码问题:
response.setContextType('text/htm;charset-=utf-8").
基本上在每个Servlet中都要处理乱码问题,所以应该把这个工作放到过滤器中来完成。
2.编写一个页面
示例:
结果:由于未做任何请求编码处理,测试结果为POST和GET均乱码;
3.添加一个EncodingFilterd过滤器(EncodingFilter.java )
(1) 处理post请求编码问题:
request.setCharacterEncoding ( "utf-8") ;
(2) 处理get请求编码问题:
string usexname= request.getParameter ("usexname" ); username=new string (username.getBytes("ISO-8859-1"),"UTF-8");
调包request;
写一个request的装饰类;
在放行时,使用自己的request;
HttpServletRequest req = (HttpServletRequest)request; if(req.getMethod().equals("GET")){ EncodingRequest er = new EncodingRequest(req); chain.doFilter(er,response); }else if(req.getMethod().equals("POST”)){ chain.doFilter(request,response) ; }
注释:写一个自己的request的装饰类,实现相同的接口,删除余下码,将这个接口的所有方法用我们的request传递给构造器,只需要覆盖需要的方法。
- 处理编码问题(EncodingRequest.java),需要继承HttpServLetWrapper,通过装饰者模式对getParameter(String name)方法进行加强,这样在获取属性值的时候就会调用重写后的方法,转化成utf-8的格式
public String getParameter(String name){ String value =null; try{ value = new string (value.getBytes ( "iso-8859-1"),"utf-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException (e) ; ) return value; ) }
总结:只需要将EncodingFilter.java和EncodingRequest.java配在web.前面,之后Servlet中就可以解决任何编码问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)