문제

순수한 자바와 동등한 것이 있습니까?u003Cjsp:forward page="..." /> < % ... %> 블록 내에서 사용할 수 있다고?

예를 들어, 현재 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);
    }
%>
도움이 되었습니까?

해결책

그만큼 someObject 당신은 찾고 있습니다 pagecontext.

이 객체는 JSP에 암시 적으로 정의되므로 다음과 같이 사용할 수 있습니다.

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

다른 팁

가능하면 실제로 스크립플렛을 피해야하며, 귀하의 경우에 많은 일을 JSTL 코드로 대체 할 수 있습니다. 예제에 대한 다음과 같은 대체품은 훨씬 깨끗합니다.

<%
  // 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());
%>

더 나은 접근 :

서블릿에서 dosomething ()을 호출하십시오. web.xml에서 오류 페이지를 설정하십시오

<error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/WEB-INF/jsp/Error.jsp</location>
</error-page>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top