• Request


    一、Request介绍

           在计算机网络中,"Request"(请求)通常指的是客户端向服务器发送的请求消息,用于获取特定资源或执行特定操作。在Web开发中,"Request"通常指的是HTTP请求,用于客户端与服务器之间的通信。

            1、以下是HTTP请求的一般结构:

                    1、请求行:包括请求方法(GET、POST、PUT、DELETE等)、请求的URL路径和协议版本。

                    2、请求头部:包括关于请求的附加信息,如Host(主机名)、User-Agent(用户代理,浏览器信息)、Accept(可接受的内容类型)、Cookie等。

                    3、请求体:对于POST请求,请求体中包含了向服务器提交的数据,比如表单数据、JSON数据等。GET请求通常不包含请求体。

           2、 常见的HTTP请求方法有:

                    GET:用于请求获取特定资源的信息。

                    POST:用于向服务器提交数据。

                    PUT:用于更新或创建资源。

                    DELETE:用于删除指定的资源。

            在Web开发中,服务器接收到请求后会根据请求中的信息进行处理,并返回相应的响应(Response)给客户端。请求和响应是Web开发中基本的通信方式,通过请求和响应可以实现网页的动态加载、数据的传输等功能。

            总之,"Request"是指客户端向服务器发送的请求消息,其中包含了客户端想要执行的操作以及相关的信息,用于与服务器进行通信和交互。

            3、Request对象继承体系结构

    二、Request常用方法

            1、请求对象常用方法-获取请求行及各种路径

    返回值

    方法名

    说明

    String

    getMethod()

    获得请求方式

    String

    getContextPath()

    获取虚拟目录名称

    String

    getServletPath()

    获取Servlet映射路径

    String

    getRemoteAddr()

    获取访问者ip地址

    String

    getRequestURI()

    获取统一资源标识符

    StringBuffer

    getRequestURL()

    获取统一资源定位符

    String

    getProtocol()

    获取协议及版本

             2、代码实现方法

    1. package com;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. /**
    9. * @author 86136
    10. */
    11. @WebServlet("/aa")
    12. public class MyWeb01 extends HttpServlet {
    13. @Override
    14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    15. doPost(req,resp);
    16. }
    17. @Override
    18. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    19. //获取请求方式
    20. String method = req.getMethod();
    21. System.out.println("method = " + method);//method = POST
    22. //获取虚拟目录名称
    23. String contextPath = req.getContextPath();
    24. System.out.println("contextPath = " + contextPath); //contextPath = (这里什么都没有是因为我没有设置虚拟目录名称)
    25. //获取Servlet映射目录
    26. String servletPath = req.getServletPath();
    27. System.out.println("servletPath = " + servletPath);//servletPath = /aa
    28. //获取访问者ip地址
    29. String remoteAddr = req.getRemoteAddr();
    30. System.out.println("remoteAddr = " + remoteAddr);//remoteAddr = 127.0.0.1
    31. //获取统一资源标识符
    32. String requestURI = req.getRequestURI();
    33. System.out.println("requestURI = " + requestURI);//requestURI = /aa
    34. //获取统一资源定位符
    35. StringBuffer requestURL = req.getRequestURL();
    36. System.out.println("requestURL = " + requestURL);//requestURL = http://localhost:8080/aa
    37. //获取协议及版本
    38. String protocol = req.getProtocol();
    39. System.out.println("protocol = " + protocol);//protocol = HTTP/1.1
    40. }
    41. }

             3、获取请求头信息

    返回值

    方法名

    说明

    String

    getHeader(String name)

    根据请求头名称获取一个值

    Enumeration

    getHeaderNames()

    获取所有请求头名称

            4、代码实现

    1. package com;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.util.Enumeration;
    9. /**
    10. * @author 86136
    11. */
    12. @WebServlet("/aa")
    13. public class MyWeb01 extends HttpServlet {
    14. @Override
    15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    16. doPost(req,resp);
    17. }
    18. @Override
    19. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    20. //获取请求头信息
    21. //根据请求头名称获取一个值
    22. String host = req.getHeader("Host");
    23. System.out.println("host = " + host);//host = localhost:8080
    24. //获取所有请求头名称
    25. Enumeration headerNames = req.getHeaderNames();
    26. //headerNames = org.apache.tomcat.util.http.NamesEnumerator@727fdf5c
    27. System.out.println("headerNames = " + headerNames);
    28. //遍历
    29. while (headerNames.hasMoreElements()){
    30. //得到当前遍历出来的请求头名称
    31. String name = headerNames.nextElement();
    32. //根据名称获取请求头的值
    33. String value = req.getHeader(name);
    34. System.out.println(name + "== " + value);
    35. }
    36. }
    37. }

             5、获取请求参数信息

    返回值

    方法名

    说明

    String

    getParameter(String name)

    根据名称获取数据

    String[]

    getParameterValues(String name)

    根据名称获取所有数据

    Enumeration

    getParameterNames()

    获取所有名称

    Map<String,String[]>

    getParameterMap()

    获取所有参数的键值对

            6、代码实现

    1. package com;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.util.Arrays;
    9. import java.util.Enumeration;
    10. import java.util.Map;
    11. import java.util.Set;
    12. /**
    13. * @author 86136
    14. */
    15. @WebServlet("/aa")
    16. public class MyWeb01 extends HttpServlet {
    17. @Override
    18. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    19. doPost(req,resp);
    20. }
    21. @Override
    22. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    23. //中文乱码
    24. req.setCharacterEncoding("utf-8");
    25. //获取请求参数信息
    26. //根据名称获取数据
    27. String name = req.getParameter("name");
    28. System.out.println("name = " + name);//name = 九亿少女梦
    29. //根据名称获取所有数据
    30. String[] yxs = req.getParameterValues("yx");
    31. System.out.println("yxs = " + yxs);
    32. //获取所有名称
    33. Enumeration parameterNames = req.getParameterNames();
    34. //遍历
    35. while (parameterNames.hasMoreElements()){
    36. //得到当前遍历出来的参数名
    37. String s = parameterNames.nextElement();
    38. System.out.println("s = " + s); //s = name s = pass s = yx
    39. String parameter = req.getParameter(s);
    40. System.out.println("parameter = " + parameter); //parameter = 九亿少女梦 parameter = 1314520 parameter = 打游戏
    41. }
    42. //获取所有参数的键值对(map集合)
    43. Map parameterMap = req.getParameterMap();
    44. Set strings = parameterMap.keySet();
    45. for (String names : strings) {
    46. //获取键值对
    47. String[] values = parameterMap.get(names);
    48. System.out.println(names);
    49. System.out.println("values = " + Arrays.toString(values));
    50. }
    51. }
    52. }

             7、中文乱码问题

                    1、get方式

                            没有乱码问题,再Tomcat8.5版本后已经解决

                    2、post方式

                            有乱码问题,再获取参数前,设置request的编码req.setCharacterEncoding("utf-8")

    三、Request转发

            1、请求转发

                    1、请求转发:一种在服务器内部的资源跳转方式客户端的一次请求到达后,发现需要借助其他 Servlet 来实现功能。

                 特点:
             浏览器地址栏不变
             只能转发到当前服务器内部资源中
             转发是一次请求

            2、请求转发函数

    返回值

    方法名

    说明

    RequestDispatcher

    getRequestDispatcher(String name)

    获取请求调度对象

    返回值

    方法名

    说明

    void

    forward(ServletRequest req,ServletResponse resp)

    实现转发

            3、代码实现

    1. package com;
    2. import javax.servlet.RequestDispatcher;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.annotation.WebServlet;
    5. import javax.servlet.http.HttpServlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import java.io.IOException;
    9. import java.util.Arrays;
    10. import java.util.Enumeration;
    11. import java.util.Map;
    12. import java.util.Set;
    13. /**
    14. * @author 86136
    15. */
    16. @WebServlet("/bb")
    17. public class MyWeb02 extends HttpServlet {
    18. @Override
    19. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    20. doPost(req,resp);
    21. }
    22. @Override
    23. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    24. //中文乱码
    25. req.setCharacterEncoding("utf-8");
    26. //第一种方式
    27. //RequestDispatcher dispatcher = req.getRequestDispatcher("/aa");
    28. //dispatcher.forward(req,resp);
    29. //第二种
    30. req.getRequestDispatcher("/aa").forward(req,resp);
    31. }
    32. }

     

    1. package com;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. import java.util.Arrays;
    9. import java.util.Enumeration;
    10. import java.util.Map;
    11. import java.util.Set;
    12. /**
    13. * @author 86136
    14. */
    15. @WebServlet("/aa")
    16. public class MyWeb01 extends HttpServlet {
    17. @Override
    18. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    19. doPost(req,resp);
    20. }
    21. @Override
    22. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    23. //中文乱码
    24. req.setCharacterEncoding("utf-8");
    25. System.out.println("喜欢你");
    26. }
    27. }

            我访问http://localhost:8080/bb 跳转到 http://localhost:8080/aa浏览器还是显示的/bb却执行了/aa下面的

    四、Request数据共享

            1、共享数据

                    1、域对象:

                            一个有作用范围的对象,可以在范围内共享数据

                         request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据  

                    2、方法:

    1. void setAttribute(String name,Object obj):存储数据

    2. Object getAttitude(String name):通过键获取值

    3. void removeAttribute(String name):通过键移除键值对

                     3、代码实现

    //往request中存数据
    req.setAttribute("name","hello");
    //从request中根据key获取数据
    Object name = req.getAttribute("name");
    System.out.println("name = " + name);
    //从request中根据key生成数据
    req.removeAttribute("name");

     

  • 相关阅读:
    jquery-qrcode客户端二维码生成类库扩展--融入自定义Logo图片
    java中的String类[36]
    自然语言处理系列(三)——LSTM
    JDBC和数据库连接池。
    【Day_14 0510】▲手套
    291_C++_发送json数据给对于的URL【JSON数据交互】
    MUSIC
    一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel
    java毕业设计游戏商城平台Mybatis+系统+数据库+调试部署
    苹果“慌了”,中国客户不买账,这次要提供“折扣”可谓罕见
  • 原文地址:https://blog.csdn.net/qq_64011014/article/details/139374235