forward与redirect区别

1. RequestDispatcher.forward()
  在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet或者是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)来传至下一个页面
  重定向后浏览器地址栏URL不变。
  例:在servlet中进行重定向
  

<span style="font-family:Microsoft YaHei;font-size:18px;">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);
}</span>


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


2. response.sendRedirect()
  在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
  重定向后在浏览器地址栏上会出现重定向页面的URL。
  例:在servlet中重定向
  

<span style="font-family:Microsoft YaHei;font-size:18px;">public void doPost(HttpServletRequest request,HttpServletResponse response)
                                throws ServletException,IOException{
      response.setContentType("text/html; charset=gb2312");
      response.sendRedirect("/index.jsp");
}</span>


  由于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是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
  比较:
  (1) Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
  (2) response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
  前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法。
  在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使HttpServletResponse.sendRequest()方法。


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


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


5. 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);

下面是其他网友的文章
1. request.getRequestDispatcher("/admin.jsp").forward(request, response);//转发到admin.jsp

2. RequestDispatcher rd=request.getRequestDispatcher("/admin.jsp");
rd.forward(request, response);

3. getServletConfig().getServletContext().getRequestDispatcher("/admin.jsp").forward(request, response);

其它的方法当然可以用html js,的方法,需要jsp输出的,根据需要选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: forwardredirect都是用于页面跳转的技术,但它们的实现方式和效果有所不同。 forward是服务器端的跳转,它是在服务器内部完成的,客户端并不知道页面发生了跳转。在forward过程中,浏览器的地址栏不会发生变化,而且浏览器只会发送一次请求。forward通常用于在同一个应用程序内部进行页面跳转,比如在Servlet中使用RequestDispatcher.forward()方法。 redirect是客户端的跳转,它是通过向浏览器发送一个重定向响应来实现的。在redirect过程中,浏览器会发送两次请求,第一次请求是用户请求原始页面,第二次请求是用户请求重定向后的页面。在redirect过程中,浏览器的地址栏会发生变化。redirect通常用于在不同的应用程序之间进行页面跳转,比如在Servlet中使用response.sendRedirect()方法。 总的来说,forward是服务器端的跳转,redirect是客户端的跳转。forward的效率比redirect高,因为它只需要在服务器内部进行页面跳转,而redirect需要向浏览器发送两次请求。但是,redirect可以实现在不同应用程序之间的页面跳转,而forward只能在同一个应用程序内部进行页面跳转。 ### 回答2: Forwardredirect是web开发中经常使用的两个关键词,它们都可以用来想客户端发送请求,但实际上它们有着很大的不同。 Forward指的是在服务器端将一个请求转发给另外一个资源或者Servlet/ JSP程序进行处理,这个过程是在服务器内部进行的,客户端并不会收到任何响应。Forward有很多好处,最主要的是它能够提高应用的性能,因为它避免了客户端向不同的服务器发送请求,从而减少了网络带宽的占用。 Redirect则是通过向客户端发送一个HTTP重定向响应,让客户端请求另一个URL,客户端会向另一个URL发送新的请求,这时服务器会重新响应这个请求。Redirect的最大优点是它能够向客户端提供一个新的URL地址,这个地址可以被保存、书签或者复制,这样客户端下一次访问时就可以直接使用这个地址,不用去查询服务器。 Forwardredirect还有其他的区别: 1.Forward是在服务器端完成的,Redirect则是在客户端完成的。 2.Forward可以在两个不同的Web组件之间传递数据,而Redirect则不能。 3.Forward不会改变URL地址,而Redirect则会。例如在jsp页面中用forward跳转到另外一个jsp页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.getRequestDispatcher("/welcome.jsp").forward(request, response); %> 在jsp页面中用redirect跳转到另外一个jsp页面: <% response.sendRedirect("welcome.jsp"); %> 前者的页面地址会保持不变,后者的页面地址会变成目标地址。 总之,ForwardRedirect都是很重要的web技术,根据实际应用场景需要灵活运用。不同的场景,需要采用不同的技术以达到更好的效果。 ### 回答3: Forwardredirect都是HTTP协议中的常用指令,它们都可以用来跳转页面,但是它们的具体实现方式和作用是有所不同的。 首先,Forward是服务器端的跳转指令,即在服务器端调用一个本地资源并将其返回给用户,用户的浏览器并不知道这个过程。Forward跳转一般是用于解决业务逻辑问题或者进行页面间的跳转,主要体现在Servlet技术上,应用比较广泛,可以在同一Web应用程序的不同Servlet之间实现跳转,而且Forward跳转不会增加地址栏中的URL。 而redirect则是浏览器端的跳转指令,也就是浏览器会首先请求服务器并得到相应的响应,然后浏览器根据响应重新发起请求到服务器。这种跳转方式又被称为重定向,其作用是将客户端重定向到另一个URL地址上,一般用于跨Web应用程序或者是页面的重定向,用户的浏览器地址栏中会显示重定向URL地址。 总之,Forward用于在同一Web应用程序的Servlet之间跳转,可以在Web应用程序内部进行页面跳转,不会改变URL地址,用户体验较好;而redirect则可以跨Web应用程序进行页面跳转,在浏览器地址栏上会显示重定向的URL地址,会给用户带来一定的不便。因此,在使用跳转指令时,需要根据具体情况来选择适合的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值