Request和response对象原理:
1.Tomcat创建Servlet对象,调用init方法
2.Tomcat创建request,和response对象并且传递给service方法,作为参数 ,然后执行service方法
3. 使用request对象获取请求数据,然后我们将响应内容数据设置在response对象中 Tomcat从response对象中获取数据,处理完,响应给浏览器
request对象和response对象的作用
request是用来获取请求消息的,response对象是用来设置响应消息的
2. request对象的继承体系
ServletRequest—接口
HttpServletRequest—接口
org.apache.catalina.connector.RequestFacade 类(tomcat)实现类
3. request的功能
- 获取请求行数据
a.获取请求方式
String getMethod()
b.获取虚拟目录
String getContextPath()
c.获取Servlet的路径
String getServlet Path()
d.获取get方式的请求参数
String getQueryString()
e.获取URI
String getRequestURI()虚拟目录加servlet的资源路径
f.获取URL
String getRequestURL() 整个的请求地址
g.获取协议版本
String getProtocol()
h.获取客户机的IP地址
String getRemoteAddr()
- 获取请求头数据
a.
String getHeader(String name)通过请求头的名称来获取请求头的值
b.
Enumeration<String> getHeaderNames():自动获取所有请求头的名称
- 获取请求体数据
只有POST方式才有请求体,在请求体中封装了post请求体的参数
a. 获取流对象
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputSteam:获取字节输入流对象,可以操作所有的数据类型
b. 再从流对象中拿数据
- 中文乱码问题
Get方式:tomcat8已经将get方式乱码问题解决了
Post方式会乱码:
在获取参数之前,设置request的编码格式为request.setCharacterEncoding(“utf-8”)
- 请求转发:
一种在服务器内部的资源跳转方式
a.
通过request对象获取请求转发器对象
Request.RequestDispatcher(String path)
b.
使用转发器对象调用转发
转发器对象.forward(ServletReaquest request,ServletResponse response)
c. 请求转发的特点
浏览器地址栏路径不发生变化
只能转发到当前服务器内部资源中
转发是一次请求
- 共享数据
域对象:
一个有作用范围的对象,可以在范围内共享数据
Request域对象:
代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:
1. void setAttribute(String name,Object obj)存储数据
2. Object getAttribute(String name)通过键来获取
3. Void removeAttribute(String name)通过键来移除键值对