HttpServletRequest

波束管理 Beam Management Beam Management in 5G NR   波束管理,是5G NR中基于信道质量来动态选择每个UE和gNB之间以什么方向和频率的波束beam来进行通信。   背景   5G NR(New Radio)支持非常高的数据速率和更低的延迟。5G NR支持FR1和FR2频段,FR1为亚6 GHz(450至6000 MHz);FR2为毫米波段(24.25 GHz至52.6 GHz)。   由于毫米波频带使用非常高的频率,因此会导致传播损耗和其他损耗。为了补偿损失,在这种频率下定向通信是必不可少的。 阅读详情
HttpServletRequest
 
  • 发表于 3年前 
  • 阅读 2999 
  • 收藏 15 
  • 点赞 0 
  • 评论 0
摘要: 摘自《深入体验JAVA WEB开发内幕——核心基础》,如有版权问题,请联系我。

一、HttpServletRequest

web客户端发送给web服务器的HTTP请求消息可以分为三个部分:请求行、请求消息头、消息正文(也叫实体内容)。Servlet程序通过调用ServletRequest对象的方法可以获知客户端的请求信息,以及客户机和服务器的网络环境信息,例如获取客户发送的请求消息的各个部分和客户端IP地址。HttpServletRequest是专用于HTTP协议的ServletRequest子接口,它用于封装HTTP请求消息,增加了获取HTTP协议专有的头信息的方法,以及获取HTTP请求消息参数的功能。

二、请求消息

1、获取请求行的相关信息

HTTP请求消息的请求行可以分为三个部分:请求方式、资源路径和HTTP协议版本,如:

GET    /project/servlet/RequestURI?parm1=a&parm2=b    HTTP/1.1

RequestLineServlet.java

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestLineServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html; charset=GB2312"); 
        PrintWriter out = response.getWriter();
        
        out.println("getMethod:" + request.getMethod() + "<br>");
        // 返回位于主机和端口之后、参数部分之前的那部分内容
        out.println("getRequestURI:" + request.getRequestURI() + "<br>");
        // 返回参数部分,无参数返回null
        out.println("getQueryString:" + request.getQueryString() + "<br>");
        // 返回协议名和版本号
        out.println("getProtocol:" + request.getProtocol() + "<br>");
        // 返回Web应用程序的路径(虚拟目录),这个路径以“/”开头
        out.println("getContextPath:" + request.getContextPath() + "<br>");
        // 返回servlet映射的路径(web.xml的url-pattern属性)
        out.println("getServletPath:" + request.getServletPath() + "<br>");
    }
}

 

注:URL和URI的区别,可看http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

2、获取请求头的信息

ServletRequest和HttpServletRequest接口中定义了若干用于读取HTTP请求消息中的头字段的方法,其中的getHeader方法是一个通用的方法,可以读取所有的头字段。

(1)、获取所有请求头信息

RequestHeadersServlet.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestHeadersServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html; charset=GB2312");
        PrintWriter out = response.getWriter();
        
        Enumeration<?> headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()) {
            String headerName = (String)headerNames.nextElement();
            // 同一个请求头名可能出现多次
            Enumeration<?> values = request.getHeaders(headerName);
            while(values.hasMoreElements()) {
                out.println(headerName + ":" + (String)values.nextElement() + "<br>");
            }
        }
    }
}

 

在浏览器输入访问地址:http://localhost:8888/requestHeadersServlet/servlet/RequestHeadersServlet

现增加一个html文件,从它链接到该Servlet,访问referer.html:

<a href="servlet/RequestHeadersServlet">referer test</a>

 

访问referer.html:

点击超链接,再次访问RequestHeadersServlet

注意观察:请求消息包含了referer请求头。

(2)盗链

关于“盗链”:http://baike.baidu.com/link?url=UpFE0AJdwVL2ESHqD6aF1N28Zmwi47RwoKzs50NI2t1HKBR6paci_NFhbv78hW-x

为了防止“盗链”,需要检查请求的来路,只接受本站内的页面链接进来的下载请求,而阻止其他站点的页面链接进来的下载请求。要实现这样功能,就需要检查请求消息的referer头字段是否与本站匹配。

DownManagerServlet.java

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
    public class DownManagerServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html; charset=GB2312");
        String referer = request.getHeader("referer");
        String sitePart = "http://" + request.getServerName();
        PrintWriter out = response.getWriter();
        
        // 增加if判断是为了下载请求必须通过本站的下载页面链接进来,也就是防止盗链
        if(referer != null && referer.startsWith(sitePart)) {
            // 处理正当的下载请求,这里只是示意
            out.println("dealing download ...");
        } else {
            // 非法下载请求(即referer为空或不匹配sitePart)跳转到本站的下载说明页
            response.sendRedirect("../down.html");
        }
    }
}

 

down.html

<a href="servlet/DownManagerServlet">down</a>

 

在浏览器输入访问地址:localhost:8888/downManagerServlet/servlet/DownManagerServlet

因为请求消息不含referer请求头,即DownManagerServlet代码中的referer为空,跳转到down.html

点击超链接,再次访问DownManagerServlet,由于这时的请求消息包含有referer请求且值与DownManagerServlet位于同一Web站点,DownManagerServlet接受下载请求。

3、获取请求消息的实体内容

以POST方式提交HTML的FORM表单时,其中的表单字段元素信息都将作为HTTP消息的实体内容(消息正文)发送给Web服务器。对应HTTP请求消息的中的实体内容,ServletRequest以输入流的方式提供给Servlet程序读取,ServletRequest接口中定义了一个getInputStream方法来返回这个字节输入流对象。为了方便读取纯文本形式的实体内容,ServletRequest接口也定义了一个getReader方法,以返回一个代表实体内容的字符输入流对象。

getInputStream与getReader方法

  • getInputStream返回输入流对象类型为ServletInputStream,如果实体内容中包含二进制数据,那么只能使用getInputStream方法返回的输入流对象来读取实体内容。

  • getReader则返回一个BufferedReader对象。

  • 调用了两者任意一个方法后,就不能再调用另一方法。

    三、获取请求参数

    HttpServletRequest对象的最基本和最广泛应用就是获取浏览器传递给Web服务器的参数信息,这些参数信息既可以是HTTP请求消息的请求行中的URL地址后的附加信息,又可以是Post方式下application/x-www-form-urlencoded编码格式的实体内容。那么,如何获取这两种参数?

    ServletRequest和HttpServletRequest接口中定义了若干方法,这些方法除了能读取HTTP请求消息的请求行的URL地址后的附件信息外,还能读取Post方式下的application/x-www-form-urlencoded编码格式的实体内容。

    • getParameter方法:如果请求消息中没有包含指定名称的参数,该方法返回null,即getParameter("firstname"),不存在这个参数返回null;如果指定名称的参数存在但没有设置值,返回一个空串;如果包含多个指定名称相同的参数,返回第一个出现的参数值。另外,该方法对参数名大小写敏感。

    • getParameterValues方法:该方法用于获取某个指定名称的所有参数的值,并以一个String数组的形式返回这些参数值。如果参数值只有一个,返回的数组的长度就为1,其中包含的元素值与getParameter方法返回的值一样。

    • getParameterNames方法:返回一个包含请求消息中所有参数名的Enumeration对象。

    • getParameterMap方法:返回一个将请求消息中所有参数名和值装进Map的Map对象

    问:何为隐藏表单字段?

    答:在form表单中可以使用隐藏表单字段元素向服务器传递参数信息,浏览器在网页上不会显示出隐藏表单字段元素,但当提交表单时,浏览器会将这个隐藏表单字段元素的name属性和value属性作为参数传递给web服务器。

    四、利用请求域属性传递消息

    ServletRequest接口的实现类通常都是采用一个HashMap对象来存储某些对象,setAttribute方法就是向这个HashMap对象中增加与某个名称绑定的对象,getAttribute方法则是根据名称从这个HashMap对象中检索对象。这种存储在ServletRequest对象中的对象称之为请求域属性。

    • setAttribute(String name, Object o),如果ServletRequest对象中已经存在指定名称的属性,若属性值对象为null则相当于removeAttribute,否则即覆盖原来对象。

    • getAttribute(String name),返回指定名称的属性对象。

    • removeAttribute(String name),删除指定名称的属性对象。

    • getAttributeNames(),返回一个包含ServletRequest对象中所有属性名的Enumeration对象。

     

    AutoSAR配置与实践(实践篇)11.1 如何通过IPDU分组控制报文收发 注意这个新增的action其实是一个用户回调函数,在函数中进行配置字的判断,即可完成用户条件的判断(TRUE/FALSE),注意用户条件是用户封装的函数,用于输入给后续的逻辑判断和rule。进行PDU的拆分后,根据配置字可以选择PDU是否使能了。PDU组拆分后可分为常规PDU组和可配PDU组(新增),诊断一方面按原有逻辑控制常规PDU组,另一方面控制新的可配PDU组。举例说明,诊断场景:使能,配置字满足,则用户条件为TURE,表示期望使能可配PDU组(诊断禁止服务场景类似方式,在此不再列举)。 阅读详情

    相关推荐

    TMS320F28377D的sys/bios双核工程配置详解——从零搭建到RAM优化

    本文详细解析了TMS320F28377D双核系统在sys/bios环境下的工程配置与RAM优化策略。从开发环境搭建、SYS/BIOS工程创建到双核CMD文件配置,提供了实战技巧和常见问题解决方案,帮助开发者高效实现电力电子控制系统中的双核协作与性能优化。

    weixin_28292761的博客 600

    HttpServletRequest的getParameter方法

    HttpServletRequest的getParameter方法:tomcat或者其他的Servlet容器在调用程序员的Servlet之前已经帮我们做了很多事情了,比如解析HttpRequestLine(HTTP请求行)和解析HttpHeader(HTTP请求头)等等,但事实上在Servlet之前,服务器只解析到Header就停了,剩下的请求体留在request.getInputStream的流里

    shuangmulin45的博客 4万+

    Edge浏览器IE模式失效?最新142版本隐藏按钮的3种解决方案

    本文针对Edge浏览器142版本中IE模式按钮消失的问题,提供了3种实用解决方案,包括注册表修改、手动添加网站到IE模式列表和企业策略部署方案,帮助用户解决兼容性问题,确保老旧系统正常访问。

    weixin_28308325的博客 500

    HttpServletRequest对象的常用方法

    根据Java规范:request.getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系。域对象其实就是一个类似于map的容器,可以向容器中存入指定的值,在需要的时候,可以通过key去获取对应的值来使用。获取客户端提交的数据,参数name就是客户端在form表单中书写name属性的值,如果不一致,则取不到对应的值。获取客户端提交的 数据中所有的key值(form表单中提交的所有的name属性的值)

    m0_54105501的博客 1742

    OpenSees入门指南:从零开始的环境配置与TCL脚本实战

    本文提供了一份详细的OpenSees入门指南,涵盖从零开始的环境配置到TCL脚本实战的全过程。文章重点讲解了OpenSees的安装步骤、环境变量设置,并推荐了高效的VS Code集成开发环境配置方法。通过一个简支梁分析的完整TCL脚本示例,手把手引导读者完成第一个非线性有限元分析,帮助土木工程与结构工程领域的研究者与学生快速上手这一强大的开源分析工具。

    weixin_28829339的博客 336

    晶圆测试厂wafer map管理建议

    按照Recipe设定bin定义 应有版本管理概念,一般使用最新版本做为活动版本即可 Bin明细中应包含 BinID、BinCode、BinName、BinType、BinColor、Description BinID可使用数字类型 BinCode可参照实际机台的Bin,用于匹配 有些公司也将BinID、BinCode理解为SBin和HBin 即 Software Bin & Hardware Bin 一般也将BinID对应到客户的Bin BinType

    凯神做开发 1万+

    HttpServletRequest的介绍和方法以及代码实战

    1. HttpServletRequest 对象代表客户端的请求2. 当客户端/浏览器通过 HTTP 协议访问服务器时,HTTP 请求头中的所有信息都封装在这个对象中3. 通过这个对象的方法,可以获得客户端这些信息4. HttpServletRequest 类图。

    业精于勤,荒于嬉 1万+

    多视图学习 (Multi-View Learning)

    多视角/多视图学习(Multi-view learning)是陶大成提出的一个研究方向。我们都知道,在机器学习中样本可以用不同的特征(如图片可以用LBP、SIFT等特征)来表示,或者从不同的角度进行观察(如从前后左右观察一个对象),甚至是采用不同的传感器来观测(如RGB摄像头,Depth摄像头),这些不同的观测手段、角度或特征在多视角学习中称为“视角”。多视角学习通过对不同的视角进行统一分析和研究,希望能够得到更好的分类或聚类等等的效果。

    CarpeDiem 3万+

    HttpServletRequest获取前端数据以及实现请求转发

    HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息; 1.获取前端传递的参数:getParameter String username = req.getParameter("username"); String password = req.getParameter("password"); String[] parameter

    weixin_44976835的博客 4974

    多智能体强化学习MATD3算法完整复现与分析

    多智能体强化学习MATD3算法复现与分析摘要 MATD3算法是多智能体深度强化学习领域的重要进展,通过改进MADDPG算法,引入双Q学习、延迟策略更新和目标策略平滑等技术,显著提升了算法稳定性。本文完整复现了MATD3算法,详细解析了其数学原理,包括部分可观测马尔可夫博弈模型和TD3核心思想。在实现层面,设计了集中式Critic和分布式Actor的神经网络架构,采用PyTorch框架构建了Actor-Critic网络模块,包含精心设计的权重初始化和训练流程。该算法有效解决了多智能体环境中的非平稳性、信用分配

    max500600的博客 529

    Plecs电力电子仿真专业教程-第一季 第一节 Plecs简介

    Plces 电力电子仿真专业教程系列依托专业的电力电子仿真软件Plecs对各种电力电子常用的拓扑及实际设计的方案进行系统及仿真与软件代码仿真实践。通过对各种电路仿真原理的讲解及专业C语言代码程序的编写,提升学员的系统设计能力,软件编程能力与理论分析能力。

    3641

    HttpServletRequest简介

    HttpServletRequest是什么?HttpServletRequest是什么?是一个接口,其父接口是;是Tomcat将请求报文转换封装而来的对象,在Tomcat调用service方法时传入;代表客户端发来的请求,请求中的所有信息都可以通过该对象获得;

    gege_0606的博客 2855

    Python图像处理之光斑分析

    光斑是工程中经常出现的图像数据,其特点是目标明确,分布清晰。对光斑图像的分析,主要包括质心定位、目标截取以及半径拟合等。

    微小冷的学习笔记 2857

    HttpServletRequest参数获取,HttpServletRequest详解

    --------------------------HttpServletRequest参数获取,HttpServletRequest详解--------------------------------- HttpServletRequest获取参数(重要) 1 HttpServletRequest获取参数方法 可以使用HttpServletRequest获取客户端的请求参数,相关方法如下:...

    李昆鹏的博客 19万+

    廖雪峰Python教程[完整版]

    廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

    jdk-8u144-linux-x64.tar.gz.

    该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

    ServletRequest 和 HttpServletRequest 接口详解

    ServletRequest 和 HttpServletRequest 接口的一些问题

    vV_Leon的博客 3901

    RU DOS版、EFI版32bit/64bit BIOS常用工具

    DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

    对HttpServletRequest中的Header进行增删

    这个 Controller 很简单,把客户端的所有 Header,以 JSON 形似响应给客户端。// 遍历所有请求Header,响应给客户端。} }// 遍历所有请求Header,响应给客户端。// 遍历所有请求Header,响应给客户端。} }// 遍历所有请求Header,响应给客户端。} }

    Json的博客 1772

    汉书HE8,好用的汇编代码编写工具

    汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

    HttpServletRequest类详解

    HttpServletRequest是扩展 javax.servlet.ServletRequest 中的一个接口,为 HTTP servlet 提供请求的相关信息。 servlet 容器创建 HttpServletRequest 对象,并将该对象作为参数传递给 servlet 的 service 方法(doGet、doPost,等等)。 方法 作用 参数 返回值 getAuthT...

    贪吃小明的博客 2475

    HttpServletRequest及HttpServletResponse

    MIME类型。

    plante34的博客 837

    HttpServletRequest和HttpServletResponse

    HttpServletRequest封装了HTTP请求信息,提供获取请求方法、路径、参数等常用方法。HttpServletResponse封装HTTP响应,需先设置响应头再写入内容,注意使用flush()而非close()来确保数据发送。这两个接口屏蔽了底层HTTP协议细节,开发者只需关注接口方法,无需关心具体实现类。Servlet设计初衷支持多种协议,但实际上仅用于HTTP处理,存在一定过度设计。

    qq_61370853的博客 984

    HttpServletRequest vs ServletContext 全面解析

    HttpServletRequest vs ServletContext 全面解析

    weixin_51288065的博客 1210

    HttpServletRequest 作用

    通过 `HttpServletRequest` 对象我们可以方便的获取到所有与客户端请求相关的信息,并根据这些信息来处理请求、生成响应。 它是 Servlet 与客户端之间沟通的桥梁。

    专注于技术分享 1021

    HttpServletRequest和HttpRequest的区别

    最近好多人问我这两个啥区别,没想到有这么多不清楚。所以在这里简要说明下,如果我们点进去HttpServletRequest这个进去,发现这是一个接口,而且源码如下: ```java public byte[] getBytes() { return StringCoding.encode(value, 0, value.length); } ...

    qq_25113803的博客 1万+

    HttpServletRequest类

    目录 1.HttpServletRequest类的作用 2.HttpServletRequest类的常用方法 3.获取请求参数 4.doGet 请求的中文乱码解决 5.doPost 请求的中文乱码解决 6.请求的转发 7.base 标签的作用 8.Web 中的相对路径和绝对路径 9.web 中 / 斜杠的不同意义 1.HttpServletRequest类的作用 每次只要有...

    LeeBlog 1231

    HttpServletRequest和HttpServletResponse接口

    一、两接口的实现类 HttpServletRequest与HttpServletResponse的对象request,response的实际的类型是RequestFacade和ResponseFacade。这两个类都是org.apache.catalina.connector包下面的。也就是我使用的web服务器tomcat的两个类。所以还是由web容器来负责实例化HttpServletReque...

    krismile__qh的博客 925

    【web】HttpServletResponse/HttpServletRequest

    HttpServletRequest代表客户端的请求,用户通过HTTP协议访问服务器,HTTP请求种的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获取客户端的所有信息。一个web资源收到客户端请求,他会通知客户端去访问另外一个web资源,这个过程叫重定向。8,使用OutputStream将缓冲区的数据输入到客户端。3,设置想办法让浏览器能够支持下载我们需要的东西。1,要获取下载文件的路径。4,获取下载文件的输入流。1,获取前端传递的参数。

    菜鸟的学习笔记 710
    上一篇: httpservletrequest
    下一篇: servlet3.1规范翻译:第13章 安全
    javaPie
    博客等级 码龄16年 1171粉丝 43原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值