一、request概述

  request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据

  通过抓包工具抓取Http请求

  因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求行,请求头和请求体。

二、request的功能

2.1 获取请求行信息

  • request.getMethod():获取请求方式

  • request.getRemoteAddr():获取客户端IP

  • String getContextPath():获取项目名

  • String getQueryString():获取参数部分(username=xxx&password=yyy),post请求获得的是null

  • String getRequestURL():获取请求URL,等于不包含参数的整个请求路径(http://localhost:8080/day10_2/AServlet)

  • String getRequestURI():获取请求URI,等于项目名+Servlet路径(/day10_2/AServlet)

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获得请求方式
    String method = request.getMethod();
    System.out.println("method:" + method);
    // 获得请求的资源相关的内容
    String requestURI = request.getRequestURI();
    StringBuffer requestURL = request.getRequestURL();
    System.out.println("uri:" + requestURI); //uri:/Day04/line
    System.out.println("url:" + requestURL); //url:http://localhost:8080/Day04/line
    // 获得web应用的名称
    String contextPath = request.getContextPath(); //web应用:/Day04
    System.out.println("web应用:" + contextPath);
    // 地址后的参数的字符串
    String queryString = request.getQueryString(); //username=zhangsan&password=123
    System.out.println(queryString);
    // 获得客户机的信息——获得访问者IP地址
    String remoteAddr = request.getRemoteAddr();
    System.out.println("IP:" + remoteAddr); //IP:0:0:0:0:0:0:0:1
    }

2.2 获取请求头信息

  • String getHeader(String name):获取指定名称的请求头

    request.getHeader("referer") -->可用于防盗链

  • Enumeration getHeaderNames():获取所有请求头名称

2.3 获取请求体信息

【客户端传递参数的方式】

  • 浏览器地址栏直接输入:一定是GET请求;
  • 超链接:一定是GET请求;
  • 表单:可以是GET,也可以是POST,这取决与<form>的method属性值;

【GET请求和POST请求的区别】

  GET请求:

    • 请求参数会在浏览器的地址栏中显示,所以不安全;
    • 请求参数长度限制长度在1K之内;
    • GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;

  POST请求:

    • 请求参数不会显示浏览器的地址栏,相对安全;
    • 请求参数长度没有限制;

【常用API】

  • String getParameter(String name):获取指定名称的请求参数值,适用于单值请求参数

  • String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数

  • Enumeration<String> getParameterNames():获取所有请求参数名称

  • Map<String,String[]> getParameterMap():获取所有请求参数,其中key为参数名,value为参数值

【解决中文乱码】

  • post请求:

    request.setCharacterEncoding(“UTF-8”);
  • get请求:

    String name = request.getParameter(“name”)
    name = new String(name.getBytes(“iso-8859-1”), “utf-8”)

2.4 其他功能

【request是一个域对象】(作用范围:一次请求中)

  • void setAttribute(String name, Object value):用来存储一个对象
  • Object getAttribute(String name):用来获取request中的数据
  • void removeAttribute(String name):用来移除request中的域属性
  • Enumeration getAttributeNames():获取所有域属性的名称

【request完成请求转发】

  • 获得请求转发器:RequestDispatcher rd = request.getRequestDispatcher(String path);——path是转发的地址
  • 通过转发器对象转发:rd.forward(request,response)

    请求转发和重定向的区别:

       *请求转发是一个请求一次响应,而重定向是两次请求两次响应

       *转发地址栏不变化,而重定向显示后一个请求的地址

       *转发只能转发到本项目其它servlet,而重定向不只能重定向到本项目的其它servlet,还能定向到其它项目

       *转发是服务器端行为,只需给出转发的servlet路径,而重定向要给出request URI,即包含项目名

       *转发的效率高,因为是一个请求

JavaWeb学习笔记(五)—— request的更多相关文章

  1. JavaWeb学习笔记四 request&response

    HttpServletResponse 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应res ...

  2. JavaWeb学习笔记五 会话技术Cookie&Session

    什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ...

  3. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  4. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  5. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  6. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  7. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  8. Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  9. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  10. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

随机推荐

  1. Scala介绍

    强大的编程语言 Scala 是一门非常强大的语言,它允许用户使用命令和函数范式进行编写代码,因此,编程时你可以使用常用的命令式语句,就像我们使用 C.Java.PHP 以及很多其他语言一样,而且,你也 ...

  2. Dubbo+zookeeper应用的入门案例

    前提:Linux安装zookeeper  Dubbo管理中心部署 简单案例的项目结构: 1,demo_parent的pom.xml,用来统一管理依赖 <?xml version="1. ...

  3. 并发之AtomicIntegerArray

    5 并发之AtomicIntegerArray     该类是Java对Integer数组支持的原子性操作:在认识这个类之前我们先来看一个方法,这个方法是Integer类中的:  public sta ...

  4. mongo 修改器 $inc/$set/$unset/$pop/$push/$pull/$addToSet

    mongo $inc 可以对集合里面的某些值是数字的增减.看代码 $set  可以进行修改,并且不存在的时候默认添加. 同时还能该变数据的类型. 还可以该变内嵌元素的值 用.调用 $unset  删除 ...

  5. 459. Repeated Substring Pattern 判断数组是否由重复单元构成

    [抄题]: Given a non-empty string check if it can be constructed by taking a substring of it and append ...

  6. Docker学习笔记_安装ActiveMQ

    一.实验环境 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu18.04,虚拟机名称:Ubuntu18VM1,虚拟机IP:192.168.8.25 3.操作账号 :Docker 4.在 ...

  7. QT编译时出现警告 Warning: Class Node implements the interface QGraphicsItem but does not list it in Q_INTERFACES. qobject_cast to QGraphicsItem will not work!

    1.一定要将public QObject放在public QGraphicsItem的前面,并且在该类的定义中添加Q_OBJECT宏. class XXGraphicsItem : public QO ...

  8. Android 单例模式探讨

    Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图).但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,Singleton模式可以相当的复杂,比头五 ...

  9. WCF把书读薄(3)——数据契约、消息契约与错误契约

    上一篇:WCF把书读薄(2)——消息交换.服务实例.会话与并发 十二.数据契约 在实际应用当中数据不可能仅仅是以int Add(int num1, int num2)这种简单的几个int的方式进行传输 ...

  10. ASP.NET MVC5 Authentication Filters执行链

    注意区分认证和授权: The following  are the differences in short: Authentication(认证): It is a process of verif ...