一、简介
HttpServletRequest 提供了 getParameter 方法,可以非常方便获取请求行/请求体中key/value形式的数据(x-www-form-urlencoded、multipart/form-data,其都是key/value形式,只是对数据编码方式有差别),对于application/json 之类的数据只能使用流的方式读取。
二、创建web 项目工程
1.TestServlet.java
package servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class TestServlet*/
@WebServlet("/test")
public class TestServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");System.out.println("name:" + name);response.getWriter().append("Served at: ").append(request.getContextPath());}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//request.setCharacterEncoding 只能解决post 乱码问题request.setCharacterEncoding("utf-8");doGet(request, response);}}
2.test.jsp 请求核心
fetch('http://localhost:8080/web-test/test?',{method:'post',body:'name=vincent',headers:{'Content-Type':'application/json',}}).then(resp=>{return resp.text();}).then(resp=>{console.log(resp);});
3.效果如下:

4.test.jsp headers Content-Type 修改为:application/x-www-form-urlencoded:

三、总结
HttpServletRequest getParameter 获取参数有如下条件:
1.request.getParameter() 方法获取的参数是形如key/value 形式的数据(x-www-form-urlencoded、multipart/form-data、及请求行中的key1=value1&key2=value2),与数据所在位置(请求体)和请求方法(GET、POST)无关。
2.request.setCharacterEncoding 只能解决post 乱码问题,对于get 方式只能获取到参数值再使用String 相关的转码方式(ISO-8859-1解码)

















