컨트롤러에서 처리된 결과를
ModelAndView mav = new ModelAndView(); 를 통해서 jsp 와 맵핑 시켜주는 상황에서
상황 : A(정회원) B(준회원)
Log 를 살펴 보니
A의 경우에는
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel
(InternalResourceView.java:238) - Forwarding to resource [/WEB-INF/
jsp/mypage/paymentResult.jsp] in InternalResourceView 'mypage/
paymentResult'
라고 나오면서 원하는 대로 시스템이 작동되고( 결제화면에서 iFrame 화면으로 submit을 날리고
paymentResult.jsp 에서 부모페이지의 로케이션을 바꾸는 흐름입니다.)
B의 경우에는
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel
(InternalResourceView.java:229) - Including resource [/WEB-INF/jsp/
mypage/paymentResult.jsp] in InternalResourceView 'mypage/
paymentResult'
라고 나오고 paymentResult.jsp를 아예 로드를 못하는거 같습니다.
InternalResourceView를 확인해 본결과 아래와 같은 소스 이던데..
publc class InternalResourceView{
....
protected void renderMergedOutputModel(
Map model, HttpServletRequest request, HttpServletResponse
response) throws Exception {
// Expose the model object as request attributes.
exposeModelAsRequestAttributes(model, request);
// Expose helpers as request attributes, if any.
exposeHelpers(request);
// Determine the path for the request dispatcher.
String dispatcherPath = prepareForRendering(request, response);
// Forward to the resource (typically a JSP).
// Note: The JSP is supposed to determine the content type itself.
RequestDispatcher rd = request.getRequestDispatcher(dispatcherPath);
if (rd == null) {
throw new ServletException(
"Could not get RequestDispatcher for [" + getUrl() + "]: check
that this file exists within your WAR");
}
// If already included or response already committed, perform
include, else forward.
if (useInclude(request, response)) {
rd.include(request, response);
if (logger.isDebugEnabled()) {
logger.debug("Included resource [" + getUrl() + "] in
InternalResourceView '" + getBeanName() + "'");
}
}
else {
rd.forward(request, response);
if (logger.isDebugEnabled()) {
logger.debug("Forwarded to resource [" + getUrl() + "] in
InternalResourceView '" + getBeanName() + "'");
}
}
}
....
}
제가 의도한 상황은 A와 B 모두의 경우에 useInclude () 의 결과로 false 가 나와야 하는 경우인거 같은데
(확실하지는 않음) 어떻게 하면 이상황을 타개 할수 있을까요?
덤으로 useInclude 이게 정확히 무엇인지 알고 싶습니다.
include or
forward method.
Performs a check whether an include URI attribute is found in the request, indicating an include request, and whether the response has already been committed. In both cases, an include will be performed, as a forward is not possible anymore.
return (this.alwaysInclude || WebUtils.isIncludeRequest(request) || response.isCommitted());
안녕하세요. 스프링으로 개발중에 알수 없는 상황에 처해서 여러분께 도움을 요청 합니다.