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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected 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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected 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@727fdf5cSystem.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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected 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 = yxString 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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected 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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected 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");

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!

作者介绍 礁鲨系列天线&#xff0c;以其独特的外观设计和强大的性能&#xff0c;成为德思特Panorama智能天线家族的最新成员。这款天线不仅稳定提供5G、WIFI和GNSS信号&#xff0c;更能在各类复杂环境中展现出卓越的性能。它的设计灵感来源于海洋中的礁鲨&#xff0c;象征着力量…

内存管理【C++】

内存分布 C中的内存区域主要有以下5种 栈&#xff08;堆栈&#xff09;&#xff1a;存放非静态局部变量/函数参数/函数返回值等等&#xff0c;栈是向下增长的【地址越高越先被使用】。栈区内存的开辟和销毁由系统自动执行 堆&#xff1a;用于程序运行时动态内存分配&#xff…

电脑丢失api-ms-win-crt-runtime-l1-1-0.dll的多种修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“api-ms-win-crt-runtime-l1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中&#xff0c;它表示一个动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常运行&#xf…

大型企业用什么文件加密软件,五款适合企业的文件加密软件

大型企业在选择文件加密软件时&#xff0c;通常会倾向于那些能够提供全面数据保护、具有高度可定制性、易于管理且能适应复杂组织结构的解决方案。以下是一些适合大型企业使用的文件加密软件&#xff1a; 1.域智盾软件&#xff1a; 作为一款企业级文件加密软件&#xff0c;支持…

曲面细分技术在AI去衣中的创新应用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理领域的应用日益广泛。其中&#xff0c;AI去衣技术因其独特的应用场景而备受瞩目。在这一技术的发展过程中&#xff0c;曲面细分技术发挥了至关重要的作用。本文将深入探讨曲面细分技术在AI去衣中的作用及其…

C语言-单精度和双精度浮点型

文章目录 一、遇到的问题二、解决方案三、问题根因float和double的区别&#xff1a; 总结-浮点数 一、遇到的问题 将NXP项目的代码移植到RH850F1K的项目上时&#xff0c;程序运行异常&#xff1a; u16Volt (uint16)((double)u16ADVal * (double)6.3) 执行到这一行程序就跑飞了…

vue3可以快速简单的操作dom元素了

再也不需要用document.getElementById("myElement")的这种方式来对dom元素进行操作了 我们需要使用模板引用——也就是指向模板中一个 DOM 元素的 ref。我们需要通过这个特殊的 ref attribute 来实现模板引用&#xff1a; <script setup> import { ref, onMo…

wafw00f一键检测目标防火墙信息(KALI工具系列十五)

目录 1、KALI LINUX简介 2、wafw00f工具简介 3、在KALI中使用lbd 3.1 查看可检测的防火墙对象 3.2 目标防火墙种类检测 3.3 目标防火墙详细信息检测 3.4 将检查结果输出 4、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版&#xff0c;广…

最好的电脑数据恢复软件是什么

由于硬件故障、恶意软件攻击或意外删除而丢失文件可能会造成巨大压力。数据丢失会扰乱日常运营&#xff0c;造成宝贵的业务时间和资源损失。在这些情况下&#xff0c;数据恢复软件是检索丢失或损坏数据的最简单方法。 数据恢复软件何时起作用&#xff1f; 对于 Windows 数据恢…

vue3组件传值---vue组件通过属性,事件和provide,inject进行传值

通过属性传值&#xff08;父传子&#xff09; vue的组件具有props自建属性&#xff08;自定义名称&#xff0c;类似于class&#xff0c;id的属性&#xff09;&#xff0c;通过这个属性&#xff0c;父组件可以向子组件传递参数&#xff0c;从而实现组件之间的信息传递&#xff0…

CSDN UI 2024.06.01

当我们的栏目很多的时候&#xff0c;通过【置顶】来排列顺序是很麻烦的&#xff0c;应该加一列&#xff0c;设置优先级别。太难用了 或者加两个按钮【上移】 【下移】

极验4点选逆向 JS逆向分析 最新版验证码

目录 声明&#xff01; 一、请求流程分析 二、加密参数w与payload 三、参数w生成位置 四、结果展示&#xff1a; 原创文章&#xff0c;请勿转载&#xff01; 本文内容仅限于安全研究&#xff0c;不公开具体源码。维护网络安全&#xff0c;人人有责。 声明&#xff01; 本文章…

升级笔记本

笔记本型号参数&#xff1a;Acer V5-573G CPU:I5 4200U 1.6GHz 最高2.6GHz 双核四线程 内存&#xff1a;4G 1600M DDR3L SO-DIMM 显卡&#xff1a;独立显卡NVIDIA GeForce GT 750M 硬盘&#xff1a;1T 5400转 屏幕&#xff1a;15.6英寸 1920*1080 【Acer V5-573G-54204G1…

WIFI 万[néng]钥匙 v5.0.10/v4.9.80 SVIP版!

WiFi Master Key v5.0.10/v4.9.80 WIFI万[Nng]钥匙APP是一款专业的网络连接工具&#xff0c;设计宗旨在于为用户提供方便快捷的WiFi接入方案。本应用集成了覆盖全国的大量免费WiFi热点信息&#xff0c;确保用户能够在不同地区快速而稳定地连接到互联网。此外&#xff0c;该应用…

atcoder350,351,352,353,354,355期部分题解

声明&#xff1a;有些题感觉已经说到很明白了&#xff0c;就先不写代码了&#xff0c;有空会补上 目录 350D: new friend 350E: toward 0 351D:Grid and Magnet 352D:permutation subsequence 353C: sigma problem 353D: another sigma problem 354C: atcoder magics …

神经网络与深度学习——第6章 循环神经网络

本文讨论的内容参考自《神经网络与深度学习》https://nndl.github.io/ 第6章 循环神经网络 给网络增加记忆能力 延时神经网络 有外部输入的非线性自回归模型 循环神经网络 简单循环网络 循环神经网络的计算能力 循环神经网络的通用近似定理 图灵完备 应用到机器学习 序列到类…

python实现描述统计

数据基础情况 import numpy as np import pandas as pd import matplotlib.pyplot as pyplot pd.options.display.max_rows 10##最多输出10行数据 data_url https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBMDeveloperSkillsNetwork-ST0151EN-SkillsN…

数据整理操作及众所周知【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

计算机组成原理·存储系统疑点归纳

组原这门课有点学得不是很懂&#xff0c;现在快考试了&#xff0c;挑几个做错了的题分析、记录一下。 N o . 1 \mathit{No}.1 No.1  x x x、 y y y 为定点整数&#xff0c;其格式为 1 1 1 位符号位、 n n n 位数值位&#xff0c;若采用补码一位乘法实现乘法运算&#xff0c;则…

[AI OpenAI] 推出ChatGPT Edu

一种负担得起的解决方案&#xff0c;帮助大学将AI负责任地引入校园。 我们宣布推出ChatGPT Edu&#xff0c;这是一个专为大学设计的ChatGPT版本&#xff0c;旨在负责任地向学生、教职员工、研究人员和校园运营部署AI。ChatGPT Edu由GPT-4o提供支持&#xff0c;能够跨文本和视觉…