代码之家  ›  专栏  ›  技术社区  ›  Ash

JSP:在Java中不使用JSP标记?

  •  11
  • Ash  · 技术社区  · 16 年前

    是否有一个纯Java等价于& sp;jsp:向前页=“…”/& t,我可以在…lt;%中使用…%&块?

    例如,我目前有一个类似于以下内容的JSP页面:

    <%
        String errorMessage = SomeClass.getInstance().doSomething();
        if (errorMessage != null) {
            session.setAttribute("error", errorMessage);
    %>
    <jsp:forward page="error.jsp" />
    <%
        } else {
            String url = response.encodeRedirectURL("index.jsp");
            response.sendRedirect(url);
        }
    %>
    

    必须打破<%…%>使用jsp的块:forward很难看,而且由于缩进等原因,它更难读取。

    那么,我可以在Java代码中使用前向而不使用JSP标记吗?

    这样做是理想的:

    <%
        String errorMessage = SomeClass.getInstance().doSomething();
        if (errorMessage != null) {
            session.setAttribute("error", errorMessage);
            someObject.forward("error.jsp");
        } else {
            String url = response.encodeRedirectURL("index.jsp");
            response.sendRedirect(url);
        }
    %>
    
    3 回复  |  直到 16 年前
        1
  •  29
  •   erickson    16 年前

    这个 someObject 你要找的是 pageContext .

    这个对象是在JSP中隐式定义的,所以您可以这样使用它:

    pageContext.forward("<some relative jsp>");
    
        2
  •  7
  •   Jack Leow    16 年前

    如果可以的话,你真的应该尽量避免使用脚本,在你的例子中,你正在做的很多事情都可以用JSTL代码代替。下面这个例子的替代品要干净得多,IMO:

    <%
      // Consider moving to a servlet or controller/action class
      String errorMessage = SomeClass.getInstance().doSomething();
      pageContext.setAttribute("errorMessage", errorMessage);
    %>
    <c:choose>
      <c:when test="${not empty errorMessage}">
        <c:set var="error" scope="session" value="${errorMessage}" />
        <jsp:forward page="error.jsp" />
      </c:when>
      <c:otherwise>
        <c:redirect url="index.jsp" />
      </c:otherwise>
    </c:choose>
    

    理想情况下,您可以修改error.jsp,这样就不需要在会话中设置错误消息,但我不想太多地更改您的设计。

        3
  •  3
  •   Matt    16 年前

    一种简单的方法:

    <%@page errorPage="Error.jsp" %>
    
    <%
     String errorMessage = SomeClass.getInstance().doSomething();
     if (errorMessage != null) {
           throw new Exception(errorMessage); // Better throw the exception from doSomething()
     }
     pageContext.forward("index.jsp");
    %>
    
    
    Error.jsp
    .........
    <%@ page isErrorPage='true' %>
    <%
    out.print("Error!!!");  
    out.print(exception.getMessage());
    %>
    

    更好的方法:

    从servlet调用dosomething()。 在web.xml中设置错误页

    <error-page>
            <exception-type>java.lang.Exception</exception-type>
            <location>/WEB-INF/jsp/Error.jsp</location>
    </error-page>