Request 原理

news2024/11/17 13:44:26

目录

request原理

Request继承体系

​编辑Request获取请求行数据方法介绍

1、获取请求行数据

2、获取请求头数据

3、获取请求体数据

4、其他功能

1、获取请求参数通用方式:

中文乱码问题:

2.请求转发

3.共享数据

4.获取servletcontext


request原理

1、tomcat服务器会根据请求url中资源路径,创建对应的seveletDemo1中的对象。

2、tomcat服务器,会自动创建response和request请求,request对象中封装请求消息数据。

3、tomcat将request和reponse两个对象传递给dervice方法,并调用service方法。

4、程序员(我们),可以通过request对象获取消息数据,通过response对象设置响应消息数据

5、服务器会在给浏览器做出响应之前,会给response对象中的程序员设置响应消息数据。

Request继承体系

Request获取请求行数据方法介绍

【Java寒假打卡】JavaWeb-Servlet基础_虚拟目录和servlet路径-CSDN博客  上述图片来源

1、获取请求行数据

​
        //获取请求方式get
        String method = request.getMethod();//alt+enter
        System.out.println(method);
        //获取虚拟目录
        String contextPath = request.getContextPath();
        System.out.println(contextPath);
        //获取Servlet路径
        String servletPath = request.getServletPath();
        System.out.println(servletPath);
        //获取get方式请求参数
        String queryString = request.getQueryString();
        System.out.println(queryString);
        //获取uri
        String requestURI = request.getRequestURI();
        StringBuffer requestURL = request.getRequestURL();
        System.out.println(requestURI);
        System.out.println(requestURL);
        //获取协议及版本
        String protocol = request.getProtocol();
        System.out.println(protocol);
        //获取客户机的ip地址
        String remoteAddr = request.getRemoteAddr();
        System.out.println(remoteAddr);

​

区别: URL: 长的一串  http://localhost/day14/demo1   相当于中华人民共和国

            URI:     短的一串 /day14/demo1                           相当于共和国

2、获取请求头数据

方法:

(*)String getHeader(String name): 通过请求头的名称获取请求头的值

Enumeration<String>  getHeaderNames():获取所有的请求头名称

关于浏览器输入的这一行代码是什么意思localhoat/day14/demo1,需要在idea中怎么配置才可以?

“localhost/day14/demo1” 是一个URL路径,通常表示在本地服务器上运行的一个Web应用程序的目录结构。在这个例子中,它指向的是位于 “day14” 文件夹下的 “demo1” 页面。

要在IntelliJ IDEA中配置这个URL访问,你需要做以下几个步骤:

  1. 设置项目服务器:

    • 如果你的项目已经配置了服务器,确保它是启用的并且目标是 “localhost”。
    • 如果没有,点击 “Run” 菜单,选择 “Edit Configurations…”,然后添加一个新的 “Tomcat Server” 或 “Jetty” 等支持的Web服务器配置,并指定端口(如8080)。
  2. 部署应用:

    • 将你的 “day14” 文件夹以及所有依赖文件复制到服务器的 “webapps” 目录下,如果IntelliJ自动识别了项目结构则无需手动操作。
  3. 启动服务器:

    • 点击 “Start” 按钮启动服务器,IDEA会尝试在指定的端口上部署并启动你的应用。
  4. 访问页面:

    • 打开浏览器,输入 “http://localhost:your_port/day14/demo1”,替换 “your_port” 为你刚才配置的服务器端口号,然后访问对应的页面。
  5. 配置路由 (可选):

    • 如果你的项目使用的是前后端分离框架,可能还需要在服务器或应用代码中设置路由规则,使得特定的URL能映射到 “demo1” 页面。

如果你遇到问题,记得检查IDEA是否正确识别了项目的根目录、服务器配置和实际的文件结构。

  //获取所有请求头名称
        Enumeration<String> headerNames = request.getHeaderNames();
        //遍历
        while(headerNames.hasMoreElements()){
            String name= headerNames.nextElement();
            //根据名称获取请求头的值
            String value= request.getHeader(name);
            System.out.println(name+"--"+value);
        }
//演示获取请求头数据 user-agent
      String agent=request.getHeader("user-agent");
      //判断agent的浏览器版本
        if(agent.contains("Chorme")){
            System.out.println("谷歌来了");
        }else if(agent.contains("Firefox")){
            System.out.println("火狐来了");
        }
 //演示获取请求头数据 referer
      String referer =request.getHeader("referer");
        System.out.println(referer);
     //防盗链操作
        if(referer!=null){
            if(referer.contains("/untitled4")){
                //正常访问
                System.out.println("播放电影。。");
            }else{
                System.out.println("想看电影吗,来优酷");
            }
        }

防盗链高阶版

 //防盗链操作
        if(referer!=null){
            if(referer.contains("/untitled4")){
                //正常访问
                response.setContentType("text/html;character=utf-8");
                response.getWriter().write("播放电影");
//                System.out.println("播放电影。。");
            }else{
                response.setContentType("text/html;character=utf-8");
                response.getWriter().write("想看电影吗,来优酷");
//                System.out.println("想看电影吗,来优酷");
            }
        }

3、获取请求体数据

请求体:只有post请求方式,才有请求体,在请求体中封装了post请求的请求参数

步骤:

        1、获取流对象

             *BufferedReader   getReader():获取字符输入流,只能操作字符数据

             *ServletInputStream   getInputStream():获取字节输入流,可以操作所有类型数据

                   *在文件上传知识点后讲解

        2、再从流对象中拿数据

//获取请求消息体--请求参数
        //1、获取字符流
        BufferedReader br = request.getReader();
        //2、读取数据
        String line=null;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }
    }

4、其他功能

1、获取请求参数通用方式:
public class RequestDemo5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   //post获取请求参数
        //根据参数名称获取参数值
        String username=request.getParameter("username");
        System.out.println("post");
        System.out.println(username);
    }
}

其他功能:

1.获取动求参数通用方式

1.string getParameter(string name):根据参数名称获取参数值username=zs&password=123

2. string[ ]getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game

3.Enumeration<String>getParameterNames():获取所有计求的参数名称4.Map<String,string[]>getParameterMap():获取所有参数的map集合

中文乱码问题:

get方式:tomcat8已经将get方式乱码问题解决了

post方式:会乱码

    *解决:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、设置流的编码
        request.setCharacterEncoding("utf-8");
        }
2.请求转发

1、概念:一种在服务器内部的资源跳转方式

servlet的作用:

servlet由servlet容器管理,servlet容器也叫 servlet引擎,是servlet的运行环境,给发送的请求和响应之上提供网络服务

步骤:

  ①通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)

②使用RequestDispatcher对象来进行转发:forward(ServletRequest request,ServletResponse response)

//转发到demo9资源
//        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/requestDemo9");
//        requestDispatcher.forward(request,response);
       request.getRequestDispatcher("/requestDemo9").forward(request,response);

2、特点

   1、浏览器地址栏路径不发生变化。

   2、只能转发到当前服务器内部资源中。

   3、转发是一次请求

3.共享数据

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

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

方法:

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

    2、Object getAttribute(String name):通过键获取值

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

4.获取servletcontext

ServletContext getServletContext()

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

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

相关文章

set和map结构的使用

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、算法 目录 一、序列式容器和关联式容器 二、set和multiset 1.insert 2.erase 3.find 4.count 三、map和mapmulti 1.pair 2.insert 3.find 4.operator[ ] 5.erase 6.lo…

QT-自定义信号和槽对象树图形化开发计算器

1. 自定义信号和槽 核心逻辑&#xff1a; 需要有两个类&#xff0c;一个提供信号&#xff0c;另一个提供槽。 然后在窗口中将 信号和槽 链接起来。 示例目标&#xff1a; 创建一个 Teacher 类&#xff0c;提供信号。 创建一个 Student 类&#xff0c;提供槽。 实现步骤&…

策略路由控制选路

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 一、 实验拓扑 二、 实验简述 三、 实验配置 配置路由信息 配置控制选路 四、 实验验证 ​ 一、 实验…

「安装」 Windows下安装CUDA和Pytorch

「安装」 Windows下安装CUDA和Pytorch 文章目录 「安装」 Windows下安装CUDA和PytorchMac、Linux、云端Windows安装CUDA安装miniconda安装PyTorch测试总结 其他 Mac、Linux、云端 Mac、Linux、云端安装Miniconda和Pytorch的方法参考其他资料。 Windows 下面进行Windows下安装…

CSS选择器的全面解析与实战应用

CSS选择器的全面解析与实战应用 一、基本选择器1.1 通配符选择器&#xff08;*&#xff09;2.标签选择器&#xff08;div&#xff09;1.3 类名选择器&#xff08;.class&#xff09;4. id选择器&#xff08;#id&#xff09; 二、 属性选择器&#xff08;attr&#xff09;三、伪…

转行大模型的必要性与未来前景:迎接智能时代的浪潮

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;特别是大型语言模型&#xff08;LLM, Large Language Models&#xff09;的崛起&#xff0c;各行各业正迎来一场前所未有的技术革命。对于普通程序员而言&#xff0c;转行进入大模型领域不仅是对个人职业发展…

通配符与Powershell

通配符与正则表达式 通配符 通配符是一种特殊的语句&#xff0c;主要有*、?和[]&#xff0c;用来模糊搜索文件。 通配符表达意思举例说明*星号、匹配任何字符*.cpp匹配.cpp文件?问号、匹配任意一个字符*.?d匹配具有特定格式的文件[]中括号、匹配括号中的一个字符.[a-z]d代…

DC00020基于springboot新闻网站系统java web项目MySQL新闻管理系统

1、项目功能演示 DC00020基于springboot新闻网站系统java web项目MySQL 2、项目功能描述 基于springbootvue新闻网站包括用户和系统管理员两个角色。 2.1 用户功能 1、用户登录、用户注册 2、新闻信息&#xff1a;点赞、点踩、收藏、查看 3、用户分享&#xff1a;点赞、点踩…

分库分表还是分布式?如何用 OceanBase的单机分布式一体化从根本上解决问题

随着企业业务规模的不断增长&#xff0c;单机集中式的数据库系统逐渐难以承载企业日益增长的数据存储与处理需求。因此&#xff0c;MySQL 的分库分表方案成为了众多企业应对数据存储量激增及数据处理能力需求扩张的“止痛药”。尽管这一方案短期内有效缓解了企业面临的大规模数…

封装左侧抽屉可拖拽组件【可多个】

一、案例效果 二、案例代码 封装抽屉组件 <template><div class"drag-drawer"><div class"out-box" :style"style"><mtd-tooltip:content"collapse ? 展开面板 : 收起面板"class"tool-tip":placeme…

828华为云征文|部署敏捷项目管理系统工具 ZenTao

828华为云征文&#xff5c;部署敏捷项目管理系统工具 ZenTao 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 ZenTao3.1 ZenTao 介绍3.2 ZenTao 部署3.3 ZenTao 使用 四、总…

云 安 全 (Cloud Security)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

robomimic基础教程(四)——开源数据集

robomimic开源了大量数据集及仿真环境&#xff0c;数据集标准格式为HDF5 目录 一、基础要求 二、使用步骤 1. 下载数据集 2. 后处理 3. 训练 4. 查看训练结果 三、HDF5数据集结构与可视化 1. 数据集结构 &#xff08;1&#xff09;根级别&#xff08;data 组 group&a…

overlayscrollbars使用

官网 https://github.com/KingSora/OverlayScrollbars 使用 <link href"https://cdn.bootcdn.net/ajax/libs/overlayscrollbars/2.10.0/styles/overlayscrollbars.css" rel"stylesheet"> <script src"https://cdn.bootcdn.net/ajax/libs/…

AP配置(leaderAP组网模式)

1.前言 由于业务需求&#xff0c;临时组建一个网络环境使用 网络设备&#xff1a;华为 AirEngine 5762-10、5762S-12 2.网络结构 参考文档&#xff0c;使用leader ap组网模式 使用一台5862S-12作为leaderAP&#xff0c;AP通电后默认是fit模式&#xff0c;需要进入修改 如果…

HA Peer-mode非对称路由配置

目录 前言 一、组网拓扑 二、配置步骤 1.Hillstone-A 2.Hillstone-B 总结 前言 网络环境有非对称流量且需要双活部署时&#xff0c;防火墙可配置HA的peer-mode非对称路由模式进行实现。 一、组网拓扑 数据流量的路径是非对称的&#xff08;即 Flow0和Flow1是两条不同流量…

线性代数~行列式计算

来自b站博主&#xff0c;我爱一高数

【系统交付资料】软件文档交付清单整理套用原件(Word,PPT,Excel)

软件文档交付清单是指在软件开发项目完成后&#xff0c;开发团队需要准备的一份详细清单&#xff0c;用于确保交付的软件产品符合客户需求并达到预期的质量标准。以下是软件文档交付清单中可能包含的一些关键要素 软件资料清单列表部分文档清单&#xff1a;工作安排任务书&…

音视频入门基础:FLV专题(7)——Tag header简介

一、引言 从《音视频入门基础&#xff1a;FLV专题&#xff08;3&#xff09;——FLV header简介》中可以知道&#xff0c; 在FLV header之后&#xff0c;FLV文件剩下的部分应由PreviousTagSize和Tag组成。FLV文件 FLV header PreviousTagSize0 Tag1 PreviousTagSize1 Ta…

顺序表算法题 —— 移除元素、删除有序数组中的重复项、合并两个有序数组

目录 一、顺序表算法题 1、移除元素 2、删除有序数组中的重复项 3、 合并两个有序数组 二、顺序表问题与思考 一、顺序表算法题 1、移除元素 移除元素 - 力扣&#xff08;LeetCode&#xff09; 思路分析&#xff1a; 思路一&#xff1a;创建一个新数组&#xff0c;开辟…