`

重定向和转发详解

阅读更多
重定向和转发详解
重定向(response.sendRedirect())
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
重定向后在浏览器地址栏上会出现重定向页面的URL
重定向过程:客户浏览器发送http请求---->web服务器接受后发送302响应要求客户浏览器发送一个新的http请求---->客户端浏览器接受此响应后在发送一个新的http请求到服务器---->服务器根据此请求寻找资源并发送给客户,它可以重定向到任意URL,不能共享request范围内的数据。

例:在servlet中重定向
public void doPost(HttpServletRequest request,HttpServletResponse response)
         throws ServletException,IOException
{
         response.setContentType("text/html; charset=gb2312");
         response.sendRedirect("/index.jsp");
}



由于response是jsp页面中的隐含对象,故在jsp页面中可以用response.sendRedirect()直接实现重定位。
注意:
(1)、使用response.sendRedirect时,前面不能有HTML输出。这并不是绝对的,不能有HTML 输出其实是指不能有HTML被送到了浏览器。事实上 现在的server都有cache机制, 一般在8K(我是说JSP  SERVER),这就意味着,除 非你关闭了cache,或者你使用 了out.flush()强制刷新,那么在使用sendRedirect之前, 有少量的 HTML输出也是 允许的。
(2)、response.sendRedirect之后,应该紧跟一句return;我们已经知道response.sendRedirect是 通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经 要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失 败。
二、转发(RequestDispatcher.forward())
是在服务器端起作用,当使用forward()时, Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的 form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递.
   但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文 件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过 response.setAttribute("name", name)来传至下一个页面.
转发过程:客户浏览器发送http请求---->web服务器接受此请求后调用内部的一个方法在容器内部完成请求处理和转发动作---->将目标资源发送给客户,它只能在同一个web应用中使用,可以共享request范围内的数据。
转发后浏览器地址栏URL不变.

例:在servlet中进行重定向
public void doPost(HttpServletRequest request,HttpServletResponse response)
	throws ServletException,IOException
{
         response.setContentType("text/html; charset=gb2312");
         ServletContext sc = getServletContext();
         RequestDispatcher rd = null;
         rd = sc.getRequestDispatcher("/index.jsp");      //定向的页面
         rd.forward(request, response);
}



通常在servlet中使用,不在jsp中使用。

<jsp:forward page="" />
它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。
如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。
另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交

修改HTTP header的Location属性来重定向
通过设置直接修改地址栏来实现页面的重定向。
jsp文件代码如下:
<%
	response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
	String newLocn = "/newpath/jsa.jsp";
	response.setHeader("Location",newLocn);
%>




JSP中实现在某页面停留若干秒后,自动重定向到另一页面
在html文件中,下面的代码:
     <meta http-equiv="refresh" content="300; url=target.jsp">
    它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。
    由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。
关键代码:
    String content=stayTime+";URL="+URL;
    response.setHeader("REFRESH",content);

他们的调用分别如下例:request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jspresponse.sendRedirect("new.jsp");//重定向到new.jsp在jsp页面中你也会看到通过下面的方式实现转发:<jsp:forward page="apage.jsp" />

转发和重定向比较:
(1).Request Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
(2).response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法.
注:在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRequest()方法。
怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。
分享到:
评论

相关推荐

    对Django 转发和重定向的实例详解

    通过这个实例,我们可以看到Django的转发和重定向机制如何帮助开发者构建更安全、用户体验更好的Web应用。理解并正确使用这两种方法对于Django开发者来说至关重要,因为它们直接影响到应用的逻辑流程和用户交互。

    请求转发与重定向详解代码

    在Web开发中,请求转发(Request Forward)和重定向(Redirect)是两种常见的处理客户端请求的方式,它们在处理用户请求并展示相应页面时起到关键作用。这篇文章将深入讲解这两种技术的工作流程,以及它们在实际应用...

    java servlet请求转发重定向

    ### Java Servlet 请求转发与重定向详解 #### 一、引言 在Java Web开发中,请求转发和重定向是两种非常重要的技术手段,用于控制页面之间的跳转逻辑。这两种技术虽然都能实现页面间的跳转,但其工作原理、应用场景...

    Java中Request请求转发详解

    Java中Request请求转发详解 Java中Request请求转发是指在Servlet中使用RequestDispatcher将请求转发到另一个Servlet或JSP页面,以实现请求的重定向或包含。在本文中,我们将通过示例代码详细介绍Java中Request请求...

    Javaweb请求转发及重定向实现详解

    Javaweb请求转发及重定向实现详解 Javaweb请求转发及重定向是Web开发中非常重要的概念,它们都可以实现页面的跳转,但是它们有着不同的实现机制和应用场景。 一、请求转发 请求转发是指在同一个Controller中,将...

    详解spring mvc 请求转发和重定向

    在Spring MVC框架中,请求转发和重定向是两种常见的处理HTTP请求的方式,它们在处理用户请求和导航页面之间有明显的差异。理解这两种方法的工作原理和使用场景对于开发高效的Web应用程序至关重要。 请求转发...

    请求重定向个请求分派

    请求重定向和请求分派技术详解 请求重定向和请求分派是 MVC 架构中关键的技术,它们在 Web 应用程序中扮演着重要的角色。本文将详细介绍请求重定向和请求分派的概念、实现方法和应用场景。 一、请求重定向 请求...

    iOS 拦截重定向302跳转的方法详解

    在iOS开发中,有时我们需要对HTTP的302重定向进行拦截和控制,特别是在特定的业务场景下,如文中提到的WiFi切换问题。302重定向是一种HTTP状态码,表示临时性重定向,服务器会返回一个Location头字段,指示客户端...

    详解nginx配置url重定向-反向代理

    一、nginx 地址重定向 二、nginx 反向代理 1、地址重定向:是指当使用者浏览某个网址时,将他导向到另一个网址的技术。常用在把一串很长的网址,转成较短的网址。因为当要传播某网站时,常常因为网址太长,不好...

    Nginx下Frp强制重定向为https配置详解

    - `proxy_pass` 指令用于设置Nginx转发到Frp的地址和端口。 - `proxy_set_header` 指令用于设置转发请求的HTTP头信息。 ### 知识点六:SSL配置的优化与安全 SSL配置不仅包括开启SSL终端,还需要对SSL的安全性能...

    详解SpringMVC重定向传参数的实现

    然而,直接将参数添加到`Model`并返回`"home"`会导致转发(forward),而不是重定向,此时浏览器的URL不会改变,如果用户刷新页面,表单数据会被再次提交。为了解决这个问题,Spring MVC提供了一种方法,即使用`...

    TCPIP详解--共三卷

    9.4 转发或不转发 89 9.5 ICMP重定向差错 89 9.5.1 一个例子 90 9.5.2 更多的细节 91 9.6 ICMP路由器发现报文 92 9.6.1 路由器操作 93 9.6.2 主机操作 93 9.6.3 实现 93 9.7 小结 94 第10章 动态选路协议 95 10.1 ...

    2010 OWASP TOP 10 security issues

    2. A8 - 未经验证的重定向和转发:这是一种相对常见但危险性很高的缺陷,通常不被充分认识。攻击者可能通过篡改重定向和转发来引导用户访问恶意网站。 三、移除风险 1. A3 - 恶意文件执行:主要针对PHP环境,随着其...

    jsp应用开发详解 jsp电子书

    8. **JSP的转发和重定向**:掌握使用`RequestDispatcher`进行请求转发和使用`HttpServletResponse.sendRedirect()`进行重定向的区别和应用场景。 9. **会话管理**:理解session的概念,学习如何创建、使用和销毁...

    Java Web开发详解源码

    8. **请求转发和重定向**:理解这两种HTTP请求导航方式的区别和使用场景。 9. **Servlet容器**:熟悉Tomcat或Jetty等Servlet容器的工作原理,以及如何配置和部署Web应用程序。 10. **数据库连接**:了解如何使用...

    SIP协议中文版详解

    2. **代理服务器**:作为中介,代理服务器转发SIP请求以帮助路由和管理会话。它们可以执行多种功能,如负载均衡、认证和计费。 3. **重定向服务器**:重定向服务器接收请求,然后返回一个或多个新的目标地址,指示...

    Nginx之proxy_redirect使用详解

    在Web服务器配置中,特别是在使用Nginx作为反向代理服务器时,此指令变得非常关键,因为它能够帮助我们控制客户端得到的重定向地址,以确保返回给客户端的URL是符合我们安全和架构需求的。 在实际应用中,我们经常...

    java web开发详解源代码

    源代码中可能包含多个Servlet和JSP文件,展示如何处理HTTP请求、管理会话、转发和重定向等操作。 其次,了解MVC(Model-View-Controller)设计模式是至关重要的。这是一种常见的Java Web应用架构,它将业务逻辑...

Global site tag (gtag.js) - Google Analytics