`
bbls
  • 浏览: 63248 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

转发(Forward)和重定向(Redirect)

    博客分类:
  • JAVA
阅读更多

request.getRequestDispatcher("路径").forward(request,response);
1、该路径可以是相对于上下文根路径,还可以是相对于当前servlet 的路径。
如:/demo 和 demo 都是合法的路径。
① 如果路径以斜杠(/)开头,则被解释为相对于当前上下文根的路径。
② 如果没有以斜杠(/)开头,则被解释为相对于当前servlet 的路径。
2、如果用根路径,那么该根路径所指的是该应用程序的根路径。
如:http://localhost:8080:/demo/ 那么该应用程序的根路径指的就是 http://localhost:8080:/demo/
例子:改程序的目录层次如下:

1

 

Web.xml 文件配置如下:
。。。。。。。
<servlet>
<servlet-name>TestForward</servlet-name>
<servlet-
class>com.accp.servlet.TestForward</servlet-
class>
</servlet>
<servlet-mapping>
<servlet-name>TestForward</servlet-name>
<url-pattern>/TestForward</url-pattern>
</servlet-mapping>
。。。。。。。
那么请求转发的语句为:
request.getRequestDispatcher("/a/a.jsp").forward(request, response);
斜杠表示相对于该应用程序的根路径。
或者语句为:
request.getRequestDispatcher("a/a.jsp").forward(request, response);
没有斜杠,表示相对于改servlet 的路径。
两者运行结果都是:

2

 

但此时要注意,因为上面配置改 servlet 时,用的路径是<url-pattern>/TestForward</url-
pattern>,因此上面才可以访问,如果改成<url-pattern>/a/b/TestForward</url-pattern>,此时
用如下方法
request.getRequestDispatcher("a/a.jsp").forward(request, response);
运行,会出现如下错误:

3

 

因为没有斜杠,用的是相对于改servlet 路径,所以会出现404 错误,正确代码如下:
request.getRequestDispatcher("../../a/a.jsp").forward(request, response);
或者干脆直接用相对于改程序的根路径:
request.getRequestDispatcher("/a/a.jsp").forward(request, response);
因此获得如下经验:
用 request.getRequestDispatcher("路径").forward(request, response);进行请求转发
时,路径最好加上斜杠“/”,表示相对于当前上下文的根路径,也就是程序的根路径。

getServletContext().getRequestDispatcher("路径").forward(request,response);
1、该路径必须以斜杠“/”开始,解释为相对于当前上下文根(context root)的路径。
2、ServletContext.getContext()方法可以获得另一个 web 应用程序的上下文对象,利用该上下文对
象调用getRequestDispatcher("路径")方法得到的RequestDispatcher 对象,可以将请求转向到另一个
web 应用程序中的资源,但是要注意的是:要夸web 应用程序访问资源,需要在当前web 应用程序的<context>
元素的设置中,指定crossContext 属性的值为true。
例如:
如果不以斜杠开头,用下列语句转发会报如下错误:
thisthisthisthis.getServletContext().getRequestDispatcher("../../a/a.jsp")
.forward(request, response);

4

 

 

正确的写法为:
thisthisthisthis.getServletContext().getRequestDispatcher("/a/a.jsp")
.forward(request, response);

response.sendRedirect("路径");
1、该路径可以是相对于服务器根路径,还可以是相对于当前servlet 的路径。(要与上面讲的第一个区别开来)
① 如果路径以斜杠(/)开头,则被解释为相对于服务器根路径。
② 如果没有以斜杠(/)开头,则被解释为相对于当前servlet 的路径。
2、如果用根路径,那么该根路径所指的是服务器根路径。
如:http://localhost:8080:/demo/ 那么该服务器根路径指的就是 http://localhost:8080/
范例:
程序的目录层次像上面一样,web.xml 配置如下:
<servlet>
<servlet-name>TestForward</servlet-name>
<servlet-class>com.accp.servlet.TestForward</servlet-
class>
</servlet>
<servlet-mapping>
<servlet-name>TestForward</servlet-name>
<url-pattern>/a/b/TestForward</url-pattern>
</servlet-mapping>

那么用下列语句运行:
response.sendRedirect("/a/a.jsp");

出现404 错误:

5

 

 

那是因为用 response.sendRedirect("/a/a.jsp");重定向的时候,这里的斜杠是服务器的根路径,因此
当然找不到请求的资源了。
正确的做法是:
response.sendRedirect("/demo/a/a.jsp");
或者用相对路径(相对于当前servlet):
response.sendRedirect("../../a/a.jsp");
运行结果如下:

6

 

总结:

7

分享到:
评论

相关推荐

    forward转发与redirect重定向的区别.zip

    在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的请求处理方式,它们在实现客户端和服务器之间的交互时起到至关重要的作用。了解它们的区别对于优化用户体验和提高应用性能至关重要。 首先,让...

    转发和重定向的区别 forward和redirect的区别

    在Java的Servlet编程中,`转发`和`重定向`是两种不同的机制,用于在服务器端将客户端的请求导向不同的资源。它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`...

    forward与redirect!转发和重定向 解析

    在Web开发中,Forward(转发)与Redirect(重定向)是两种常见的页面跳转方式。它们虽然都可以实现从一个页面跳转到另一个页面的功能,但在实现机制、应用场景以及对用户浏览器地址栏的影响等方面存在显著差异。 ##...

    转发和重定向的区别

    在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的页面跳转方式,它们虽然在效果上看似相似,但其实有着本质的区别。理解这两种技术的工作原理及其应用场景对于优化应用程序的性能和用户体验至关...

    转发与重定向的区别

    在Web开发中,转发(Forward)和重定向(Redirect)是两种常见的页面跳转方式。这两种方法虽然都能实现页面的跳转,但其内部工作原理、对客户端的影响以及应用场景都有所不同。本文将详细介绍转发与重定向之间的区别...

    小谈“转发与重定向”

    转发(Forward)与重定向(Redirect)是Web开发中两种常见的页面跳转方式,它们各自有着不同的应用场景与特点。为了更好地理解这两种机制,我们首先来了解一下它们的基本概念。 1. **转发(Forward)**:转发是一种...

    servlet请求转发、重定向、包含

    Servlet请求转发、重定向和包含是Servlet中处理客户端请求的重要技术,它们都涉及到如何有效地管理用户请求和页面跳转,但各自有不同的特性和应用场景。 1. **请求转发(Request Forward)** - 请求转发是在服务器...

    重定向和转发的区别

    综上所述,重定向和转发虽然都能实现页面跳转的功能,但它们在技术实现、应用场景以及对请求处理等方面存在着明显的差异。开发者在实际应用中应根据具体的业务需求和技术背景来选择合适的方式。了解这些区别有助于更...

    javaweb转发和重定向

    javaweb请求转发的简单实例,演示了forward()方法和getRequestDispatcher()的不同之处

    request和response实现跳转和重定向的区别

    3. 上下文信息:转发可以保留请求和响应的上下文信息,如请求参数、session等,而重定向会导致这些信息丢失,除非手动添加到新的请求中。 4. 永久与临时:重定向可以设置为永久或临时,例如301重定向表示URL已经...

    请求转发和重定向的区别共1页.pdf.zip

    在Web开发中,请求转发和重定向是两种常见的服务器端处理客户端请求的技术,它们虽然都是用来改变客户端浏览器的页面展示,但实现机制和效果却大相径庭。本篇文章将详细解析请求转发与重定向的区别。 一、请求转发...

    (代码)SpringMVC第6讲:请求转发和重定向

    在Spring MVC框架中,请求转发和重定向是两种常见的页面跳转方式,它们在处理用户请求和构建应用程序的流程控制中扮演着重要角色。本文将深入探讨这两种技术,并结合实际的代码示例来阐述其工作原理和使用场景。 ...

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

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

    JavaWeb中的 请求转发 和 重定向.docx

    在JavaWeb开发中,请求转发和重定向是两种常见的客户端请求处理方式,它们都是用于将一个请求从一个Servlet传递到另一个Servlet或者从一个资源跳转到另一个资源。这两种方法虽然都可以实现页面间的跳转,但它们的...

    基于框架的Web开发-处理数据模型、转发和重定向.docx

    本文将详细讲解如何处理模型数据、转发和重定向,这些都是Spring MVC中核心的流程控制机制。 首先,`@RequestMapping`注解是Spring MVC用来映射HTTP请求到处理方法的关键工具。它允许我们将HTTP请求路径与特定的...

    一个基于struts的重定向和转发实例

    在这个基于Struts的重定向和转发实例中,我们将探讨这两个关键概念在Web应用程序中的应用。 首先,让我们理解什么是重定向和转发: 1. **重定向(Redirect)**:在HTTP响应中,服务器向客户端发送一个302状态码,...

    直接请求转发(Forward)和间接请求转发(Redirect)两种区别.docx

    主要分为直接请求转发(Forward)和间接请求转发(Redirect)。这两种转发方式在处理请求时有着显著的区别。 直接请求转发(Forward): 直接请求转发是服务器内部的资源调度,用户在浏览器中只会看到最初的请求...

    重定向与转发

    在 Web 应用程序中,重定向(Redirect)和转发(Forward)是两个常见的机制,用于实现页面的跳转和数据的传递。它们之间有着本质的区别,但它们都是实现页面跳转和数据传递的重要手段。 一、转发(Forward) 转发...

Global site tag (gtag.js) - Google Analytics