【问题标题】:Redirect pages in JSP?在 JSP 中重定向页面?
【发布时间】:2011-06-25 10:42:46
【问题描述】:

我必须在jsp中设计几个页面。 点击第一页的提交按钮后,页面应该会自动重定向到第二页。

您能否提供一个快速示例或演示如何实现此功能的教程链接?

【问题讨论】:

  • 为什么需要重定向?通常的做法是提交一个 servlet,该 servlet 转发(而不是重定向)到一个 jsp。
  • 通过action参数以表单形式提交页面。

标签: java jsp redirect


【解决方案1】:

return; 语句扩展@oopbase 的答案。

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

/* 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;
}

请注意,重定向的使用可能因要求而异。现在人们不使用这样的认证系统。 (现代方法 - Token Based Authentication)这只是一个简单的示例,用于了解在何处以及如何放置重定向。

【讨论】:

    【解决方案2】:

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

    即。如果用户正在点击结帐链接,但您想将他/她发送到结帐页面,如果它已注册(登录)或注册 如果他/她不是,则页面。

    你可以使用JSTL core 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>
    

    【讨论】:

      【解决方案3】:

      This answer 还包含一个仅使用 jstl 重定向标签的标准解决方案:

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

      【讨论】:

        【解决方案4】:

        只需在包含提交按钮的&lt;form&gt;action 属性中定义目标页面即可。

        所以,在page1.jsp

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

        与问题无关,如果您需要做任何事情,JSP 是not 做生意的最佳场所。考虑学习servlets

        【讨论】:

          【解决方案5】:
          <%
              String redirectURL = "http://whatever.com/myJSPFile.jsp";
              response.sendRedirect(redirectURL);
          %>
          

          【讨论】:

          • Scriplet 是一个非常糟糕的决定。
          • 说好话比说坏话更有帮助。应该使用什么来代替 scriptlet?
          • 这是我在谷歌搜索“redirect jsp”的第一个结果。对于那些寻找如何始终将一个页面重定向到另一个页面的人来说,这是正确的答案(例如映射 /index.jsp -> /myapp/index.jsp,将其放入 /index.jsp 并制作 redirectURL = “/myapp/index.jsp”)。康斯坦丁是正确的,这是重定向提交按钮的不好方法。按钮的正确方法是使用
            标记或 javascript,具体取决于您的架构。
          • 提醒一下 - 这对我有用,但我必须删除 return; 之后的所有换行符。它最终看起来像这样:response.sendRedirect(redirectURL);%&gt;%&gt; 之后甚至没有换行符)
          • 其实我说得太早了。拥有response.sendRedirect(redirectURL);\nreturn;\n%&gt; 也对我有用。
          猜你喜欢
          • 2015-05-22
          • 2013-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-15
          • 1970-01-01
          相关资源
          最近更新 更多