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);
}
*/
}
}
request初识接触getParameter等
最新推荐文章于 2024-06-22 08:00:00 发布