作用
用来接收客户端发送过来的请求的信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,service()方法中形参接收的时HttpServletRequest接口的实例化,标识该对象应用在HTTP协议上,该对象是由Tomcat封装好传递过来
方法
常用方法
- getRequestURL():获取请求时的完整路径(从http开始,到"?"前面结束)
- getRequestURI():获取请求时的部分路径(从项目的站点名开始,到“?”前面结束)
- getQueryString():获取请求时的参数字符串(从“?”后面开始,到最后的字符串)
- getMethod():获取请求方式(GET或POST)
- getProtocol():获取当前协议版本(HTTP/1.1)
- getContextPath():获取项目的站点名(项目对外访问路径)
//获取请求时的完整路径(从http开始,到"?"前面结束
String url=req.getRequestURL()+"";
System.out.println("获取请求时的完整路径:"+url);
//获取请求时的部分路径(从项目的站点名开始,到“?”前面结束)
String uri=req.getRequestURI();
System.out.println("获取请求时的部分路径:"+uri);
//获取请求时的参数字符串(从“?”后面开始,到最后的字符串)
String queryString=req.getQueryString();
System.out.println("获取请求时的参数字符串:"+queryString);
//获取请求方式(GET或POST)
String method=req.getMethod();
System.out.println("获取请求方式:"+method);
//获取当前协议版本(HTTP/1.1)
String protocol=req.getProtocol();
System.out.println("获取当前协议版本:"+protocol);
//获取项目的站点名(项目对外访问路径)
String webapp=req.getContextPath();//上下文路径
System.out.println("获取项目的站点名:"+webapp);
输入http://localhost:8080/s01/ser01
输出:
获取请求时的完整路径:http://localhost:8080/s01/ser01
获取请求时的部分路径:/s01/ser01
获取请求时的参数字符串:null
获取请求方式:GET
获取当前协议版本:HTTP/1.1
获取项目的站点名:/s01
输入http://localhost:8080/s01/ser01?uname=admin&&password=123456
输出:
获取请求时的完整路径:http://localhost:8080/s01/ser01
获取请求时的部分路径:/s01/ser01
获取请求时的参数字符串:uname=admin&&password=123456
获取请求方式:GET
获取当前协议版本:HTTP/1.1
获取项目的站点名:/s01
获取请求参数
- getParameter(name):获取指定名称的参数【返回字符串】
- getParameterValues(String name):获取指定名称参数的所有值【返回字符串数组,用于复选框传值】
//获取指定名称的参数值
String uname=req.getParameter("uname");
String upwd=req.getParameter("upwd");
System.out.println("uname:"+uname+";upwd:"+upwd);
//获取指定名称参数的所有值
String[]hobbys=req.getParameterValues("hobby");
//判断数组是否为空
if(hobbys!=null &&hobbys.length>0){
for(String hobby:hobbys){
System.out.println("爱好:"+hobby);
}
}
输出
uname:admin;upwd:null
爱好:sing
爱好:dance
爱好:rap
请求乱码问题
Tomcat8以上版本:GET请求不会乱码
POST请求会乱码,通过解析设置服务器编码的格式:req.setCharacterEncoding(“UTF-8”)【只针对POST请求乱码问题】
req.setCharacterEncoding("UTF-8");
请求转发
请求转发,是一种服务器行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的URL地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出
实现发放如下,达到多个资源协同响应的效果:
request.getRequestDispatcher(url).forward(request,response);
//请求转发跳转到Servlet04
//request.getRequestDispatcher("s04").forward(request,response);
//请求转发到jsp页面
request.getRequestDispatcher("login.jsp").forward(request,response);
//一个Servlet里面只能有一个请求转发
特点:
- 服务端行为
- 地址栏不变
- 从始至终只有一个请求
- 数据可以共享
request作用域
通过该对象可以在一个请求中传递参数,作用范围:在一次请求中有效,即服务器跳转有效
//设置域对象内容
request.setAttribute(String name,Object value);
//获取域对象内容
request.getAttribute(String name);
//删除域对象内容
request.removeAttribute(String name);
request域对象中的数据在一次请求中有效,则经过请求转发,request域中的数据依然存在,则在请求转发的过程中可以通过request来传输/共享数据
一般用于将后台数据传递给前端(请求转发跳转到jsp页面)