注意,这里是针对Tomcat容器中get方式提交的servlet中获得参数,参数中有中文的时候乱码的问题:

之前我已经讲过,Tomcat8.0及以上URIEncoding都是utf-8的默认编码,不会出现get方式乱码的问题;

只有Tomcat7.0及以下的版本,默认的URIEncoding才是ISO-8859-1才会出现中文乱码,当然我们也可以在Tomcat的conf中的server.xml中修改默认的URLEncoding来解决此问题(但是我们这里测试是要求不能修改Tomcat容器中的默认编码的时候哦),前面关于Tomcat的编码已经有了详细讲解,链接如下,这里就不再赘述了。

在实现装饰者对getParameter进行加强的时候,我们发现:

HttpServletRequest只是一个接口,我们继承重写不能使用接口;所以我们查阅API发现

其中有一个实现子类HttpServletRequestWrapper,所以后面我们继承自HttpServletRequestWrapper进行重写getParameter!

jsp中的代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>测试get方式中文乱码</title></head><body><form action="${pageContext.servletContext.contextPath }/servlet/TestEncodingServlet">name:<input type="text" name="name" /><input type="submit" value="提交" /></form></body>
</html>

servlet中的代码:

package day03;import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TestEncodingServlet extends HttpServlet {private static final long serialVersionUID = 3996799889172019227L;public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");String name = request.getParameter("name");System.out.println(name);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");}}

xml中的配置:

filter中的代码:

package day03;import java.io.IOException;
import java.io.UnsupportedEncodingException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/*** 解决get方式中文参数乱码问题* @author mzy**/
public class EncodingFilter implements Filter {@Overridepublic void init(FilterConfig arg0) throws ServletException {}@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest tmpRequest = (HttpServletRequest)request;/** 如果是POST方式提交*/request.setCharacterEncoding("utf-8");// 装饰者类使用,针对get方式中的中文参数MyHttpRequest myRequest = new MyHttpRequest(tmpRequest);/** 放行:注意是放行我们装饰之后的request*/chain.doFilter(myRequest, response);}
}/*** 装饰者类*         1.继承自HttpServletRequestWrapper非final的* @author mzy */
class MyHttpRequest extends HttpServletRequestWrapper {// 2.声明一个被装饰者类型的成员变量private HttpServletRequest request;// 3.接收被装饰者类对象public MyHttpRequest(HttpServletRequest request) {super(request);this.request = request;}/** 4.加强方法:重写getParameter方法*/@Overridepublic String getParameter(String name) {try {// 得到原来的参数String value = request.getParameter(name);// 判断是否是get方式提交的if ("GET".equals(request.getMethod())) {value = new String(value.getBytes("ISO-8859-1"), "utf-8");}return value;} catch (UnsupportedEncodingException e) {e.printStackTrace();throw new RuntimeException();}}
}

转载于:https://www.cnblogs.com/mzywucai/p/11053415.html

解决servlet中get方式中中文乱码问题(二):装饰者模式使用相关推荐

  1. 解决servlet resp.getWriter().println(“xxx“)中文乱码问题

    解决servlet resp.getWriter().println("xxx")中文乱码问题 只需三行代码 req.setCharacterEncoding("utf- ...

  2. Tomcat 中 GET方式 请求 中文乱码 出现的原因

    网上很多关于GET方式请求中文乱码的解决方案,大体类似. 这里主要讲一下Tomcat在处理URL参数过程中, 究竟是为什么会导致了GET方式请求的中文乱码. 一句话概括就是: Tomcat默认将单字节 ...

  3. Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法

    Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法 Eclipse 工具中的操作 流程图片生成的两种方式: 使用 activiti-designer 设计流程图 ...

  4. sublime text3 中 python3编译出现中文乱码解决方法

    sublime text3 中 python3编译出现中文乱码解决方法 参考文章: (1)sublime text3 中 python3编译出现中文乱码解决方法 (2)https://www.cnbl ...

  5. url中向后台传递中文乱码解决方法

    url中向后台传递中文乱码解决方法 参考文章: (1)url中向后台传递中文乱码解决方法 (2)https://www.cnblogs.com/shijiaoyun/p/3992446.html 备忘 ...

  6. js中html网页打开中文乱码

    js中html网页打开中文乱码 (1)一般为编码格式出问题. (2)源代码文件自身的编码格式和定义的不一样. 首先需要定义当前的文件编码格式为utf-8: <meta charset=" ...

  7. php excelreader 中文,如何解决php excel reader导出excel中文乱码?

    解决php excel reader导出excel中文乱码的方法:1.如果不使用dump函数,可以通过修改[_defaultEncoding]变量解决问题:2.如果使用dump函数导出excel,需要 ...

  8. bug:生产问题,Golang解决csv文件用excel打开中文乱码问题及常见编码和BOM头关系

    bug:Golang解决csv文件用excel打开中文乱码问题 1 场景及分析 场景:今天在生成csv文件之后,测试发现用office和wps打开乱码 分析:经过测试之后发现使用记事本打开不乱码,同时 ...

  9. ajax传输json数据格式乱码_解决Ajax加载JSon数据中文乱码问题

    一.问题描述 使用zTree的异步刷新父级菜单时,服务器返回中文乱码,但项目中使用了SpringMvc,已经对中文乱码处理,为什么还会出现呢? 此处为的异步请求的配置: Java代码 async: { ...

  10. python2中文输出代码_解决vscode python print 输出窗口中文乱码的问题

    解决vscode python print 输出窗口中文乱码的问题 发布时间:2020-09-17 23:53:25 来源:脚本之家 阅读:119 一.搭建 python 环境 在 VSC 中点击 F ...

最新文章

  1. 英雄多少钱steam_¥50元到手蓝宝石显卡?玩转GTAV轻松CSGO英雄联盟帧数144fps
  2. python知识:@classmethod和@staticmethod的异同
  3. 音视频(H264+G711)打包AVI文件
  4. 牛客练习赛50-记录
  5. JeecgBoot Minio版本6.0.13升级到8.0.3修改方法
  6. MUI 图标显示不出来 - 分析篇
  7. RPC入门总结(一)RPC定义和原理
  8. Git 分支相关操作
  9. 如何在数据源是空的时候,gridview显示表头(万能)
  10. Android中Bitmap缓存池
  11. matlab 遗传算法 等式约束,关于MATLAB遗传算法工具箱不等式约束
  12. Git下载安装及基本配置
  13. powerbi使用说明_Power BI入门教程
  14. UltraEdit中Matlab语法高亮显示的操作方法
  15. python股票预测_python用线性回归预测股票价格的实现代码
  16. 年度盘点 | 2019品牌营销围绕的三个关键词
  17. 替换空格 ——《剑指offer》
  18. 手机端我的优惠券页面html代码
  19. 星际蜗牛矿难机,j1900 4核+4G内存+16Gssd硬盘,群晖6.1,SSD引导成功
  20. [XSY 3147]子集计数

热门文章

  1. java基础总结06-常用api类-api概述及jdk常用分类
  2. A non well formed numeric value encountered
  3. 三、Linux常用命令——权限管理命令
  4. Leader:这样的 Bug 你也写的出来???
  5. windows10 安装 rancher desktop及测试案例
  6. Spring Boot 2.x 集成 Quartz 定时器 jdbc 持久化、配置集群
  7. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_14-页面静态化-数据模型-远程请求接口...
  8. 今天突然出现了Property IsLocked is not available for Login '[sa]',我太阳,下面有绝招对付它!...
  9. Laravel5.x 封装的上传图片类
  10. 【概率论】5-9:多项式分布(The Multinomial Distributions)