当前位置: 首页 > article >正文

Request 原理

目录

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.kler.cn/a/322452.html

相关文章:

  • Git 分⽀规范 Git Flow 模型
  • webSocket的使用文档
  • Android 使用Retrofit 以纯二进制文件流上传文件
  • candence : 如何利用EXCEL 绘制复杂、多管脚元件
  • 《Spring 基础之 IoC 与 DI 入门指南》
  • vue项目使用eslint+prettier管理项目格式化
  • 的使用和内联函数
  • 【Spring Cloud】Spring Cloud 概述
  • 【计算机网络 - 基础问题】每日 3 题(十七)
  • 《JKTECH柔性振动盘:原理与多行业应用》东莞市江坤自动化科技有限公司
  • TOF系列—深度图滤波
  • 手搓一个Agent#Datawhale 组队学习Task3
  • Android常用C++特性之std::move
  • 【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 6 撤回通知消息
  • tomcat 文件上传 (CVE-2017-12615)
  • 计算机知识科普问答--21(101-105)
  • 【FE】NPM——概述
  • 13年408计算机考研-计算机网络
  • 动态规划算法:13.简单多状态 dp 问题_打家劫舍II_C++
  • 搜索软件 Everything 的安装与使用教程
  • Vue使用Vue Router路由:通过URL传递与获取参数
  • C语言-IO
  • 卷积神经网络-最优模型
  • SSH 安全实战:保护您的远程访问
  • 嵌入式的核心能力-Debug调试能力(一)