在web.xml中,当我改变它时:
<error-page>
<error-code>403</error-code>
<location>/unauthorized.jsp</location>
</error-page>
到此:
<error-page>
<error-code>403</error-code>
<location>/WEB-INF/unauthorized.jsp</location>
</error-page>
页面不再显示。
两个文件都存在且相同,其他错误类型的页面可以正常使用WEB-INF。
为什么会这样?
答案 0 :(得分:0)
WEB-INF内的文件受到保护,不会被客户端直接访问。它在JavaEE specification中定义。因此,当您将文件放在WEB-INF文件夹下时,它们将无法访问。因此,如果您需要直接访问它们,最好将这些(静态)文件放在WEB-INF目录之外。
注意:您可以放置应该受到保护的文件,以免客户端直接访问WEB-INF文件夹。
例如:WEB-INF / jsp / protected.jsp
详细说明您的评论。
您可以使用如下控制器映射映射403错误页面。 在这里,您将有一个常见的exception.jsp页面,具有不同的按摩,具体取决于位于WEB-INF文件夹内的错误代码。
@Controller
public class ExceptionController {
/** Holds key for access denied exception. */
private static final String ACCESS_DENIED = "COMMON.EXCEPTION.403";
/** Holds return model attribute ACCESS_DENIED. */
private static final String ACCESS_DENIED_ATT = "accessDenied";
/** Holds return model PAGE ACCESS_DENIED. */
private static final String ACCESS_DENIED_HTM = "/accessDenied.htm";
/** Holds return page of exception. */
private static final String EXCEPTION = "exception";
/**
* Handle access denied exception and display proper message.
*
* @param model - ModelMap
* @return the name of the view.
*/
@RequestMapping(value = ACCESS_DENIED_HTM, method = RequestMethod.GET)
public String accessDenied(ModelMap model) {
String message = new ErrorMsgLoader().getErrorMessage(ACCESS_DENIED);
model.addAttribute(ACCESS_DENIED_ATT, message);
return EXCEPTION;
}
}
您在web.xml中的错误映射如下所示。
<error-page>
<error-code>403</error-code>
<location>/accessDenied.htm</location>
</error-page>
在上面的代码中,我使用了基于Spring MVC的处理程序映射到视图。但是,如果您没有在应用程序中使用任何框架,则可以使用简单的Servlet映射执行相同的操作。