一、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. 国庆前执行更新承诺SO交期 FP_SO2SAP

    每年9月20日到30号执行以下程序:创建日期为昨天的订单,且承诺交期为10月1到3号,则承诺交期需加7天:创建日期为昨天的订单, 承诺交期为4号到11月1日,承诺交期需加4天 存储过程:FP_SO2S ...

  2. 代码查看import的类是出自哪个jar包的方法(转)

    import java.security.ProtectionDomain; import java.security.CodeSource; public static void main(Stri ...

  3. Luogu 3537 [POI2012]SZA-Cloakroom

    背包. 首先考虑将所有询问离线按照$m$从小到大排序,然后把所有物品按照$a$从小到大排序,对于每一个询问不断加入物品. 设$f_i$表示在组成容量为$i$的背包的所有方案中$b$最小的一个物品的最大 ...

  4. Entity Framework 6.0 Tutorials(11):Download Sample Project

    Download Sample Project: Download a sample project for Entity Framework 6 Database-First model below ...

  5. hdu4643 GSM

    #include<stdio.h> #include<math.h> #define Max 55 #define eps 1e-8 int n,m; struct Point ...

  6. Controlling Session Behavior in Asp.Net MVC4

    Posted By : Shailendra Chauhan, 06 Jan 2013 Updated On : 11 Jun 2014 By default, Asp.Net MVC support ...

  7. (转)XSS危害——session劫持

    原文地址:http://www.cnblogs.com/dolphinX/p/3403027.html 在跨站脚本攻击XSS中简单介绍了XSS的原理及一个利用XSS盗取存在cookie中用户名和密码的 ...

  8. MVC上的jsonp扩展,解决跨域访问问题

    总是有人会遇到跨域问题,然后有个jsonp的解决方案,MVC中代码如下: public class JsonpResult : System.Web.Mvc.JsonResult { object d ...

  9. docker 镜像创建

    dockerfile FROM microsoft/aspnetcore:2.0 ARG source WORKDIR /app EXPOSE COPY ${source:-/} . ENTRYPOI ...

  10. 「BZOJ 5188」「Usaco2018 Jan」MooTube

    题目链接 luogu bzoj \(Describe\) 有一个\(n\)个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你\(Q\)个询问,问你与点\(v\)的距离大于等 ...