request初识接触getParameter等

package day03;

import java.io.IOException;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 案例【获取请求的参数数据】
 * @author Administrator
 *
 *
 *	思考的问题:
 *		1)我们获取的参数数据还需要进一步的进行加工才能获取参数值。
 *		2)post和get方法获取参数的方式完全不一样,不通用。
 *
 * request还提供了一些公用的获取参数的方法,不管你是get还是post都可以使用的!
 		1.request.getParameter(name); 根据参数名称来获取餐数据值(根据input中的name属性)。
 		2.Enumeration<String> names = request.getParameterNames(); 返回值还是Enumeration,所有名称!迭代器
 			Enumeration<String> names = request.getParameterNames();
			while(names.hasMoreElements()) {
				String name = names.nextElement();
				String value = request.getParameter(name);
			}
		3.Map<String, String[]> parameterMap = request.getParameterMap();
		获取参数对象列表(map集合) key :   value
								 参数名称  参数值
			如何遍历map集合:	
				1) entrySet()
				2) keySet()
				3) values()
				
		4.request.getParameterValues(name); 获取多个参数值
		同一个参数名称可能对应着多个参数值:比如说兴趣爱好		
 */
public class RequestDemo05 extends HttpServlet {
	/*
	 * 补充:
	 * 		以后如果遇到传到get中的中文,在设置utf-8后依然解码错误;
	 *      可以通过new String(value.getBytes("iso-8859-1"), "utf-8");
	 *                         编码                                                        解码
	 */
	private static final long serialVersionUID = -1600280636681912378L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		/**
		 * 获取get提交的参数(URI后面的参数数据)
		 */
		/*
		String params = request.getQueryString();
		System.out.println(params);
		*/
		
		/*
		System.out.println("============");
		// 1.根据参数名称获取参数值(参数名称就是表单name属性值)
		System.out.println("1.根据参数名称获取参数值");
		String name = request.getParameter("name");
		System.out.println(name);
		
		System.out.println("============");
		// 2.遍历所有的参数
		System.out.println("2.遍历所有的参数");
		Enumeration<String> enums = request.getParameterNames();
		while(enums.hasMoreElements()) {
			String name_ = enums.nextElement();
			String value = request.getParameter(name_);
			System.out.println(value);
		}
		System.out.println("============");
		// 3.通过map集合键值对进行遍历
		System.out.println("3.通过map集合键值对进行遍历");
		Map<String, String[]> map = request.getParameterMap();
		
		// (1)通过entrySet来进行遍历
		Set<Entry<String, String[]>> entrySet = map.entrySet();
		for(Entry<String, String[]> entry : entrySet) {
			String key = entry.getKey();
			// 值就是数组的第一个元素 value[0]
			String[] value = entry.getValue();
			System.out.println(key+"="+value[0]);
		}
		
		// (2)通过keySet来进行遍历
		Set<String> keySet = map.keySet();
		for(String key : keySet) {
			String[] strings = map.get(key);
			System.out.println(key+"="+strings[0]);
		}
		
		// 4.values:获取所有值对象的collection集合(只能获取值对象,不能获取键对象)
		Collection<String[]> values = map.values();
		for (String[] strings : values) {
			System.out.println(strings[0]);
		}
		System.out.println("============");
		*/
		
		// request.getParameterValues("") 根据参数名称获取多个参数值
		/* 
		
			例如如下的兴趣爱好:可以是多选,返回的hobit的话,就必须是一个数组的形式去接收
			就必须要通过获取多个值的getParameterValues的方法来进行获取 	
			// 这种方法就行不通
			String hobit = request.getParameter("hobit");
			System.out.println("hobit = "+hobit);
			
		*/
		/*
		String[] hobits = request.getParameterValues("hobit");
		for (String string : hobits) {
			System.out.println("hobit = "+string);
		}
		*/
		/*
		 	或者通过得到对应的map获得map键值对映射来做:
		 	在这里request的map中,对应的键值对是一种特定的形式
		 	键key是头 
		 	值value是一个数组
		 	所以通过map来进行遍历的话,也不会漏掉多种情况的答案!
		 	
		 	map遍历的两种方法:
		 		1.通过map返回它的entrySet来进行遍历
		 		    在map中Map.Entry是Map下的一种特定的数据结构
		 		    是Map中键值对的记录;通过返回的Set<Entry>得到
		 		  Entry,再根据每一个Entry对应的getKey,getValue
		 		   来获得我们需要的结果。
		 		2.通过获得map的keySet得到所有key的Set集合
		 		    然后通过遍历key去map.get(key)来得到要的
		 		  结果。
		 
		 */
		System.out.println("3.通过map集合键值对进行遍历:");
		Map<String, String[]> map = request.getParameterMap();
		// (1)通过entrySet来进行遍历
		Set<Entry<String, String[]>> entrySet = map.entrySet();
		for(Entry<String, String[]> entry : entrySet) {
			String key = entry.getKey();
			// 值就是数组的第一个元素 value[0]
			String[] value = entry.getValue();
			for (String string : value) {
				System.out.println(key+"="+string);
			}
			
		}
		
		// (2)通过keySet来进行遍历
		/*
		Set<String> keySet = map.keySet();
		for(String key : keySet) {
			String[] strings = map.get(key);
			for (String string : strings) {
				System.out.println(key+"="+string);
			}
			
		}
		*/
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		// 因为response设置了contentType,所以不用再特别设置其中的encoding了
		// response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		/**
		 * 获取post提交的参数(实体内容中)
		 */
		
		/*
		 * 在我的testMethod_RequestDemo05.html中我们依然要接收参数;
		 * 但是我们如果将doGet中的代码重新写一次的话,代码就显得很多
		 * 所以我们可以直接在doPost中调用doGet方法。
		 */
		
		// 在doPost中调用doGet逻辑
		doGet(request, response);
		/*
		ServletInputStream in = request.getInputStream();
		byte[] buf = new byte[1024];
		int len = 0;
		while( (len = (in.read(buf))) != -1 ) {
			String str = new String(buf, 0, len);
			System.out.print(str);
		}
		*/
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值