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.编写一个页面

示例:

image.png

结果:由于未做任何请求编码处理,测试结果为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传递给构造器,只需要覆盖需要的方法。

  1. 处理编码问题(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中就可以解决任何编码问题。

关注我的公众号SpaceObj 领取idea系列激活码

posted on   张伯灵  阅读(21)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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)



点击右上角即可分享
微信分享提示