JSP : JSP 태그를 사용하지 않고 Java의 앞으로?
문제
순수한 자바와 동등한 것이 있습니까?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>
제휴하지 않습니다 StackOverflow