JSP中如何重定向页面?

56

我需要在jsp中设计多个页面。 在第一页点击提交按钮后,页面应该自动重定向到第二页。

你能否提供一个快速示例或教程链接,演示如何实现这个功能?


2
为什么需要重定向?通常的方法是将其提交给一个servlet,该servlet转发(而不是重定向)到jsp页面。 - Christoffer Hammarström
通过 action 参数将页面作为表单提交。 - access_granted
当我点击链接查看这个页面时,我想:“等等,肯定会有人评论‘你为什么要这样做?’”。为什么有人想要发出303 See Other呢?天哪,我无法想象。保持优雅,Stack Overflow。*(字面意思为“大笑”)* - Ian Boyd
6个回答

119
<%
    String redirectURL = "http://whatever.com/myJSPFile.jsp";
    response.sendRedirect(redirectURL);
%>

7
Scriplet 是一个非常糟糕的决定。 - user
93
比指出问题更有帮助的是指出好的方面。在脚本标签内该使用什么替代品? - twiz
5
这是我在谷歌搜索“重定向jsp”后得到的第一个结果。对于那些想知道如何始终将一个页面重定向到另一个页面(例如将/index.jsp重定向到/myapp/index.jsp),下面这个答案是正确的(将此代码放入/index.jsp,然后使redirectURL =“/myapp/index.jsp”)。Constantine正确指出,这是用于重定向提交按钮的不良方法。对于按钮的正确方法是根据您的架构使用<form>标签或javascript。 - Ryan Shillington
3
提醒一下 - 这对我有效,但我必须删除 return; 后面的任何换行符。最终代码看起来像这样:response.sendRedirect(redirectURL);%>(甚至 %> 后也没有换行符)。 - Wisco crew
@StuThompson 确实。我仍然在想为什么人们在2017年找到了这篇文章 :-). - oopbase
显示剩余3条评论

35

这个答案也包含了一个只使用 JSTL 重定向标签的标准解决方案:


<c:redirect url="/home.html"/>

12

只需在包含提交按钮的 <form>action 属性中定义目标页面。

因此,在 page1.jsp 中:

<form action="page2.jsp">
    <input type="submit">
</form>

与问题无关,如果需要处理业务逻辑,JSP并不是最好的选择。考虑学习servlets


2

你好:如果您需要更多控制链接重定向的位置,可以使用以下解决方案。

例如,如果用户点击CHECKOUT链接,但是您希望将他/她发送到结帐页面(如果已注册并登录)或注册页面(如果他/她没有注册),则可以使用以下方法。

您可以使用JSTL核心LIKE:

<!--include the library-->
<%@ taglib prefix="core" uri="http://java.sun.com/jsp/jstl/core" %>

<%--create a var to store link--%>
<core:set var="linkToRedirect">
  <%--test the condition you need--%>
  <core:choose>
    <core:when test="${USER IS REGISTER}">
      checkout.jsp
    </core:when>
    <core:otherwise>
      registration.jsp
    </core:otherwise>
  </core:choose>
</core:set>

解释:与...相同

 //pseudo code
 if(condition == true)
   set linkToRedirect = checkout.jsp
 else
   set linkToRedirect = registration.jsp

然后:在简单的HTML中...

<a href="your.domain.com/${linkToRedirect}">CHECKOUT</a>

1

在@oopbase的答案基础上,加入return;语句。

让我们考虑一个传统身份验证系统的用例,在该系统中,我们将登录信息存储到会话中。在每个页面上,我们都会检查活动会话,例如:

/* Some Import Statements here. */

if(null == session || !session.getAttribute("is_login").equals("1")) {
    response.sendRedirect("http://domain.com/login");
}

// ....

session.getAttribute("user_id");

// ....
/* Some More JSP+Java+HTML code here */

这段代码乍一看似乎没问题,但实际上存在一个问题。如果你的服务器由于时间限制而使会话过期,当用户试图访问页面时,如果你没有在try..catch块中编写代码或每次处理if(null != session.getAttribute("attr_name")),他可能会遇到错误。
因此,通过放置一个return;语句,我停止了进一步执行并强制重定向页面到特定位置。
if(null == session || !session.getAttribute("is_login").equals("1")) {
    response.sendRedirect("http://domain.com/login");
    return;
}

请注意,重定向的使用可能会根据要求而异。现在人们不再使用这种身份验证系统。(现代方法 - 基于令牌的身份验证)这只是一个简单的例子,以便理解何时以及如何放置重定向。

0

这应该就可以了。

在第一个页面上点击 --> 提交 按钮。

将以下代码添加到第二个页面,它将 重定向 到 home.html 页面。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<c:redirect url="home.html"/>
</body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接