簡體   English   中英

jsp:在Java中轉發而不使用JSP標記?

[英]jsp:forward in Java without using JSP tag?

我可以在<%...%>塊中使用與<jsp:forward page =“...”/>等效的純Java嗎?

例如,我目前有一個這樣的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是丑陋的,並且由於縮進等原因使得更難閱讀。

那么,我可以在不使用JSP標記的情況下在Java代碼中進行轉發嗎?

這樣的事情是理想的:

<%
    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);
    }
%>

您正在尋找的someObjectpageContext

此對象在JSP中隱式定義,因此您可以像這樣使用它:

pageContext.forward("<some relative jsp>");

如果可以的話,你真的應該盡量避免使用scriplets,在你的情況下,很多你正在做的事情可以用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,以便甚至不需要在會話中設置錯誤消息,但我不想過多地更改您的設計。

一個簡單的方法:

<%@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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM