Javaweb学习笔记之HttpServletRequest(三):获取 GET方式 和 POST方式 提交的参数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29331365/article/details/90174866
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);
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_29331365/article/details/90174866