1乱码问题25
///get请求在请求行提交数据。
///post请求在请求体中提交数据。
//设置请求体的字符集。(显然,这种方法是处理POST请求的乱码问题。这种方法无法解决获得请求的乱码问题。)
///Tomcat10后,request请求体中的字符集默认为UTF-8,无需设置字符集,无乱码问题。
///Tomcat9前(包括9),如果前端请求体提交中文,后端获取后出现乱码,如何解决这个乱码?执行以下代码。
request.setCharacterEncoding("UTF-8");
1.1在Tomcat9之前(包括9),响应中文也有乱码。如何解决这个响应的乱码?25response.setContentType("text/html;charset=UTF-8");
///Tomcat10后,包括10,响应中文时不会出现乱码问题。上述代码不需要设置UTF-8。
//注意细节
///在Tomcat10包括10之后的版本中,中文将不再乱码。(这也反映了中文地位的提高。)
如何解决1.2get请求乱码问题?25///get请求发送时,数据在请求行上提交,而不是在请求体中提交。
//如何解决get请求的乱码?
//方案:修改CATALINA_HOME/conf/server.xml配置文件
//注:从Tomcat8开始,URIEncoding的默认值就是UTF-8,所以GET请求也没有乱码问题。
com中的代码.bjpowernode.javaweb.servletRequestTestServlet
package com.bjpowernode.javaweb.servlet;import jakarta.servlet.ServletException;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;///request对象的常用方法 24-25publiclic class RequestTestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); ///获取客户端的ip地址 String remoteAddr = request.getRemoteAddr(); System.out.println(客户端ip地址=”+remoteAddr);//客户端ip地址=127.0.0.1 } //设置请求体的字符集。(显然,这种方法是处理POST请求的乱码问题。(显然,这种方法是处理POST请求的乱码问题。 // 这种方法并不能解决get请求的乱码问题。)24-25 @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置请求体的字符集 //request.setCharacterEncoding("UTF-8"); //中文响应也有乱码。如何解决这个响应的乱码? 25 // response.setContentType("text/html;charset=UTF-8"); ///这是POST请求 String username = request.getParameter("username"); ////输出用户提交的用户名 System.out.println(username); }}
register.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>user register</title></head><body><h1>user register</h1><form action=/servlet09/testRequest" method="post"> username:<input type="text" name="username"><br> <br> <input type="submit" value="register"></form></body></html>
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="https://www.tulingxueyuan.cn/d/file/p/20230528/bhmgw0i3m3s" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- 这是Requestestservlet的配置--> <servlet> <servlet-name>requestTest</servlet-name> <servlet-class>com.bjpowernode.javaweb.servlet.RequestTestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>requestTest</servlet-name> <url-pattern>/testRequest</url-pattern> </servlet-mapping></web-app>
2.其他常用的Httpservletrequest接口方法:24-25
///获取客户端IP地址
StringremoteAddr=request.getRemoteAddr();
///获取应用程序的根路径
StringcontextPath=request.getContextPath();
//获取请求的方式
Stringmethod=request.getMethod();
////获取请求的URI
Stringuri=request.getRequestURI();///aaa/testRequest
//获得servetpath
StringservletPath=request.getServletPath();///testRequest
com中的代码.bjpowernode.javaweb.servletMethodTest
package com.bjpowernode.javaweb.servlet;import jakarta.servlet.ServletException;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;public class MethodTest extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); ///获取客户端的ip地址 String remoteAddr = request.getRemoteAddr(); System.out.println(客户端ip地址=”+remoteAddr);//客户端ip地址=127.0.0.1 // 获取应用程序的根路径,这种方法用得更多,因为它能动态地获得应用程序的根路径 String contextPath = request.getContextPath(); System.out.println(”应用的根路径:"+contextPath);// 应用的根路径:/servlet09 // 获取请求的方式 String method = request.getMethod(); System.out.println(“请求方式”+method);///请求方式GET // 获取要求的URI String requestURI = request.getRequestURI(); System.out.println(“请求URI=”+requestURI);//请求URI=/servlet09/test // 获取servlet path String servletPath = request.getServletPath(); System.out.println(”获得servletet path="+servletPath);//获得servletet path=/test }}
web.xml
<!-- 这是Methodtest的配置--> <servlet> <servlet-name>methodTest</servlet-name> <servlet-class>com.bjpowernode.javaweb.servlet.MethodTest</servlet-class> </servlet> <servlet-mapping> <servlet-name>methodTest</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>