我试图解决的问题是我有一个在Tomcat 7上运行的Web项目,主要是可公开访问的JSP页面,但也有一些不能公开访问的JSP页面。这些“私有”页面由各种servlet使用,如:
response.setContentType(...);
request.getRequestDispatcher("/private/example.jsp").include(request, response);
我希望RequestDispatchaer#include()
可以访问私有JSP页面,但是如果客户端导航到例如,那么不能 /private/example.jsp 直接。
我现在处理这个问题的方法是从servlet设置一个请求属性:
request.setAttribute("okToAccess", true);
然后在JSP页面中我检查该属性,如果找不到则返回一个空文档。这样做的两个缺点是:
include
发送的Servlet无法修改响应状态/标头,因此我无法修改从JSP发回403或404,我必须实现稍微复杂的逻辑,让调用servlet发出错误响应。我的问题是:是否有更简洁的方法来阻止直接访问这些“私有”JSP,同时仍然允许它们与include()
一起使用?我可以放入web.xml
或其他什么东西?
答案 0 :(得分:2)
存储在WEB-INF中的任何内容都不会由Web容器直接提供。将您的私有jsp文件放在该文件夹中以通过servlet强制请求。