3、HttpServletRequest对象

HttpServletRequest接口用于接收客户端HTTP请求的信息,如请求参数、头信息等。常用方法包括getRequestURL、getRequestURI、getQueryString、getMethod和getProtocol等。此外,还介绍了如何处理请求参数、解决POST请求乱码问题以及请求转发的概念,转发过程中请求数据可在不同资源间共享。
摘要由CSDN通过智能技术生成

作用

用来接收客户端发送过来的请求的信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,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里面只能有一个请求转发
    

特点:

  1. 服务端行为
  2. 地址栏不变
  3. 从始至终只有一个请求
  4. 数据可以共享

request作用域

通过该对象可以在一个请求中传递参数,作用范围:在一次请求中有效,即服务器跳转有效

//设置域对象内容
request.setAttribute(String name,Object value);
//获取域对象内容
request.getAttribute(String name);
//删除域对象内容
request.removeAttribute(String name);

request域对象中的数据在一次请求中有效,则经过请求转发,request域中的数据依然存在,则在请求转发的过程中可以通过request来传输/共享数据
一般用于将后台数据传递给前端(请求转发跳转到jsp页面)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值