request
一、概念
1. 定义: 代表http请求 的对象
二、Request继承关系
ServletRequest接口
|--- HttpServletRequest接口
三、Request对象提供的功能
1.获取客户端的基本信息
getRemoteAddr() – 获取客户机的IP地址 addr:0:0:0:0:0:0:0:1 |
2.获取请求头信息
getRequestURL – 获取发送请求的完整url url: http://localhost/day14/RequestDemo1 getRequestURI – 获取请求行中的请求资源路径 uri: /day14/RequestDemo1 getMethod – 获取请求方式 method: GET getHeader(String name) – 根据请求头的名称获取对应的值 |
3.获取请求参数
getParameter(String name) – 根据请求参数的名称获取参数值 getParameterValues(String name) -- 根据请求参数的名称获取所有参数值组成的数组 getParameterMap() – 获取所有请求参数组成的map集合 |
4.实现请求转发(A向我借钱,我叫班长借钱给A,但A仍然以为是我借钱给他的)
1)请求转发的过程
2)特点:
转发是一次请求对应一次响应 (客户端发送一次请求,服务器发送一次响应);
地址栏不会发生变化 (浏览器不知情);
转发只能在同一个WEB应用内部的资源之间进行跳转
3)方法
request.getRequestDispatcher("/RequestDemo5"). forward(request, response);
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
//将请求转发给RequestDemo5
request.getRequestDispatcher("/RequestDemo5").forward(request, response);
}
4)注意1:如果转发过程中,如果向response缓冲器写入数据并且强制发送给浏览器且强制发送给浏览器,转发将失败
5)注意2:同一个servlet不能被转发多次(A不能同时转发给B和C),但可以多重转发(A转发给B,B转发给C)
5.作为域对象
1)域对象:如果一个对象具有一个可以被看见的范围,那么可以在整个范围内实现资源的共享 ;
2)相关方法:
request.setAttribute(String name, Object value); -- 往request域中(map)添加一个域属性
request.getAttribute(String name); -- 根据属性名获取request域中的属性值
request.removeAttribute(String name); -- 根据属性名删除request域中的属性
request.getAttributeNames(); -- 获取request域中所有的属性名称组成的枚举. |
6.实现请求包含
1)注意:只能包含同一个 dynamic web project
2) 如果浏览器访问服务器中的某一个ServletA, ServletA在处理请求时不能够独立的处理这次请求, 需要ServletB帮忙一同处理这次请求, 这时可以在ServletA将ServletB包含进来, 结果是由ServletA和ServletBy共同来处理该请求, 处理的结果也会合并在一起, 响应给浏览器
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
//demo7处理的结果
response.getWriter().write("demo7...before..");
response.getWriter().println();
//将demo8包含进来和demo7共同来处理这次请求
request.getRequestDispatcher("/RequestDemo8").include(request, response);
response.getWriter().write("demo7...after..");
response.getWriter().println();
}
四、Request生命周期
生命周期: 一次请求开始创建request,一次请求结束(服务器响应该请求)销毁request对象 ;
作用范围: 整个请求链
主要功能: 在整个请求链中实现数据的共享
五、请求参数乱码问题
例如: ....?name=牛逼
在向服务器提交请求参数是,如果参数中含有中文参数,就会出现乱码问题。
原因:
1.浏览器在发送数据时使用utf-8码表---如果浏览器在打开网页时使用的是utf-8,浏览器就会使用相同的编码来发送请求参数;
2.服务器在接受数据时使用的是iso8859-1码表 :如果没有通知浏览器使用哪一个编码,服务器默认使用iso8859-1来接受参数;
解决方法:
方法1:通过手动编码器来解决
String username = request.getParameter("username");
System.out.println("username"+username);
byte[] bytes = username.getBytes("iso8859-1"); //编码
username = new String(bytes,"utf-8"); //解码
System.out.println("username:"+username);
方法2:
1.如果是POST提交
request.setCharacterEncoding(“utf-8”); //通知服务器使用utf-8码表来接收请求实体内容中的数据
2.如果是GET提交,采用上述手动解编码 或者 修改服务器核心配置文件server.xml
上一篇: ps制作证件照人物精修底色换成红色教程
推荐阅读
-
浅谈Spring学习之request,session与globalSession作用域
-
ASP.NET笔记之 Request 、Response 与Server的使用
-
java中request常用方法小结
-
Request.UrlReferrer使用详解
-
java中request常用方法小结
-
有潜在危险的 Request.Form 值避免方法
-
github 的 pr 使用方法(pull request)
-
【mlflow 系列8】向 mlflow 提交pr(pull request)
-
浅谈Spring学习之request,session与globalSession作用域
-
tomcat报错: Error parsing HTTP request header