首页 > 其他分享 >【学习笔记】HttpServletRequest

【学习笔记】HttpServletRequest

时间:2022-10-15 18:11:57浏览次数:64  
标签:HttpServletRequest 请求 req 笔记 表单 学习 jsp servlet

HttpServletRequest

web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,和一个代表响应的HttpServletResponse对象

  • 如果要获取客户端请求过来的参数:找HttpServletRequest

  • 如果要给客户端一些响应信息:找HttpServletResponse

 

HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,Http请求中的所有信息会被封装到HttpServletRequest,通过HttpServletRequest的方法,获得客户端的所有信息。

 

主要应用:

获取前端参数

方法:

req.getParameter();  //获取单个
req.getParameterValues();  //获取多个,如多选框等

 

我们通过提交表单的案例,来了解如何获取参数

  • 我们需要一个jsp来展示前端的表单等

    • 表单form有一个属性是action,这个action就表示要把这个表单提交到什么地方

      • action的属性可以为一个页面如 “index.html”,随之form表单中的数据也随同提交到了"inex.html"页面

      • action的属性也可以为一个servlet类如"addUserServlet",同时form表单中的数据也随同提交到了addUserServlet,之后servlet通过requset域对象来获取对应的参数值

      • action的属性也可以为"“或”#",表示把from中的数据提交到当前页面

    • 我们这里要提交到Servlet,所以action中要填注册Servlet时的路径

    • 还需要注意的是,提交的路径需要寻找到项目的路径

      • 使用${context.request.getContextPath()} 找到项目的路径

      • 要使用${},还需要导入jsp的包 javax.servlet.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登录</title>
    </head>
    <body>
    <form action="${pageContext.request.getContextPath()}/login" method="post">
        用户名:<input type="text" name="username"> <br>
        密码:<input type="password" name="password"> <br>
        爱好:
        <input type="checkbox" name="hobbys" value="唱歌">唱歌
        <input type="checkbox" name="hobbys" value="跳舞">跳舞
        <input type="checkbox" name="hobbys" value="吃饭">吃饭
        <input type="checkbox" name="hobbys" value="睡觉">睡觉
        <br>
        <input type="submit">
    </form>
    </body>
    </html>

    ${pageContext.request.getContextPath()}/login 就代表了要提交到那个Servlet,其中

    ${pageContext.request.getContextPath()} 表示项目的目录

  • 在Servlet中获取这些参数

    package com.wang.servlet;
    ​
    import jakarta.servlet.ServletException;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    ​
    import java.io.IOException;
    import java.util.Arrays;
    ​
    public class RequestServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req, resp);
        }
    ​
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置请求和响应的字符编码
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
    ​
            //参数就是表单中的 name 属性
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            String[] hobbys = req.getParameterValues("hobbys");
            //输出一下这些参数
            System.out.println("========================");
            System.out.println(username);
            System.out.println(password);
            System.out.println(Arrays.toString(hobbys));
            System.out.println("========================");
    ​
            //请求转发
            req.getRequestDispatcher("/success.jsp").forward(req,resp);
        }
    }

    这里需要注意的是,如果不想让请求和响应的中文乱码,必须要设置

    关于请求的问题:

    这里请求转发是通过request来实现的,调用了getRequestDispatcher()

    其中 “/” 就代表了项目的路径,不需要再写一遍项目路径了,这也是和重定向的区别

  • 新建一个,提交成功后,在Servlet中转发的jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登录成功</title>
    </head>
    <body>
    <h1>登录成功</h1>
    </body>
    </html>

 

image-20221015174001036

 

请求转发

//请求转发
req.getRequestDispatcher("/success.jsp").forward(req,resp)

 

请求转发有两种方式:

  1. 使用request对象的getRequestDispatcher()方法,参数是要转发的jsp或Servlet

    “/” 就代表了项目的目录

  2. ServletContext对象的getRequestDispatcher()方法,与上面相同

 

重定向:

调用response对象的sendRedirect(),参数必须带上项目的路径,如 “ /r/test ”

标签:HttpServletRequest,请求,req,笔记,表单,学习,jsp,servlet
From: https://www.cnblogs.com/wztblogs/p/16794693.html

相关文章

  • Java核心技术阅读笔记(第四章)
    Chapter4对象与类作者:Denis版本:1.0编写时间:2022/10/15编写地点:中国山西省4.1类与对象的概述可以把类想象为一个模具,利用类能够创造出很多同属于一个物种但参......
  • mybatis学习
    初步学习了mybatis的相关知识,其实就是用来简化jdbc那些代码的,相当于JDBCplus,通过一两行代码达到原来JDBCA十几行代码的效果首先创建maven项目,其次是需要在resour里面导入......
  • 【软件学习】Typora快捷键汇总
    Typora快捷键无序列表:输入-或者*之后输入空格有序列表:输入数字+“.”之后输入空格任务列表:输入-,再空格,再[],在空格,再在]后面空格-有序列表:Ctrl+Shift+[无序......
  • 【软件学习】解决Typora图片无法居中的问题
    ▚01 问题描述......
  • UE4学习笔记5——画刷;合并BSP;合并Actor
    P15.BSP画刷的概述和使用方法P16.房子搭建全流程P17.静态网格模型碰撞设置P18.合并Actor(合并静态网格体)P15画刷在哪?放置actor->几何体,这些就是所谓的画刷......
  • 2022-2023-1 20221418 《计算机基础与程序设计》第七周学习总结
    2022-2023-120221418《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程(2022-2023-1-计算机基础与程序设计)这个作业要求在哪里(2022-2023......
  • 20201306吴龙灿第四章学习笔记
    知识点归纳前言学习了解并发编程的概念,理解并行计算的概念和重要性;掌握线程的原理和其对于进程的优势。通过学习Pthread线程操作,了解如何使用线程进行并发编程;理解死锁问......
  • python 3.10 内置函数 71个 笔记
    内置函数Python解释器内置了很多函数和类型,任何时候都能使用。以下按字母顺序给出列表。截止python3.10.8,一共是71个内置函数1.输入输出:2个print()input()......
  • Java学习笔记1
    1.自动抽取代码的快捷键:Ctrl+Alt+M  2.随机生成0-(n-1)范围内的整数:Randomr=newRandom();intrandomIndex=r.nextInt(n); 3.批量修改一个变量名的快捷键Shift+F6,......
  • 2022-2023 20221403《计算机基础与程序设计》第七周学习总结
    学期(如2022-2023-1)学号20221410《计算机基础与程序设计》第七周学习总结作业信息**教材学习内容总结**了解栈和队列的运行方式;明白了列表的链式结构;注意列表不是数......