Tomcat中,使用原生Servlet中的request和response对象处理请求和响应时的乱码问题

处理请求和响应时的乱码问题

request和response中处理乱码的方法

解决发起POST请求时请求体含有中文时,后端服务器接收数据时乱码问题: 通过request对象设置请求体的字符集request.setCharacterEncoding("UTF-8")

  • 对于Tomcat9及其之前版本,浏览器发起POST请求时服务器接收中文时会出现乱码问题
  • 对于Tomcat10及其之后版本, request请求体当中数据的字符集默认就是UTF-8,浏览器发起POST请求和GET请求都不会出现乱码问题

解决发起GET请求时请求行含有中文乱码问题: 需要修改CATALINA_HOME/conf/server.xml配置文件,在Connector标签写一个URIEncoding属性指定URI的字符集

  • 对于Tomcat9和8版本, 不写URIEncoding属性指定URI的字符集时,默认按照UTF-8字符集处理数据,所以发起GET请求时服务器接收中文不会出现乱码问题
  • Tomcat8之前的版本发起GET请求时请求行含有中文会出现乱码问题,需要在Connector标签写一个URIEncoding属性指定URI的字符集
xml 复制代码
<Connector URIEncoding="UTF-8" port="8080" />

解决响应体含有中文时,浏览器接收数据时乱码问题: 通过response对象设置响应体的字符集response.setContentType("text/html;charset=UTF-8")

  • 对于Tomcat9及其之前版本,当浏览器发起POST请求和GET请求时服务器响应的数据含有中文时,浏览器都会出现乱码问题
  • 对于Tomcat10及其之后版本, 当浏览器发起POST请求和GET请求时服务器响应的数据含有中文时,浏览器都不会出现乱码问题

request对象对象的常用方法

方法名 功能
String getRemoteAddr(); 获取客户端的IP地址
void setCharacterEncoding(String) 设置请求体的字符集 , 处理POST请求的乱码问题
String getContextPath() 获取应用的根路径(底层还是调用ServletContext对象的方法)
String getMethod() 获取请求方式
String getRequestURI() 获取请求的URI (带项目名)
String getServletPath() 获取Servlet 的路径 (项目名后面的路径)
java 复制代码
public class TestServlet extends HttpServlet{
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{
        // 获取客户端的IP地址
        String remoteAddr = request.getRemoteAddr();
        // 处理POST请求的乱码问题: 设置请求体的字符集
        request.setCharacterEncoding("UTF-8");
        // 解决Tomcat9及其之前版本响应乱码问题
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
		out.print("你好Servlet");
        // 获取应用的根路径
        String contextPath = request.getContextPath();
        // 获取请求方式
        String method = request.getMethod();
        // 获取请求的URI,/aaa/testRequest(aaa是项目名)
        String uri = request.getRequestURI();  
        // 获取Servlet路径,/testRequest(不带项目名)
        String servletPath = request.getServletPath(); 
	}
}
java 复制代码
public class TestServlet extends HttpServlet{
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{
        // 获取客户端的IP地址
        String remoteAddr = request.getRemoteAddr();
        // 处理POST请求的乱码问题: 设置请求体的字符集
        request.setCharacterEncoding("UTF-8");
        // 解决Tomcat9及其之前版本响应乱码问题
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
		out.print("你好Servlet");
        // 获取应用的根路径
        String contextPath = request.getContextPath();
        // 获取请求方式
        String method = request.getMethod();
        // 获取请求的URI,/aaa/testRequest(aaa是项目名)
        String uri = request.getRequestURI();  
        // 获取Servlet路径,/testRequest(不带项目名)
        String servletPath = request.getServletPath(); 
	}
}
相关推荐
D_alyoo23 分钟前
06 Activiti 与 Spring Boot 整合
java·activiti·activiti7源码
小陈不好吃28 分钟前
Spring Boot配置文件加载顺序详解(含Nacos配置中心机制)
java·开发语言·后端·spring
ゞ 正在缓冲99%…35 分钟前
leetcode1770.执行乘法运算的最大分数
java·数据结构·算法·动态规划
渡我白衣41 分钟前
链接的迷雾:odr、弱符号与静态库的三国杀
android·java·开发语言·c++·人工智能·深度学习·神经网络
007php0071 小时前
大厂深度面试相关文章:深入探讨底层原理与高性能优化
java·开发语言·git·python·面试·职场和发展·性能优化
qq_334466861 小时前
excel VBA应用
java·服务器·excel
E_ICEBLUE1 小时前
快速合并 Excel 工作表和文件:Java 实现
java·microsoft·excel
qq_214803291 小时前
ArcGIS Runtime与GeoTools融合实践:加密SHP文件的完整读写方案
java·安全·arcgis
Juchecar2 小时前
Spring是Java语境下的“最优解”的原因与启示
java·spring·node.js
邪恶喵喵2 小时前
Tomcat和负载均衡
java·tomcat·负载均衡