1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时。HTTP请求头中的全部信息都封装在这个对象中。我们通过request对象调用里面的方法,能够获得客户发送给webserver的各种信息。

2.request的经常用法

(1)获得客户机信息

    getRequestURL方法返回client发出请求时的完整URL。(

                               比如:url:http://localhost:8080/Summer_Exercise6/Demo1)

    getRequestURI方法返回请求行中的资源名部分。

                              比如:uri:/Summer_Exercise6/Demo1)

    getQueryString 方法返回请求行中的參数部分。地址栏中?后面的參数(

                               比如:query:name=wwh&age=12)

    getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于      Servlet的路径之后和查询參数之前的内容,它以“/”开头。

    getRemoteAddr方法返回发出请求的客户机的IP地址。

    getRemoteHost方法返回发出请求的客户机的完整主机名。

getRemotePort方法返回客户机所使用的网络port号。

     getLocalAddr方法返回WEBserver的IP地址。

(127.0.0.1)

     getLocalName方法返回WEBserver的主机名。(虚拟主机名:www.wenhao.com)

(2)获得客户机请求头

     getHeader(string name)方法:String 

     getHeaders(String name)方法:Enumeration 

     getHeaderNames()方法 

(3)获得客户机请求參数(client提交的数据) 

     getParameter(String)方法

     getParameterValues(String name)方法

     getParameterNames方法+BeanUtils框架

3.request的常见应用

(1)防盗链(下载文件,必须从指定站点进入,否则不同意下载文件。判段某个页面来自于何方,即referer请求头)

(2)各种表单输入项数据的获取

text、password、radio、checkbox、

file、select、textarea、 hidden、

(3)POST方式请求參数的中文乱码问题 

         GET方式请求參数的中文乱码问题(JSP)

(4)request对象实现请求转发:请求转发指一个web资源收到client请求后,通知server去调用另外一个         web资源进行处理。

(5)请求转发的应用场景:MVC设计模式

(6)request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象。调用这个对象的forward方法能够实现请求转发。

(7)request对象同一时候也是一个域对象。开发者通过request对象在实现转发时。把数据通过request对象带给其他web资源处理。

             setAttribute方法 

             getAttribute方法  

            removeAttribute方法

            getAttributeNames方法

4.request要注意的地方:

   (1).转发是通过RequestDispatcher对象的forward(request,response)方法完毕的

   (2).forward()方法之前的输出,假设是输出到缓冲区,再转发到其它Servlet。那么原缓冲区的数据忽略不计

   (3).forward()方法之前的输出。假设真正输出到浏览器,再转发到其它Servlet。再转发到其它Servlet代码忽略不计

   (4).forward()方法之前的输出,假设是对响应头的设置。会保留到转发的其它Servlet中



5.重定向和转发差别

   (1).转发仅仅能相对于当前web应用而言。不能转发到其他web应用

     重定向能够在当前web应用之外的其他web应用重写向资源

  (2).转发/表示当前web应用

     重定向/表示webserver的根文件夹。即webapps文件夹

   (3).转发时。浏览器地址栏不变

     重定向时,浏览器地址栏改变

  (4).转发是服务端的内部行为,浏览器不知

     重定向是浏览器和服务端的共同行为。浏览器必知

   (5).转发时二个Servlet共享request域对象

     重定向时二个Servlet独享request域对象

  (6).request具有二义性:

a>请求对象

b>域对象

6.getRequestDispatcher()和sendRedirect()的差别

(1).request.getRequestDispatcher()是请求转发,前后页面共享一个request
;

   response.sendRedirect()是又一次定向 前后页面不是一个request .

(2).RequestDispatcher.forward()是在server端执行;

   HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完毕.

   所以RequestDispatcher.forward()对于浏览器来说是“透明的”。

   而HttpServletResponse.sendRedirect()则不是。

(3).ServletContext.getRequestDispatcher(String url)中的url仅仅能使用绝对路径;

   而ServletRequest.getRequestDispatcher(String url)中的url能够使用相对路径。

   由于ServletRequest具有相对路径的概念。而ServletContext对象无次概念。

7.RequestDispatcher对象从client获取请求request。并把它们传递给server上的servlet,html或jsp。

它有两个方法:

(1)void  forward(ServletRequest
  request, ServletResponse   response)

用来传递request的,能够一个Servlet接收request请求。还有一个Servlet用这个request请 求来产生response。

request传递的请求。response是client返回的信息。forward要在response到达client之前调用,也 就是 before response body output
has been flushed。假设不是的话,它会报出异常。

(2).void include(ServletRequest request, ServletResponse response)

用来记录保留request和response,以后不能再改动response里表示状态的信息。

8.假设须要把请求转移到另外一个Web App中的某个地址。能够按以下的做法:

(1). 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).

(2). 调用ServletContext.getRequestDispatcher(String url)方法。

eg:ServletContext.getRequestDispatcher("smserror.jsp").forward(request,respons);



Servlet中的request对象、重定向和转发的差别(6)的更多相关文章

  1. 重温Servlet学习笔记--request对象

    request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每 ...

  2. request对象实现请求转发

    request对象实现请求转发,请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理.request对象提供了一个getRequestDispatcher方法,该方法返 ...

  3. JavaWeb(一)Servlet中的request与response

    一.HttpServletRequest概述 1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP ...

  4. 【转载】Servlet中的request与response

      一.HttpServletRequest概述   1.1.HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时, ...

  5. 此时servlet中的request和我们在页面jsp中的request 是同一个request.

    在tomcat容器启动的时候,jsp页面的内置对象request,response,同样是依赖于tomcat容器中的servlet-api.jar包,这个jar包和我们在web项目中的jar包是一样的 ...

  6. servlet中使用request.getHeader("referer")获取页面从哪跳转过来的

    问题 servlet中使用request.getHeader("referer")获取页面从哪跳转过来的,利用这个方法可以判断网页是否正常登录.我做了一个javaweb小项目,其中 ...

  7. 在SpringMVC中获取request对象

    1.注解法 @Autowired private  HttpServletRequest request; 2. 在web.xml中配置一个监听 <listener> <listen ...

  8. 在SpringMVC中获取request对象的几种方式

    1.最简单的方式(注解法) @Autowired private HttpServletRequest request; 2.最麻烦的方法 a. 在web.xml中配置一个监听 <listene ...

  9. 如何在SpringMVC中获取request对象

    1.注解法 @Autowired private HttpServletRequest request; <listener> <listener-class> org.spr ...

随机推荐

  1. BZOJ 4260 Codechef REBXOR (区间异或和最值) (01字典树+DP)

    <题目链接> 题目大意:给定一个序列,现在求出两段不相交的区间异或和的最大值. 解题分析: 区间异或问题首先想到01字典树.利用前缀.后缀建树,并且利用异或的性质,相同的两个数异或变成0, ...

  2. HDU 4370 0 or 1 (01规划)【Dijkstra】||【spfa】

    <题目链接> 题目大意: 一个n*n的01矩阵,满足以下条件 1.X12+X13+...X1n=12.X1n+X2n+...Xn-1n=13.for each i (1<i<n ...

  3. Pedestrian Attributes Recognition Paper List

    Pedestrian Attributes Recognition Paper List  2018-12-22 22:08:55 [Note] you may also check the upda ...

  4. Java内存管理-掌握虚拟机类加载机制(四)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇介绍了整个JVM运行时的区域,以及简单对比了JDK7和JDK8中JVM运行时区域 ...

  5. shell几种字符串加密解密的方法

    第一种:[ Python 与 Bash Shell 的结合 ]这个命令会让你输入一个字符串,然后会再输出一串加密了的数字. 加密代码[照直输入]:python -c 'print reduce(lam ...

  6. How to use the Custom Material node and create Metaballs 官方视频学习笔记

    这个视频Youtube没有字幕着实蛋疼,本人英语很渣,几乎听不懂,里面有很多文档没讲的重要信息(文档讲的东西太少了). 不过学习过后你可以解锁好几个姿势.这个视频主要是教你做DistanceField ...

  7. 英语口语练习系列-C33-露营-谈论日期-离思

    词汇-露营 Camping camping 露营 campground camping camper picnic bonfire backpack tent public campground co ...

  8. Java笔记(十七) 异步任务执行服务

    异步任务执行服务 一.基本原理和概念 一)基本接口 1)Runnable和Callable:表示要执行的异步任务. 2)Executor和ExecutorService:表示执行服务. 3)Futur ...

  9. [CSAcademy]Virus on a Tree

    [CSAcademy]Virus on a Tree 题目大意: 给你一棵\(n(n\le10^5)\)个点的树,一开始点\(1\)有病毒,可以沿着边扩散.你可以事先切掉若干条边,使得病毒扩散不超过\ ...

  10. 编程菜鸟的日记-初学尝试编程-寻找等长数组A与B(所含元素相同,顺序不同)相匹配的元素即a[i]=b[j]

    #include <iostream> using namespace std; void matching(int a[],int b[],int N) { int i=0; while ...