一、请求对象介绍.
请求:获取资源。在BS架构中,就是客户端浏览器向服务器端发出询问。
请求对象:就是在项目当中用于发送请求的对象。
二、请求对象Request常用方法-获取各种路径
返回值 | 方法名 | 说明 |
---|---|---|
String | getContextPath() | 获取虚拟目录名称 |
String | getServletPath() | 获取Servlet映射路径 |
String | getRemoteAddr() | 获取访问者ip地址 |
String | getQueryString() | 获取请求的消息数据 |
String | getRequestURL() | 获取统一资源标识符 |
StringBuffer | getRequestURL() | 获取统一资源定位符 |
三、请求对象Request常用方法-获取请求头信息
返回值 | 方法名 | 说明 |
---|---|---|
String | getHeader(String name) | 根据请求头名称获取一个值 |
Enumeration<String> | getHeaders(String name) | 根据请求头名称获取多个值 |
Enumeration<String> | getHeaderNames() | 获取请求头名称 |
四、请求对象Request常用方法-获取请求参数信息
返回值 | 方法名 | 说明 |
---|---|---|
String | getParameter(String name) | 根据名称获取数据 |
String[] | getParameterValues(String name) | 根据名称获取所有数据 |
Enumeration<String> | getParameterNames() | 获取所有名称 |
Map<String,String[]> | getParameterMap() | 获取所有参数的键值对 |
五、获取请求参数并封装对象
1、手动封装方式
实体类封装通过getParameter和getParmeterValues获取参数封装到对象中
2、反射封装方式
通过getParameterMap()获取参数
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//1.获取所有的数据
Map<String, String[]> map = req.getParameterMap();
//2.封装学生对象
Student stu = new Student();
//2.1遍历集合
for (String name: map.keySet()) {
String[] value = map.get(name);
try{
//2.2获取Student对象的属性描述器
PropertyDescriptor pd = new PropertyDescriptor(name,stu.getClass());
//2.3获取对应的setXxx方法
Method wm=pd.getWriteMethod();
//2.4执行方法
if(value.length>1){
wm.invoke(stu,(Object)value)
}else{
wm.invoke(stu,value);
}
}catch(Exception e) {
e.printStackTrace();
}
}
//3.输出对象
System.out.println(stu);
}
3、工具类封装方式
首先导入commons-beanutils和commons-logging的jar包
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//1.获取所有的数据
Map<String, String[]> map = req.getParameterMap();
//2.封装学生对象
Student stu = new Student();
try{
BeanUtils.populate(stu,map);
}catch(Exception e) {
e.printStackTrace();
}
//3.输出对象
System.out.println(stu);
}
4、出错找不到BeanUtils工具类idea没有添加这个jar包,手动导入
六、通过流对象获取请求信息,只支持post请求方式
返回值 | 方法名 | 说明 |
---|---|---|
BufferedReader | getReader() | 获取字符输入流 |
ServletInputStream | getinputStream() | 获取字节输入流 |
字节流
字符流
七、中文乱码问题
Get方式
没有乱码问题,在Tomcat 8版本后已经解决了!!
Post方式
有乱码问题,通过getCharacterEncoding("UTF-8")解决
req. setCharacterEncoding ("UTF-8");
八、请求域
请求域(request域) :可以在一次请求范围内进行共享数据。
一般用于请求转发的多个资源中共享数据。
九、请求对象操作共享数据方法;
返回值 | 方法名 | 说明 |
---|---|---|
void | setAttribute(String name,Object value) | 向请求域对象中存储数据 |
Object | getAttribute(String name) | 通过名称获取请求域对象中的数据 |
void | removeAttribute(String name) | 通过名称移除请求域对象中的数据 |
十、请求转发
请求转发:客户端的一次请求到达后,发现需要借助其他Servlet来实现功能。
特点:
浏览器地址栏不变
域对象中的数据不丢失
负责转发的Servlet转发前后的响应正文会丢失
由转发的目的地来响应客户端,
返回值 | 方法名 | 说明 |
---|---|---|
RequestDispatcher | getRequestDispatcher(String name) | 获取请求调度对象 |
void | forward(ServletRequest req,ServletResponse resp) | 实现转发 |
十一、请求包含
请求包含:可以合并其他Servlet中的功能一起响应给客户端,
返回值 | 方法名 | 说明 |
---|---|---|
RequestDispatcher | getRequestDispatcher(String name) | 获取请求调度对象 |
void | include(ServletRequest req,ServletResponse resp) | 实现包含 |