一、HttpServletRequest介绍

  HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

二、Request常用方法

2.1、获得客户机信息

  getRequestURL方法返回客户端发出请求时的完整URL。 
  getRequestURI方法返回请求行中的资源名部分。 
  getQueryString 方法返回请求行中的参数部分。 
  getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。 
  getRemoteAddr方法返回发出请求的客户机的IP地址。 
  getRemoteHost方法返回发出请求的客户机的完整主机名。 
  getRemotePort方法返回客户机所使用的网络端口号。 
  getLocalAddr方法返回WEB服务器的IP地址。 
  getLocalName方法返回WEB服务器的主机名。

2.2、获得客户机请求头

  getHeader(string name)方法:String 
  getHeaders(String name)方法:Enumeration 
  getHeaderNames()方法

2.3、获得客户机请求参数(客户端提交的数据)

getParameter(String)方法(常用) 
getParameterValues(String name)方法(常用) 
getParameterNames()方法(不常用) 
getParameterMap()方法(编写框架时常用)

3.6、提交中文数据乱码问题总结

  1、如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端以哪种编码提交的,服务器端的request对象就以对应的编码接收,比如客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding(“UTF-8”))

  2、如果提交方式为get,设置request对象的编码是无效的,request对象还是以默认的ISO8859-1编码接收数据,因此要想不乱码,只能在接收到数据后再手工转换,步骤如下:

  1).获取获取客户端提交上来的数据,得到的是乱码字符串,data=”???è?????”

   String data = request.getParameter(“paramName”);

  2).查找ISO8859-1码表,得到客户机提交的原始数据的字节数组

   byte[] source = data.getBytes(“ISO8859-1”);

  3).通过字节数组以指定的编码构建字符串,解决乱码

   data = new String(source, “UTF-8”);

  通过字节数组以指定的编码构建字符串,这里指定的编码是根据客户端那边提交数据时使用的字符编码来定的,如果是GB2312,那么就设置成data = new String(source, “GB2312”),如果是UTF-8,那么就设置成data = new String(source, “UTF-8”)

四、Request对象实现请求转发

4.1、请求转发的基本概念

  请求转发:指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。 
  请求转发的应用场景:MVC设计模式

  在Servlet中实现请求转发的两种方式:

  1、通过ServletContext的getRequestDispatcher(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。

例如:将请求转发的test.jsp页面

1 RequestDispatcher reqDispatcher =this.getServletContext().getRequestDispatcher(“/test.jsp”);
2 reqDispatcher.forward(request, response); 
  2、通过request对象提供的getRequestDispatche(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。

例如:将请求转发的test.jsp页面

1 request.getRequestDispatcher(“/test.jsp”).forward(request, response); 
  request对象同时也是一个域对象(Map容器),开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。

 request对象作为一个域对象(Map容器)使用时,主要是通过以下的四个方法来操作

setAttribute(String name,Object o)方法,将数据作为request对象的一个属性存放到request对象中,例如:request.setAttribute(“data”, data); 
getAttribute(String name)方法,获取request对象的name属性的属性值,例如:request.getAttribute(“data”) 
removeAttribute(String name)方法,移除request对象的name属性,例如:request.removeAttribute(“data”) 
getAttributeNames方法,获取request对象的所有属性名,返回的是一个,例如:Enumeration attrNames = request.getAttributeNames(); 
4.2、请求重定向和请求转发的区别

  一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发/307。 
  一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源进行处理,称之为请求重定向/302。

Request常用方法的更多相关文章

  1. request常用方法小结

    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息. req ...

  2. HttpServletRequest、request常用方法、request常见应用、请求转发、RequestDispatcher

        HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息. ...

  3. Request常用方法 (总结)

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  4. servlet(1)request常用方法

    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息. req ...

  5. Request常用方法(转)

    原文地址:http://www.lihuai.net/program/python/1617.html Python Requests库:HTTP for Humans 时间: 2014/12/30 ...

  6. Laravel $request 常用方法

    request的方法 描述 input('key','default-value') 此方法可以获取get请求所带来的特定参数的值,如果没有该参数可以提供默认值 all() 此方法获取get请求的所有 ...

  7. request常用方法servlet初步

    1 package com.ycw.newservlet; 2 3 import java.io.IOException; 4 import javax.servlet.ServletExceptio ...

  8. JSP内置对象及常用方法

    jsp九大内置对象及四个作用域: 何为作用域 先让我们看看效果: 大概流程是这样的,我们访问index.jsp的时候,分别对pageContext, request, session,applicat ...

  9. 初识 Asp.Net内置对象之Request对象

    Request对象 Request对象用于检索从浏览器向服务器所发送的请求信息.它提供对当前页请求的访问,包括标题,Cookie,客户端证书等等.它也与HTTP协议的请求消息对应. Request对象 ...

随机推荐

  1. php漏洞tips

    1.php后缀限制 'php,php3,php4,php5,php6,php7,phpsh,inc,phtml','PHT'; 2.php木马 <?php echo shell_exec($_G ...

  2. 【我要学python】愣头青之小数点精度控制

    写在最前面:今天遇到了棘手的问题,看了两遍才看懂,本文属于转载+修改,原出处是Herbert's Blog 基础 浮点数是用机器上浮点数的本机双精度(64 bit)表示的.提供大约17位的精度和范围从 ...

  3. SCU - 4439 Vertex Cover (图的最小点覆盖集)

    Vertex Cover frog has a graph with \(n\) vertices \(v(1), v(2), \dots, v(n)\) and \(m\) edges \((v(a ...

  4. ansible用playbook实现定期监控各机器磁盘和进程状态

    目标:用ansible定期监控各机器的磁盘空间状况 和进程运行状况 1)配置playbook脚本,实现对磁盘空间 和 特定进程运行状态的每日检查: 2)通过邮件插件,把检测结果发到ops邮箱: 一.p ...

  5. [BZOJ 1901] Dynamic Rankings

    Link: BZOJ 1901 传送门 Solution: 带修改主席树的模板题 对于静态区间第$k$大直接上主席树就行了 但加上修改后会发现修改时复杂度不满足要求了: 去掉/增加第$i$位上的值时要 ...

  6. [Codeforces-div.1 494C] Helping People

    [Codeforces-div.1 494C] Helping People 试题分析 不难注意到题目所给的性质是一棵树,所以肯定是树形dp. 那么期望没有办法合并,我们还有一种最笨的方法就是求出概率 ...

  7. 【Splay】【启发式合并】hdu6133 Army Formations

    题意:给你一颗树,每个结点的儿子数不超过2.每个结点有一个权值,一个结点的代价被定义为将其子树中所有结点的权值放入数组排序后,每个权值乘以其下标的和.让你计算所有结点的代价. 二叉树的条件没有用到. ...

  8. [LOJ500]ZQC的拼图

    题目大意: 给你一个m*m的格子,让你往里面放给定的直角三角形,直角顶点必须放在右上角且不能翻转,但是可以把所有给定的三角形放大一个整数倍k,问至少放大几倍能使格子的左下角和右上角连起来?(可以超出边 ...

  9. Java并发(一):多线程干货总结

    一.进程 线程 进程:一个进程来对应一个程序, 每个进程对应一定的内存地址空间,并且只能使用它自己的内存空间,各个进程间互不干扰. 进程保存了程序每个时刻的运行状态,这样就为进程切换提供了可能.当进程 ...

  10. GNU Debugger for Windows----GDB

            This web page provides 32-bit and 64-bit binaries of gdb for Windows for download. Equation ...