Request对象-获取请求消息

Request

  • 概述:Request 和 Response 对象都是由 Web 服务器(Tomcat)创建的,我们来使用它们,Request 对象是用来 获取请求消息 的,Response 对象是用来 设置响应消息

  • Request 对象的原理

  • Request 对象的继承体系结构

Request 常用的功能

获取请求行数据
  • 请求行

    • 格式:请求方式 请求URL 请求协议/版本号
    • 例子:GET /heng/demo?name=zs HTTP/1.1
  • 统一资源

    • URL:统一资源定位符
      • 示例:http://localhost/heng/demo
    • URI:统一资源标识符
      • 示例:/heng/demo
  • 方法

    方法作用
    String getMethod()获取请求方式 :GET
    String getContextPath()获取虚拟目录(项目名称):/heng
    String getServletPath()获取Servlet路径: /demo
    String getQueryString()获取get方式请求参数:name=zs
    String getProtocol()获取协议及版本:HTTP/1.1
    String getRemoteAddr()获取客户机的IP地址:
    String getRequestURI()获取请求URI:/heng/demo
    StringBuffer getRequestURL()http://localhost/heng/demo
  • 示例代码

    @WebServlet("/line")
    public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求方式String method = req.getMethod();// 获取虚拟目录,项目名称String contextPath = req.getContextPath();// 获取Servlet路径String servletPath = req.getServletPath();// 获取协议及版本String protocol = req.getProtocol();// 获取客户机的 IP 地址String remoteAddr = req.getRemoteAddr();// 获取请求 URIString requestURI = req.getRequestURI();// 获取请求 URLStringBuffer requestURL = req.getRequestURL();String s = method + " " +contextPath + " " +servletPath + " " +protocol + " " +remoteAddr + " " +requestURI + " " +requestURL;// 显示到页面上resp.getWriter().write(s);}
    }
    
获取请求头数据
  • 方法

    方法作用
    String getHeader(String name)通过请求头的名称获取请求头的值
    Enumeration getHeaderNames():获取所有的请求头名称
  • 示例代码

    @WebServlet("/header")
    public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");// 根据请求头名称获取其值String agent = req.getHeader("user-agent");String s = "";//判断是何种浏览器if(agent.contains("Chrome")){s += "Chrome" + "<br>";}else if(agent.contains("Firefox")){s += "Firefox" + "<br>";}else if(agent.contains("IE")){s += "IE" + "<br>";}// 获取所有请求头名称Enumeration<String> headerNames = req.getHeaderNames();while(headerNames.hasMoreElements()){s += headerNames.nextElement() + "<br>";}// 输出到页面resp.getWriter().write(s);}
    }
    
    // 防盗链模板
    public class MyServlet extends Servlet{protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String referer = request.getHeader("Referer");if (referer == null || !referer.contains("yourwebsite.com")) {response.sendError(HttpServletResponse.SC_FORBIDDEN, "Forbidden");} else {// 返回图片的逻辑// 例如,将图片写入响应流// response.setContentType("image/jpeg");// 将图片写入响应流}}
    }
    
获取请求体数据
  • 请求体:只有 POST 请求方式,才有请求体,在请求体中封装了 POST 请求的请求参数

  • 使用步骤:

    • 获取流对象
    • 再从流对象中拿取数据
  • 方法

    方法作用
    BufferedReader getReader()获取字符输入流,只能操作字符数据
    ServletInputStream getInputStream()获取字节输入流,可以操作所有类型数据
获取请求参数
  • 获取请求参数(请求体中)通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数

  • 方法

    方法作用
    String getParameter(String name)根据参数名称获取参数值
    String[] getParameterValues(String name)根据参数名称获取参数值的数组
    Enumeration getParameterNames()获取所有请求的参数名称
    Map<String,String[]> getParameterMap()获取所有参数的map集合
  • 示例代码

    //获取所有请求参数
    Map<String, String[]> map = request.getParameterMap();
    //创建 JavaBean 类
    User loginUser = new User();
    //使用 BeanUtils
    try {BeanUtils.populate(loginUser,map);
    } catch (IllegalAccessException e) {e.printStackTrace();
    } catch (InvocationTargetException e) {e.printStackTrace();
    }
    

请求转发

  • 概述:一种在服务器内部的资源跳转方式

  • 特点:

    • 浏览器地址栏路径不发生变化
    • 只能转发到当前服务器内部资源中
    • 转发是一次请求
  • 示例图

  • 步骤

    • 通过 request 对象获取请求转发器对象
    • 使用 RequestDispatcher 对象来进行转发
  • 方法

    方法作用
    RequestDispatcher getRequestDispatcher(String path)通过 request 对象获取请求转发器对象,path 是你想要转发到的 Servlet 的路径
    forward(ServletRequest request, ServletResponse response)通过 RequestDispatcher 对象进行转发
  • 示例代码

    /*** 本 Servlet 用来 转发请求*/
    @WebServlet("/test1")
    public class ServletTest1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置需要传递的数据String data = "Hello from ServletTest1";// 存储数据到 request 域中req.setAttribute("data",data);// 转发请求req.getRequestDispatcher("/test2").forward(req,resp);}
    }
    /*** 本 Servlet 用于接收请求并处理*/
    @WebServlet("/test2")
    public class ServletTest2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取转发的数据String data = (String) req.getAttribute("data");// 处理数据resp.getWriter().write("Data from ServletTest1" + data);}
    }

    注意:可以看到当访问,test1 时候,会将资源跳转到 test2 中,路径不变,但是资源发送过去了

共享数据

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

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

  • 方法

    方法作用
    void setAttribute(String name,Object obj)存储数据
    Object getAttitude(String name)通过键获取值
    void removeAttribute(String name)通过键移除键值对
    ServletContext getServletContext()获取 ServletContext

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

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

相关文章

IS-IS的LSP分片扩展

原理 IS-IS通过泛洪LSP来宣告链路状态信息,由于一个LSP能够承载的信息量有限,IS-IS将对LSP进行分片。每个LSP分片由产生该LSP的结点或伪结点的SystemID、PseudnodeID(普通LSP中该值为0,Pseudonode LSP中该值为非0)、LSPNumber(LSP分片号)组合起来唯一标识,由于LSPNumb…

【大数据安全】数据管理安全安全分析隐私保护

目录 一、数据管理安全 &#xff08;一&#xff09;数据溯源 &#xff08;二&#xff09;数字水印 &#xff08;三&#xff09;策略管理 &#xff08;四&#xff09;完整性保护 &#xff08;五&#xff09;数据脱敏 二、安全分析 &#xff08;一&#xff09;大数据安全…

【昕宝爸爸小模块】日志系列之什么是分布式日志系统

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

【Linux】环境基础开发工具的使用(一)

前言&#xff1a;在此之前我们学习了一些Linux的权限&#xff0c;今天我们进一步学习Linux下开发工具的使用。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的深度刨析 &#x1f448; &#x1f4af;代码仓库:卫卫周大胖的学习日记…

关于谷歌新版调试用具(Chrome Dev Tool ),网络选项(chrome-network)默认开启下拉模式的设置

今天在使用谷歌浏览器进行调试的时候&#xff0c;打开调试工具网络选项发现过滤不同模式的选项卡不见了&#xff0c;转而变成一个下拉式选项&#xff0c;如下图 这样一来使得切换不同类型查看的时候变得非常不方便&#xff0c;然后网上查了一下发现这个功能谷歌在很早版本就已…

前后端项目

文章目录 1.需求2.项目搭建2.1项目结构图2.2构建聚合工程2.2.1 zx-parent父工程2.2.2 zx-framework父工程2.2.2.1 zx-common工程2.2.2.2 zx-mybatisplus工程2.2.3 如上,同理创建其他父子工程2.3准备sql3.用户登录3.1 修改pom-依赖其他Module3.2 封装User1.需求 在线学习平台 …

笔记本电脑Win11重装系统教程

在笔记本电脑Win11操作过程中&#xff0c;用户如果遇到很严重的系统问题&#xff0c;就可以重新正常的Win11系统&#xff0c;快速解决Win11系统问题。但是&#xff0c;部分新手用户不知道不知道如何操作才能给Win11笔记本电脑重装系统&#xff1f;以下小编分享笔记本电脑Win11重…

LaTeX教程(003)-LaTeX文档结构(03)

LaTeX教程(003)- LaTeX \LaTeX LATE​X文档结构(03) 2.2 章节划分命令 在前面的内容中&#xff0c;我们讨论了文档的最顶层的区块划分&#xff0c;即front matter、main matter和back matter。这一节中&#xff0c;我们讨论如何在这些区块内部&#xff0c;使用章节划分命令对…

《Pandas 简易速速上手小册》第6章:Pandas 时间序列分析(2024 最新版)

文章目录 6.1 时间序列数据基础6.1.1 基础知识6.1.2 重点案例&#xff1a;股票市场分析6.1.3 拓展案例一&#xff1a;温度变化分析6.1.4 拓展案例二&#xff1a;电商平台日销售额分析 6.2 日期与时间功能6.2.1 基础知识6.2.2 重点案例&#xff1a;活动日志分析6.2.3 拓展案例一…

Nodejs基于Vue.js的网上团购系统86593

该系统将采用B/S结构模式&#xff0c;使用Vue和ElementUI框架搭建前端页面&#xff0c;后端使用Nodejs来搭建服务器&#xff0c;并使用MySQL&#xff0c;通过axios完成前后端的交互 运行软件:vscode 前端nodejsvueElementUi 语言 node.js 框架&#xff1a;Express/koa 前端:V…

JVM性能分析工具——Arthas及火焰图的使用

Arthas的使用 Arthas常用命令Arthas的安装Linux压测工具Apache Bench安装火焰图的使用火焰图如何分析火焰图的互动 Arthas常用命令 help &#xff1a;查看所有命令dashboard &#xff1a;仪表板&#xff0c;查看线程的CPU信息等heapdump &#xff1a;不同类对象占用内存比重&a…

MySQL数据库基础第三篇(约束)

文章目录 一、约束概述二、约束演示1.演示代码2.读出结果 三、外键约束1.创建外键2.删除更新外键 作为软件工程师和数据库管理员&#xff0c;我们经常需要操作和管理数据库。对于数据库中的信息完整性和准确性的确保&#xff0c;以及对数据质量的提升&#xff0c;数据库中的约束…

2023年09月CCF-GESP编程能力等级认证Python编程二级真题解析

一、单选题(共15题,共30分) 第1题 我国第一台大型通用电子计算机使用的逻辑部件是 ( )。 A:集成电路 B:大规模集成电路 C:晶体管 D:电子管 答案:D 第2题 下列流程图的输出结果是( )? A:5 12 B:12 5 C:5 5 D:12 12 答案:B 第3题 如果要找出整数 a …

【分布式技术专题】Guava RateLimiter 针对于限流器的入门到实战(含源码分析介绍)

Guava RateLimiter 针对于限流器的入门到实战 限流器的思路和算法漏桶算法令牌算法 RateLimiter限流器RateLimiter的作用create方法acquire方法tryAcquire方法 详细分析参数抛出异常参数抛出异常实践案例第1次获取10个令牌第2次获取1个令牌第3次获取10个令牌 资料参考 限流器的…

maven: 使用profiles进行多环境配置

文章目录 一、背景二、如何配置 一、背景 在项目开发的过程中会用到多个环境比如&#xff1a;本地环境&#xff08;开发自测&#xff09;、开发环境&#xff08;环境部署自测&#xff09;、生产环境等&#xff0c;由于不同的环境需要不同的配置信息&#xff0c;为了便于开发使…

opencv——将2张图片合并

效果演示: 带有绿幕的图片的狮子提取出来,放到另一种风景图片里! 1. 首先我们要先口出绿色绿幕,比如: 这里将绿色绿色绿幕先转为HSV,通过修改颜色的明暗度,抠出狮子的轮廓。 代码 : import cv2 as cv import numpy as np import matplotlib.pyplot as plt def showI…

spring-boot-admin的介绍和使用

概述 Spring Boot 有一个非常好用的监控和管理的源软件&#xff0c;这个软件就是 Spring Boot Admin。该软件能够将 Actuator 中的信息进行界面化的展示&#xff0c;也可以监控所有 Spring Boot 应用的健康状况&#xff0c;提供实时警报功能。 主要的功能点有&#xff1a; 显…

tcpdump 抓包无法落盘

文章目录 问题背景解决办法 问题背景 在嵌入式设备中(Linux系统)&#xff0c;为了分析两个网络节点的通讯问题&#xff0c;往往需要用到tcpdump&#xff0c;抓一个.pcap的包在PC端进行分析。博主在实际操作中发现&#xff0c;抓包无法实时落盘。 解决办法 # 下面的命令是写在…

面试八股文(2)

文章目录 1.ArrayList和LinkedList区别2.HashMap和HashTable区别3.线程的创建方式4.Java中异常处理5.Java序列化中某些字段不想进行序列化&#xff1f;6.Java序列化7.静态方法和实例方法8.List、Set、Map三者区别9.ArrayList和Vector区别10.HashMap和HashSet区别 1.ArrayList和…

还在用findViewById,不来了解下其它方式?

众所周知&#xff0c;都2225年了&#xff0c;如果你还在用Java敲安卓代码&#xff0c;findViewById已经是一种非常繁琐的操作&#xff0c;如果要去获取的id数量多&#xff0c;则对开发更加不友好。如果一个页面id过多&#xff0c;经常会有如下场景&#xff1a; TextView title…