速解HTTP协议之Request对象
![request](https://i-blog.csdnimg.cn/blog_migrate/ed92ae4c72969d2ba452e1a1b1671a1c.png#pic_center)
request对象
1.request和response对象是由服务器创建的。我们来使用他们
2.request对象是来获取请求消息,response对象是来设置响应消息。
Request对象继承体系结构
ServletRequest --接口
继承
HttpServletRequest --接口
实现
Org.apache.catalina.connector.RequestFacade 类(tomcat)
request功能
1.获取请求消息
1.1获取请求行数据
* GET /day/demo1?name=zhanshan HTTP/1.1
* 方法:
1.获取请求方式:GET
String getMethod()
2.(*)获取虚拟目录: /day
String getContextPath()
3.获取Servlet路径:/demo1
String getServletPath()
4.获取get方式的请求参数: name=zhanshan
String getQueryString()
5.(*)获取请求的URI:/day/demo1
String getRequestURI() :/day/demo1
StringBuffer getRequestURL() : http://localhost:8080/day/demo1
URL:统一资源定位符
URL小于URI
URI:统一资源标识符
6.获取协议及版本:HTTP/1.1
String getProtocol()
7.获取客户机的IP地址
String getRemoteAddr()
1.2获取请求头数据
方法:
String getHeader(String name):通过请求头的名称获取请求头的值
Enumeration<String> getHeaderNames(): 获取所有的请求头名称
3.获取请求体数据
请求体:只有POST请求方式,才有请求体,在请求体中封装了请求的请求参数
步骤:
1.获取流对象
1.BUfferedReader getHeader() :获取字符输入流,只能操作字符数据。
2.ServletInputStream() :获取字节流,可以操作所有类型的数据
2.再从流对象中拿数据
2.其他功能
2.1获取请求参数 的通用方式
GET和POST请求方式都可以使用以下方法:
this.DoPost(request,response)
1.String getParamterer(String name)
//根据参数名称获取参数值 username=1&password=2
2.String[] getParamtererValues(String name)
//根据参数名称获取参数值与数组 hobby=1& hobby=2
3.getParameterNames()
//获取所有请求的参数名称
4.Map<String,String[]> getParameterMap()
//获取所有集合的Map集合
乱码问题:
设置流的字符集:
在获取参数前,设置request.setcharacterEncoding("utf-8");
3.请求转发
一种在服务器内部的资源跳转方式
3.1步骤:
1.通过request对象获取请求转发器对象
RequestDispatcher getRequestDispatcher(String path)
2.使用 RequestDispatcher对象进行转发
forward(ServletRequest request,ServletResponse response)
//方式1
RequestDispatcher rd = request.getRequestDispatcher("/Demo3");
rd.forward(request,response);
//方式2
request.getRequestDispatcher("/Demo3").forward(request,response);
3.2特点
1.浏览器地址栏路径不发生变化
2. 只能转发到当前服务器内部资源中
3. 转发是一次请求
4.共享数据
4.1域对象
一个作用范围的对象,可以在范围内共享数据。
request域:
代表一次请求,一般用于请求转发的多个资源中共享数据
方法:
1.setAttrbute(String name,Oject obj):存储数据
2.Object getAttrbute(String name) :通过键获取数据
3.void removeAttrbute(String name ):通过键移除键值对