• Servlet--HttpServletRequest类、请求转发对象、常用方法


    目录

    一、HttpServletRequest类有什么作用

    二、HttpServletRequest类的常用方法

    1.getRequestURI()

    2.getRequestURL()

    3.getRemoteHost()

    4.getHeader()

    5.getParameter()

    6.getParameterValues()

    7.getMethod()

    8.setAttribute(key,value)

    9.getAttribute(key)

    10.getRequestDispatcher()

    三、base标签的作用



    一、HttpServletRequest类有什么作用

       

          每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。

    二、HttpServletRequest类的常用方法

    1. <servlet>
    2. <servlet-name>RequestAPIServletservlet-name>
    3. <servlet-class>servlet.RequestAPIServletservlet-class>
    4. servlet>
    5. <servlet-mapping>
    6. <servlet-name>RequestAPIServletservlet-name>
    7. <url-pattern>RequestAPIServleturl-pattern>
    8. servlet-mapping>
    1. <servlet>
    2. <servlet-name>ParameterServletservlet-name>
    3. <servlet-class>servlet.ParameterServletservlet-class>
    4. servlet>
    5. <servlet-mapping>
    6. <servlet-name>ParameterServletservlet-name>
    7. <url-pattern>/ParameterServleturl-pattern>
    8. servlet-mapping>

    1.getRequestURI()

           获取请求的资源路径

    1. // 获取请求的资源路径
    2. System.out.println("URI=>"+req.getRequestURI());

       结果:  URI=>/web_Tomcat_war_exploded/RequestAPIServlet

    2.getRequestURL()

            获取请求的统一资源定位符(绝对路径)

    1. // 获取请求的统一资源定位符(绝对路径)
    2. System.out.println("URL=>"+req.getRequestURL());

    结果:    URL=>http://localhost:8080/web_Tomcat_war_exploded/RequestAPIServlet

    3.getRemoteHost()

            获取客户端的ip地址

    1. // 获取客户端的ip地址
    2. System.out.println("获取客户端的ip地址=>"+req.getRemoteHost());

    结果: 获取客户端的ip地址=>127.0.0.1

      补充:

       使用localhost访问时,得到的客户端ip地址是  127.0.0.1

       使用127.0.0.1访问时,得到的客户端ip地址是 127.0.0.1

       使用真实ip地址访问时,得到的客户端ip地址是  真实客户端的ip地址

    4.getHeader()

             获取请求头

    1. // 获取请求头
    2. System.out.println("获取请求头User-Agent=>"+req.getHeader("User-Agent"));

    结果:获取请求头User-Agent=>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0

    5.getParameter()

          获取请求的参数

    1. public class ParameterServlet extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. // 获取请求参数
    5. String username = req.getParameter("username");
    6. String password = req.getParameter("password");
    7. String hobby = req.getParameter("hobby");
    8. // 有多个值的话要使用这个方法
    9. String[] hobby2 = req.getParameterValues("hobby");
    10. System.out.println("username=>"+username);
    11. System.out.println("password=>"+password);
    12. System.out.println("hobby=>"+hobby);
    13. System.out.println("hobby=>"+ Arrays.toString(hobby2));
    14. }
    15. }

       

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <form action="http://localhost:8080/web_Tomcat_war_exploded/ParameterServlet" method="get">
    9. 用户名: <input type="text" name="username"/> <br/>
    10. 密码: <input type="password" name="password"/> <br/>
    11. 兴趣爱好: <input type="checkbox" name="hobby" value="java"/> Java
    12. <input type="checkbox" name="hobby" value="c++"/>C++
    13. <input type="checkbox" name="hobby" value="js"/> JavaScript
    14. <br/>
    15. <input type="submit">
    16. form>
    17. body>
    18. html>

    结果: 

     我们发现当选择兴趣爱好的时候,会有多个选择,如果再用getParameter()方法只会出现一个值,但这其实不是很符合我们的要求。

      当我们需要获取多个值的时候,我们可以使用getParameterValues()

    6.getParameterValues()

            获取请求的参数(多个值的时候使用)

    1. // 有多个值的话要使用这个方法
    2. String[] hobby2 = req.getParameterValues("hobby");

       参数上面那个方法 

    7.getMethod()

             获取请求的方式GET或POST

    1. // 获取请求方式是get还是post
    2. System.out.println("获取请求方式=>"+req.getMethod());

    结果:获取请求方式=>GET

    8.setAttribute(key,value)

              设置域数据

             看10 

    9.getAttribute(key)

               获取域数据

              看10

    10.getRequestDispatcher()

               获取请求转发对象

      

       

    1. public class Servlet11 extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. // 获取请求的参数(办事的材料)查看
    5. String username = req.getParameter("username");
    6. System.out.println("在Servlet1(柜台1)中查看参数(材料)"+username);
    7. // 给材料“盖一个章”,并传递到Servlet2(柜台2)去查看
    8. req.setAttribute("key1","柜台1的章");
    9. // 问路: Servlet2怎么走(柜台2)
    10. // 请求转发必须要以斜杠打头,斜杠表示地址为;http://ip:port/工程名/ 映射到IDEA代码的web目录
    11. RequestDispatcher requestDispatcher= req.getRequestDispatcher("/Servlet22");
    12. // 走向Servlet2(柜台2)
    13. requestDispatcher.forward(req,resp);
    14. }
    15. }

    1. public class Servlet22 extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. // 获取请求的参数(办事的材料)查看
    5. String username = req.getParameter("username");
    6. System.out.println("在Servlet2(柜台2)中查看参数(材料)"+username);
    7. // 查看柜台1是否盖章
    8. // 这里的参数一定要和Servlet1中的参数一致(两遍一致)
    9. Object key1 = req.getAttribute("key1");
    10. System.out.println("柜台1是否有章:"+key1);
    11. // 处理自己的业务
    12. System.out.println("servlet2处理自己的任务");
    13. }
    14. }

    三、base标签的作用

       我们首先看下面这个例子

    1. public class ForwardC extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. System.out.println("经过了ForwardC程序");
    5. // 请求转发必须要以斜杠打头,斜杠表示地址为;http://ip:port/工程名/ 映射到IDEA代码的web目录
    6. RequestDispatcher requestDispatcher= req.getRequestDispatcher("/a/b/c.html");
    7. requestDispatcher.forward(req,resp);
    8. }
    9. }
    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. 这是a下的b下的c.html
    9. <a href="../../index.jsp">这是web下的index.html页面a>
    10. body>
    11. html>

    1. <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    2. html>
    3. <html>
    4. <head>
    5. <title>JSP - Hello Worldtitle>
    6. head>
    7. <body>
    8. 这是Web下的index.html <br/>
    9. <a href="a/b/c.html" > a/b/c.htmla> <br/>
    10. <a href="http://localhost:8080//web_Tomcat_war_exploded/ForwardC">请求转发a/b/c.htmla>
    11. body>
    12. html>

    我们上面生成了两个页面,当我们通过点击每个页面的第一个超链接(a标签)的时候,可以实现两个页面的相互跳跃,但是当我们点击“请求转发a/b/c.html”此超链接进项相互跳跃的时候,我们发现可以跳过去,但是跳不回来,那原因是什么呢?

        如下图所示,这就是为什么使用请求转发的时候无法完成相互跳跃 

    其实我们不难发现是因为往回跳的时候参照路径发生了改变,导致跳不回来

    那怎么解决这个问题呢?

      我们只需要给下面的页面设置一个相对路径工作时的参照地址,使用base标签

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. <base href="http://localhost:8080//web_Tomcat_war_exploded/a/b/c.html">
    7. head>
    8. <body>
    9. 这是a下的b下的c.html
    10. <a href="../../index.jsp">这是web下的index.html页面a>
    11. body>
    12. html>

  • 相关阅读:
    Go语言类库-sync
    南洋才女,德艺双馨,孙燕姿本尊回应AI孙燕姿(基于Sadtalker/Python3.10)
    超声波俱乐部分享:大模型开放,创业者的机会?
    撤销git本地修改(万能)
    Maya arnold 前台渲染没反应
    低代码平台 JNPF快速开发平台 框架源码
    SpringCloud OpenFeign
    Python安全渗透测试-SSH密码暴力破解渗透测试
    Apache HBase概述(图文并茂~)
    OAuth2.0、和jwt、spring security之间的区别和联系
  • 原文地址:https://blog.csdn.net/weixin_51351637/article/details/126237885