首页 课程 师资 教程 报名

Java Servlet重定向与转发

  • 2022-10-12 10:47:44
  • 900次 动力节点

Servlet重定向与转发是什么?动力节点小编为大家进行详细介绍。

1.概述

有时,我们的 Java Servlet 中的初始 HTTP 请求处理程序需要将请求委托给另一个资源。在这些情况下,我们可以进一步转发请求或将其重定向到不同的资源。

我们将使用这两种机制并讨论每种机制的差异和最佳实践。

2.Maven依赖

首先,让我们添加 Servlet Maven 依赖项:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
</dependency>

3.前锋

现在让我们直接进入并看看如何做一个简单的前锋:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    RequestDispatcher dispatcher = getServletContext()
      .getRequestDispatcher("/forwarded");
    dispatcher.forward(req, resp);
}

我们从父 Servlet 获取RequestDispatcher引用并将其指向另一个服务器资源。

简单地说,这将转发请求。

当客户端向http://localhost:8081/hello?name=Dennis提交请求时,此逻辑将运行并将请求转发到“ /forwarded ”。

4. 重定向

现在我们了解了转发的概念,让我们看一下重定向的快速片段:

protected void doGet(HttpServletRequest req, HttpServletResponse resp){
    resp.sendRedirect(req.getContextPath() + "/redirected");
}

我们使用原始响应对象将此请求重定向到另一个 URL:“ /redirected”。

当客户端向http://localhost:8081/welcome?name=Dennis提交请求时,请求将被重定向到http://localhost:8081/redirected。

5.差异

在这两种情况下,我们都传递了带有值的参数“ name ”。简单地说,转发的请求仍然带有这个值,但重定向的请求没有。

这是因为,通过重定向,请求对象与原始对象不同。如果我们还想使用这个参数,我们需要将它保存在HttpSession对象中。

以下是 servlet 转发和重定向之间的主要区别列表:

前锋:

请求将在服务器端进一步处理

客户端不受转发的影响,浏览器中的 URL 保持不变

请求和响应对象在转发后将保持相同的对象。请求范围的对象仍然可用

重定向:

请求被重定向到不同的资源

客户端将在重定向后看到 URL 更改

创建了一个新请求

重定向通常在Post/Redirect/Get Web 开发模式中使用

6.结论

转发和重定向都是关于将用户发送到不同的资源,尽管它们具有完全不同的语义。

在这些之间进行选择很简单。如果需要先前的范围,或者不需要通知用户,但应用程序还想执行内部操作,则使用 forwarding。

要放弃范围,或者如果新内容与原始请求不相关(例如重定向到登录页面或完成表单提交),请使用 redirecting。

以上就是关于“Java Servlet重定向与转发”的介绍,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下本站的Servlet教程,里面还有更丰富的知识等着大家去学习,希望对大家能够有所帮助哦。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交