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、代码实现方法

package com;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author 86136
 */
@WebServlet("/aa")
public class MyWeb01  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 {
        //获取请求方式
        String method = req.getMethod();
        System.out.println("method = " + method);//method = POST
        //获取虚拟目录名称
        String contextPath = req.getContextPath();
        System.out.println("contextPath = " + contextPath); //contextPath =  (这里什么都没有是因为我没有设置虚拟目录名称)
        //获取Servlet映射目录
        String servletPath = req.getServletPath();
        System.out.println("servletPath = " + servletPath);//servletPath = /aa
        //获取访问者ip地址
        String remoteAddr = req.getRemoteAddr();
        System.out.println("remoteAddr = " + remoteAddr);//remoteAddr = 127.0.0.1
        //获取统一资源标识符
        String requestURI = req.getRequestURI();
        System.out.println("requestURI = " + requestURI);//requestURI = /aa
        //获取统一资源定位符
        StringBuffer requestURL = req.getRequestURL();
        System.out.println("requestURL = " + requestURL);//requestURL = http://localhost:8080/aa
        //获取协议及版本
        String protocol = req.getProtocol();
        System.out.println("protocol = " + protocol);//protocol = HTTP/1.1
    }
}

         3、获取请求头信息

返回值

方法名

说明

String

getHeader(String name)

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

Enumeration<String>

getHeaderNames()

获取所有请求头名称

        4、代码实现

package com;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
/**
 * @author 86136
 */
@WebServlet("/aa")
public class MyWeb01  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 {
        //获取请求头信息
        //根据请求头名称获取一个值
        String host = req.getHeader("Host");
        System.out.println("host = " + host);//host = localhost:8080
        //获取所有请求头名称
        Enumeration<String> headerNames = req.getHeaderNames();
        //headerNames = org.apache.tomcat.util.http.NamesEnumerator@727fdf5c
        System.out.println("headerNames = " + headerNames);
        //遍历
        while (headerNames.hasMoreElements()){
            //得到当前遍历出来的请求头名称
            String name = headerNames.nextElement();
            //根据名称获取请求头的值
            String value = req.getHeader(name);
            System.out.println(name + "== " + value);
        }

    }
}

         5、获取请求参数信息

返回值

方法名

说明

String

getParameter(String name)

根据名称获取数据

String[]

getParameterValues(String name)

根据名称获取所有数据

Enumeration<String>

getParameterNames()

获取所有名称

Map<String,String[]>

getParameterMap()

获取所有参数的键值对

        6、代码实现

package com;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

/**
 * @author 86136
 */
@WebServlet("/aa")
public class MyWeb01  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");

        //获取请求参数信息
        //根据名称获取数据
        String name = req.getParameter("name");
        System.out.println("name = " + name);//name = 九亿少女梦
        //根据名称获取所有数据
        String[] yxs = req.getParameterValues("yx");
        System.out.println("yxs = " + yxs);
        //获取所有名称
        Enumeration<String> parameterNames = req.getParameterNames();
        //遍历
        while (parameterNames.hasMoreElements()){
            //得到当前遍历出来的参数名
            String s = parameterNames.nextElement();
            System.out.println("s = " + s); //s = name s = pass s = yx
            String parameter = req.getParameter(s);
            System.out.println("parameter = " + parameter); //parameter = 九亿少女梦 parameter = 1314520 parameter = 打游戏
        }
        //获取所有参数的键值对(map集合)
        Map<String, String[]> parameterMap = req.getParameterMap();
        Set<String> strings = parameterMap.keySet();
        for (String names : strings) {
            //获取键值对
            String[] values = parameterMap.get(names);
            System.out.println(names);
            System.out.println("values = " + Arrays.toString(values));
        }

    }
}

         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、代码实现

package com;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

/**
 * @author 86136
 */
@WebServlet("/bb")
public class MyWeb02 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");
        //第一种方式
        //RequestDispatcher dispatcher = req.getRequestDispatcher("/aa");
        //dispatcher.forward(req,resp);

        //第二种
        req.getRequestDispatcher("/aa").forward(req,resp);


    }
}

 

package com;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

/**
 * @author 86136
 */
@WebServlet("/aa")
public class MyWeb01  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");
        System.out.println("喜欢你");
    }
}

        我访问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");

 

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渣男あ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值