## 1,request对象和response对象的原理
- request和response对象是由服务器创建的。我们(程序员)来使用它。
- request对象是用来获取请求信息,response是用来设置响应消息。
2,request对象的体系结构:
org.apache.catalina.connector.RequestFacade类(tomcat)实现
HttpeServletRequest —接口
继承
ServletRequest --接口
3,request功能
- 获取请求消息数据
1,获取请求行数据
eg:GET /dome/go?name=小白 HTTP/1.1
方法:
获取请求方式:String getMethod() //GET
获取虚拟目录:String getContextPath() //dome
获取servlet路径:String getServletPath() //go
获取get方式请求参数:String getQueryString() //name=小白
获取URI(统一资源标识符):String getRequestURI() // /dome/go
获取URL(统一资源定位符):String getRequestURL()// http://localhost/dome/go
获取协议版本:String getProtocol()// HTTP/1.1
获取客服端的ip地址:String getRemoteAddr()
2,获取亲求头数据
方法:
String getHeader(String name):通过请求头的名称获取请求头的值。
Enumeration getHeaderNames():获取所有的请求头名称
3,获取请求体数据
请求体,只有post请求方式才有请求体,在请求体中封装了post请求的参数
这些数据以流的方式保存。
获取步骤:
获取流对象:
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
再从流对象中拿数据。 - 其他功能:
1,获取请求参数的通用方式
String getParameter(String name):根据参数名称获取参数值
String[] getParameterValues(String name):根据参数名称获取参数值的数组
Enumeration getParameterNames():获取所有请求参数名称
Map<String,String[]> getParameterMap():获取所有参数的map集合
注意:中文乱码问题:
get方式:tomcat_8已经将get请求方式的乱码问题解决了。
post方式:中文会乱码。解决:在获取参数钱 ,设置request的编码request.setCharacterEncoding(“utf-8”);
2,请求转发:一种在服务器内部的跳转方式
步骤:
通过request获取请求转发对象:RequestDispatcher getRequestDispatcher(String path)
使用RequestDispatcher对象进行转发:forward(ServletRequest request,ServletResponse reponse)
特点:
浏览器地址路径不发生变化。
只能转发到当前服务器内部资源。
转发是一次请求。
3,共享数据
*域对象:一个有作用范围的对象,可以在范围内共享数据。
*request域:代表一次请求的的范围,一般用于请求转发的的多个资源中共享数据。
*方法:
存储数据:setA’t’t’ribu’te(String key,Object obj);
通过键获取数据:getAttribute(String key);
移除数据:removeAttribute(String key);
4,获取ServletContext:
ServletContext request.getServletContext();