Servlet学习笔记04-HttpServletRequset接口

Servlet学习笔记04-HttpServletRequset接口

一、接口介绍

  1. HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar。
  2. HttpServletRequest接口实现类由Http服务器负责提供。
  3. HttpServletRequest接口负责doGet/doPost方法运行时读取Http请求协议包中信息。
  4. 开发人员习惯于将HttpServletRequest接口修饰的对象称为【请求对象】

二、接口作用

  1. 可以读取Http请求协议包中【请求行】信息。
  2. 可以读取保存在Http请求协议包中【请求头】或者【请求体】中的请求参数信息。
  3. 可以代替浏览器向Http服务器申请资源文件调用。

三、代码演示

  1. 通过Get请求并从请求中获取URL和HTTP方法。

    public class OneServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1.通过请求对象,读取【请求行】中的【url】信息
            String url = req.getRequestURL().toString();
            //2.通过请求对象,读取【请求行】中的【method】信息
            String method = req.getMethod();
            System.out.println("URL:"+url);
            System.out.println("Method:"+method);
        }
    

    通过网站访问,看控制台内容(配置xml以及jar包前面加个笔记中有)

    URL:http://localhost:8080/05_servlet_war_exploded/one
    Method:GET
    

    通过请求对象,读取【请求行】中的【uri】信息

    uri:资源文件精准定位地址,在请求行并没有uri这个属性,是在utl上截取的。

    public class OneServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1.通过请求对象,读取【请求行】中的【url】信息
            String url = req.getRequestURL().toString();
            //2.通过请求对象,读取【请求行】中的【method】信息
            String method = req.getMethod();
            //3.通过请求对象,读取【请求行】中的【uri】信息
            String uri = req.getRequestURI();
            System.out.println("URL:"+url);
            System.out.println("Method:"+method);
            System.out.println("uri:"+uri);
        }
    

    访问网站

    URL:http://localhost:8080/05_servlet_war_exploded/one
    Method:GET
    uri:/05_servlet_war_exploded/one
    
  2. 通过Get请求并从请求中获取所有请求参数名

    提前准备一个html页面,里面有一个a标签用于携带请求参数跳转到TwoSverlet页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
          <center>
              <a href="/05_servlet_war_exploded/two?userName=tom&password=123456">通过超链接访问TwoServlet携带请求参数</a>
          </center>
    </body>
    </html>
    

    HttpServlet实现类

    public class TwoServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1.通过请求对象获得【请求头】中【所有请求参数名】
            Enumeration<String> parameterNames = req.getParameterNames();
            while(parameterNames.hasMoreElements()){
                String paramName = parameterNames.nextElement();
                System.out.println("请求参数名"+paramName);
            }
    
        }
    }
    

    启动TomCat,点击跳转后,观看控制台

    请求参数名userName
    请求参数名password
    

    通过请求对象读取指定的请求参数值

    public class TwoServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1.通过请求对象获得【请求头】中【所有请求参数名】
            Enumeration<String> parameterNames = req.getParameterNames();
            while(parameterNames.hasMoreElements()){
                String paramName = parameterNames.nextElement();
                //2.通过请求对象读取指定的请求参数值
                String value = req.getParameter(paramName);
                System.out.println("请求参数名: " + paramName + "请求参数值:"+value);
            }
    
        }
    }
    

    观看控制台

    请求参数名: userName请求参数值:tom
    请求参数名: password请求参数值:123456
    
  3. 通过表单获取请求参数值

    准备一个html页面,通过表单实现Get和Post请求

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
    
        <title>Title</title>
    </head>
    <body>
          <center>
            <form action="/05_servlet_war_exploded/three" method="get">
                请求参数:<input type="text" name="username"/> <br/>
                <input type="submit" value="get方式访问ThreeServlet">
            </form>
    
              <form action="/05_servlet_war_exploded/three" method="post">
                  请求参数:<input type="text" name="username"/> <br/>
                  <input type="submit" value="post方式访问ThreeServlet">
              </form>
          </center>
    </body>
    </html>
    

    HttpServlet实现类

    public class ThreeServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //通过请求对象,读取【请求体】参数信息
            String value = req.getParameter("username");
            System.out.println("get方式从请求体得到参数值:"+value);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //通过请求对象,读取【请求体】参数信息
            String value = req.getParameter("username");
            System.out.println("post方式从请求体得到参数值:"+value);
        }
    }
    

    观看控制台

    get方式从请求体得到参数值:zhangsan
    post方式从请求体得到参数值:admin
    

    值得注意的是:

    • 以GET方式发送中文参数内容时,会返回正常的结果。
    • 以POST方式发送中文参数内容时,会得到乱码。

    这是因为:

    • 浏览器以GET方式发送请求,请求参数保存在【请求头】,在HTTP请求协议包到达Http服务器之后,第一件事就是进行解码请求头二进制内容由Tomcat负责解码,Tomcat9.0默认使用【utf-8】字符集,可以解释一切国家文字。

    • 浏览器以POST方式发送请求,请求参数保存在【请求体】,HTTP请求协议包到达Http服务器之后,第一件事就是进行解码请求头二进制内容由当前请求对象(request)负责解码,request默认使用【ISO-8859-1】字符集,一个东欧语系字符集。这时使用中文就会得到乱码。

      可以通过在post请求方式下声明使用utf-8,重新编码。

      		req.setChararcterEncoding("utf-8");
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值