package com.demo.b_request;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 获取 GET方式 和 POST方式 提交的参数
*/
@SuppressWarnings("serial")
@WebServlet("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
* 中文乱码问题的解决:
* html页面使用 <meta charset="UTF-8"> 指定当前页面编码方式为 UTF-8,即浏览器使用 UTF-8 对该页面进行解析;
* 那么 form 表单提交数据的时候,数据也是使用 UTF-8 进行编码的。
*
* 由于浏览器与服务器通信底层是使用 socket 实现的,而 socket 只能传递字节数据,不能传递字符数据,所以 form 表单
* 提交的字符数据需要转换成字节数据,转换的时候指定编码格式为 UTF-8,即 byte[] buf = name.getBytes("utf-8"),
* 这就是编码过程。
*
* 数据传到 tomcat 服务器以后,服务器默认使用的编码方式为 iso-8859-1,也就是说服务器会使用 iso-8859-1 对数据进行
* 解析,即 name = new String(buf, "iso-8859-1"),所以解出来的是乱码。
*
* 如果服务器解析数据的时候,也使用 utf-8 的方式进行解码,即 name = new String(buf, "utf-8"),那么编码方式
* 和解码方式一致,就不会出现乱码了。
*
* 使用 req.setCharacterEncoding("utf-8"); 方法就是指定 tomcat 服务器使用 UTF-8 方式对数据进行解析的;
* setCharacterEncoding() 方法一定要写在 getParameter() 方法前面才有效。因为要先指定服务器的解码方式,
* 然后再获取数据。如果先获取数据之后,再指定解码方式,那就没意义了。
*
*
* 设置 参数查询的编码
* 该方法只能对请求实体内容的数据编码起作用。
* POST 提交的数据在实体内容中,所以该方法对 POST 有效;
* GET 方法的参数放在 URL 后面,所以对 GET 方法无效。
* (老师在讲的时候 GET 方式还是会乱码,但是我测试的时候 GET 方式不会出现乱码,目前还不知道为什么!!!!!)
*/
req.setCharacterEncoding("utf-8");
System.out.println(req.getMethod() + "方式:");
// 根据参数名获取参数值(只能获取一个值的参数)
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(username + "=" + password);
System.out.println("-----------------------");
// 获取所有参数
Enumeration<String> enums = req.getParameterNames(); // 获取所有参数名的集合
while (enums.hasMoreElements()){
String paramName = enums.nextElement(); // 获取参数名
/*
* 由于 getParameter() 只能获取一个值,所以多选框的值需要使用 getParameterValues() 方法来获取;
*/
if ("hobby".equals(paramName)){
System.out.print(paramName + "=");
String[] hobbys = req.getParameterValues("hobby"); // 根据参数名获取值的集合
for (String hobby : hobbys){
System.out.print(hobby + ",");
}
System.out.println();
}else{
String paramValue = req.getParameter(paramName); // 根据参数名获取参数值
System.out.println(paramName + "=" + paramValue);
}
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}