处理请求和响应时的乱码问题
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();
}
}