Servlet重定向与转发是什么?动力节点小编为大家进行详细介绍。
有时,我们的 Java Servlet 中的初始 HTTP 请求处理程序需要将请求委托给另一个资源。在这些情况下,我们可以进一步转发请求或将其重定向到不同的资源。
我们将使用这两种机制并讨论每种机制的差异和最佳实践。
首先,让我们添加 Servlet Maven 依赖项:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
</dependency>
现在让我们直接进入并看看如何做一个简单的前锋:
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 ”。
现在我们了解了转发的概念,让我们看一下重定向的快速片段:
protected void doGet(HttpServletRequest req, HttpServletResponse resp){
resp.sendRedirect(req.getContextPath() + "/redirected");
}
我们使用原始响应对象将此请求重定向到另一个 URL:“ /redirected”。
当客户端向http://localhost:8081/welcome?name=Dennis提交请求时,请求将被重定向到http://localhost:8081/redirected。
在这两种情况下,我们都传递了带有值的参数“ name ”。简单地说,转发的请求仍然带有这个值,但重定向的请求没有。
这是因为,通过重定向,请求对象与原始对象不同。如果我们还想使用这个参数,我们需要将它保存在HttpSession对象中。
以下是 servlet 转发和重定向之间的主要区别列表:
前锋:
请求将在服务器端进一步处理
客户端不受转发的影响,浏览器中的 URL 保持不变
请求和响应对象在转发后将保持相同的对象。请求范围的对象仍然可用
重定向:
请求被重定向到不同的资源
客户端将在重定向后看到 URL 更改
创建了一个新请求
重定向通常在Post/Redirect/Get Web 开发模式中使用
转发和重定向都是关于将用户发送到不同的资源,尽管它们具有完全不同的语义。
在这些之间进行选择很简单。如果需要先前的范围,或者不需要通知用户,但应用程序还想执行内部操作,则使用 forwarding。
要放弃范围,或者如果新内容与原始请求不相关(例如重定向到登录页面或完成表单提交),请使用 redirecting。
以上就是关于“Java Servlet重定向与转发”的介绍,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下本站的Servlet教程,里面还有更丰富的知识等着大家去学习,希望对大家能够有所帮助哦。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习