jsp重定向和转发

表单提交到servlet后,servlet进行转发之后浏览器上的url为什么还是servlet的url-pattern,但是页面内容却是跳转之后页面的内容。

研究了半天之后发现这个和转发和重定向有关系

当使用转发方法的时候,前台提交的表单的内容在servlet中利用request对象可以获取到,而跳转到result.jsp之后,在result。jsp中用request也能获取到提交的内容。这里浏览器的地址是servlet的映射地址。

而使用重定向方法的时候,前台提交的表单内容在servlet中可以获取,但是在result.jsp页面中却获取不了。这里浏览器的地址是目标页面的url。

1、请求转发(RequestDispatcher)的过程:

         客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用 getRequestDispacther()方法,把请求转发给指定的result.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request对象,在servlet里面放的所有东西,在jsp中都能取出来,因此,jsp能把结果通过getAttribute()方法获取,getAttribute()执行完把结果返回给客户端。整个过程是一个请求,一个响应。

 

2、重定向(sendRedirect)的工作原理:

 

           客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,执行到response.senRedirect()方法,立即向客户端返回这个响应,告诉客户端你必须要再发送一个请求,去访问result.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求result.jsp, 这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在 sendRedirect()里面是两个请求,两个响应。

转发是服务器行为,重定向是客户端行为。

转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内 部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他 的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转 发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态 码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location 地址----》服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的 路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

参考资料:(本博客借鉴下面两位大牛的文章,整理了一下,仅用于学习)

http://blog.csdn.net/kobejayandy/article/details/13762043

http://www.cnblogs.com/CodeGuy/archive/2012/02/13/2349970.html

时间: 2024-07-28 23:22:23

jsp重定向和转发的相关文章

Jsp 重定向、请求转发

请求转发:request.getRequestDispatcher(URL地址).forward(request, response) 原理: 客户端发送请求,Servlet1做出处理. Servlet1调用sendReadirect()方法,将请求转发给Servlet2来处理请求,为客户端服务. Servlet2对客户端浏览器做出响应. 请求转发允许把请求转发给同一应用程序中的其他Web组件.这种技术通常用于Web应用控制层的Servlet流程控制器,它检查HTTP请求数据,并将请求转发到合适

servlet(jsp)中的重定向和转发

servlet(jsp)中的重定向和转发 由一个servlet(jsp)从内部转向另一个servlet(jsp)有两种方式:转发和重定向. 转发:是由一个web组件(servlet)将未完成的处理交给下一个web组件处理,转发的组件会共享request对象和response对象,从而实    现数据的共享. 可以使用以下方式进行转发:request.getRequestDispatcher("新资源").forward(req,resp); 注意: 1.转发之前不能执行response

Web---HTTP请求、重定向、转发和数据压缩

HTTP常用的请求方式包括: GET-最为常见,但发送的数据量很小,发送的数据直接包含到url的后面. POST-可以包含大量数据,数据在请求正文中通过表单进行提交. HEAD,PUT,DELETE. 后面三种Tomcat服务器默认都不支持.常用的只有前两种. GET: 发送到服务器的数据出现在URL的后面.最多不能超过1K.如: http://localhost:8080/index.jsp?name=itcast&sex=man&.. POST: 发送到服务器的数据会出现有请求的正文部

JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)

HttpServletRequest获取请求头信息 (1)获取客户机请求头 String getHeader(String name) Enumeration<String> getHeaders(String name) Enumeration<String> getHeaderNames() (2)获取具体类型客户机请求头 int  getIntHead(String name) long getDateHead(String name) 日期对应毫秒 (3)常见的请求头 re

重定向和转发的区别

1.两种方式有两种不同的request request.getRequestDispatcher()是请求转发,前后页面共享一个request ;  response.sendRedirect()是重新定向,前后页面不是一个request. request.getRequestDispather();返回的是一个RequestDispatcher对象. 2.运行的地方不同 RequestDispat6cher.forward()是在服务器端运行;  HttpServletResponse.sen

Java中 重定向和转发的区别 、与Session

重定向和转发的区别: 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程.与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求.因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL,而当使用转发时该URL会保持不变.重定向的速度比转发慢,因为浏览器还得发出一个新的请求.同时,由于重定向方式产生了一个新的请求,所以经过一次重定向后,request内的对象将无法使用. 怎么选择

Servlet中的request对象、重定向和转发的差别(6)

1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时.HTTP请求头中的全部信息都封装在这个对象中.我们通过request对象调用里面的方法,能够获得客户发送给webserver的各种信息. 2.request的经常用法 (1)获得客户机信息     getRequestURL方法返回client发出请求时的完整URL.(                                比如:ur

转:java 重定向和转发的区别

response.sendredirect("http://www.foo.com/path/error.html"); 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求.因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变.重定向的速度比转发慢,因为浏览器还得发出一个

java 重定向和转发的区别(转)

转发地址:http://www.cnblogs.com/shenliang123/archive/2011/10/27/2226892.html response.sendredirect("http://www.foo.com/path/error.html"); 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求.因为