• HttpServletRequest接口详解,获取html用户输入的表单数据,HttpServletRequest请求域,请求转发机制


    一、HttpServletRequest定义:

    1. HttpServletRequest 是一个接口,全限定名称:jakarta.servlet.http.HttpServletRequest;
    2. HttpServletRequest 接口是Servlet规范中的一员。
    3. HttpServeltRequest 接口的父类接口是 ServeltRequest
    4. Tomcat服务器实现了HttpServletRequest接口。

    二、HttpServletRequest对象作用:

    1. 封装了Http协议的请求协议,HTTP请求协议中的包括请求行、请求头、请求体。
    2. 实际上是用户发送请求的时候,遵循了HTTP协议,发送的HTTP的请求协议,Tomcat服务器将HTTP协议中的信息以及数据全部解析出来,然后Tomcat服务器把这些信息封装到HttpServletRequest对象中,传给了我们javaweb程序员。
    3. 所以说如果我们想获取HTTP请求报文中的信息,我们只需要面向HttpServletRequest接口编程,调用他的方法。

    三、HttpServletRequest和HttpServletResponse生命周期:

    1. 每个对象的生命周期都很短,仅在HTTP请求报文或HTTP响应报文传输的时候存在。
    2. 一个HTTP请求报文对应一个HttpServletRequest对象,一个HTTP响应报文对应一个HttpServletResponse对象。

    四、HttpServletRequest中常用方法:

    Parameter:参数,是前端传过来的数据
    initParameter:初始化参数,是存在四大域中的数据
    1. 获取前端浏览器用户提交的数据:

    String getParameter(String)//key对应的value数组中的第一个元素

    Map getParameterMap()//获取整个map集合

    EnumerationgetgetParameterNames()//获取map集合中所有key

    String[ ] getParameterValues(String)//根据key获取value

    因为前端提交的数据格式:

    
    <form action="/xmm/servlet06/MyFirstServlet" method="post">
            用户名<input type="text" name="username"><br>
            密码 <input type="text" name="userpwd"><br>
            兴趣<br>
                抽烟<input type="checkbox" name="aihao" value="123">
                喝酒<input type="checkbox" name="aihao" value="312">
                烫头<input type="checkbox" name="aihao" value="153">
            <input type="submit" value="注册">
        form>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    username=132&userpwed=111&aihao=123&aihao=312&aihao=153

    所以后端存储存储前端的数据采用Map集合来存储,而且为了防止key=aihao相同value被覆盖,我们采用Map的方法储存数据。

    Map ,key存储String,value存储String[ ]
    
         key	      value
        ---------------------
        username	   {"132"}
        userpwd	       {"111"}
        aihao		   {"123","312","153"}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:前端永远提交的是字符串,后端永远接收的是字符串。
    2. 获取客户端的IP地址

    getRemoteAddr()

    3. 设置post请求请求体的字符集,可以解决post请求请求体的乱码问题(但不能解决get请求乱码,因为get请求是在请求行发送数据)

    setCharacterRncoding(“UTF-8”)

    4. 获取应用的根路径

    getContextPath()

    5. 获取servlet路径(xml文件中配置的路径)

    getServletPath()

    6. 获取http请求的URI

    getRequestURI()

    7. 获取前端请求方式是get?post?…

    getMethod()

    8. 向HttpServletRequest请求域中存数据。

    setAttribute(String name,Object value)

    9. 从HttpServletRequest请求域中取数据。

    getAttribute(String name)

    10. 从HttpServletRequest请求域中删除数据。

    removeAttribute(String name)

    五、关于HttpServletRequest请求域:

    • HttpServletRequest"请求域"对象要比ServletContext"应用域"对象范围小很多,生命周期短很多。请求域只在一次请求内有效。
    • 一个request请求对象对应一个请求域对象,一次请求结束之后,这个请求域就销毁了。
    • 注意:ServletConfig是一个servlet对象对应一个servletconfig对象,而HttpServletRequest请求域是一个request请求对应一个请求域,是前端的一次请求中的信息,这个信息也不是用户输入的信息,而是我们通过setAttribute方法向请求域中存的信息,前端request请求结束后这个请求域就销毁了。简言之:一个是面向单个servlet对象,一个是面向单个http请求。
  • 相关阅读:
    竞赛 深度学习人脸表情识别算法 - opencv python 机器视觉
    Vue课程48-学习小结
    Ansible之Playbook的任务控制
    Nginx(四) absolute_redirect、server_name_in_redirect、port_in_redirect 请求重定向指令组合测试
    [事务]-事务概念/特性/并发问题/传播特性
    移动设备管理对企业IT 安全的增强
    Mysql 45讲学习笔记(三十三)全表扫描为啥不会OOM(out of memory)
    51单片机直流电机PID速度控制正反转控制(红外光电测速)LCD1602 L298N
    C++模板
    【漏洞复现】泛微e-office OfficeServer2.php 存在任意文件读取漏洞复现
  • 原文地址:https://blog.csdn.net/m0_53881899/article/details/126401324