request

1.HttpServletRequest

我们在创建servlet时会覆盖service()方法,并且还会使用到doGet()和doPost()方法,在这些方法中都有一个代表请求的request和一个代表响应的response

service中的response类型是ServletRequest,doGet/doPost中的类型是HttpServletRequest

HttpServletRequest是ServletRequest的子接口,功能和方法更加强大,我们学习的就是HttpServletRequest

 

request的运行流程

tomcat内核解析请求资源 >>> 将请求资源封装到request >>> 创建servlet对象,并将request传入

 

2.request的作用

获得请求行,获得请求头,获得请求体(post/get)

 

2.1)获得请求行

获得客户端的请求方式:String getMethod();

获得web应用名称:String getContextPath();(划重点)

 

2.2)获得请求头

String getHeader(String name);请求头中都是键值对形式存在,通过指定name(即key)即可获得指定值(value)

 

2.3)获得请求体

a.请求体中有两种提交方式get/post

get方式的数据格式:直接嵌套在http访问地址后面(http://localhost:8080/WEB15_request/head?username=admin

post方式的数据格式:储存在请求体内部,以键值对形式(key:value)

 

b.获得数据的三种方式(划重点),三种方式都能获得get或post数据

String getParameter(String name);通过指定name(key)来获取指定单个表单值

		String username = request.getParameter("username");

String[] getParameterValues(String name);获得多个表单值,例如获取爱好

		String[] hobbys = request.getParameterValues("hobby");
		for(String hobby:hobbys){
			System.out.println(hobby);

Map<String , String[]> getParameterMap();获得所有参数,将参数封装到Map<String , String[]>(必须是String,String[])

Map<String, String[]> map = request.getParameterMap();
		for (Map.Entry<String, String[]> entry : map.entrySet()) {
			System.out.println(entry.getKey());
			for (String str : entry.getValue()) {
				System.out.println(str);
			}
			System.out.println("-------------------------");
		}

 

得到数据乱码问题

post方式数据乱码:request.setCharacterEncoding("UTF-8");

get方式数据乱码:String username = new String(username.getBytes("iso8859-1"),"UTF-8");先转iso8859-1编码 在转utf-8解码

 

3.request内部转发和request(划重点)

request内部转发

直接从一个servlet转到另一个servlet,地址栏不变,还能携带request域数据(重定向不能)

request.getRequestDispatcher("/login.jsp").forward(request, response);

 

 

request域

request对象也是一个存储数据的区域对象,数据的生命存在周期为一次请求,三个域的通用方法

setAttribute(String name, Object o);存入数据

getAttribute(String name);取出数据

removeAttribute(String name);删除数据

 

 

总结

request获得行的内容
	request.getMethod()
	request.getRequestURI()
	request.getRequestURL()
	request.getContextPath()
	request.getRemoteAddr()
request获得头的内容
	request.getHeader(name)
request获得体(请求参数)
	String request.getParameter(name)
	Map<String,String[]> request.getParameterMap();
	String[] request.getParameterValues(name);
	注意:客户端发送的参数 到服务器端都是字符串

	获得中文乱码的解决:
		post:request.setCharacterEncoding(“UTF-8”);
		get:parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);

request转发和域
	request.getRequestDispatcher(转发的地址).forward(req,resp);
	request.setAttribute(name,value)
	request.getAttribute(name)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值