只能通过RequestDispatcher #include访问JSP

时间:2017-07-16 00:54:07

标签: jsp servlets requestdispatcher

我试图解决的问题是我有一个在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页面中我检查该属性,如果找不到则返回一个空文档。这样做的两个缺点是:

  1. 这段代码是泛滥的,写起来很烦人。
  2. 通过include发送的Servlet无法修改响应状态/标头,因此我无法修改从JSP发回403或404,我必须实现稍微复杂的逻辑,让调用servlet发出错误响应。
  3. 我的问题是:是否有更简洁的方法来阻止直接访问这些“私有”JSP,同时仍然允许它们与include()一起使用?我可以放入web.xml或其他什么东西?

1 个答案:

答案 0 :(得分:2)

存储在WEB-INF中的任何内容都不会由Web容器直接提供。将您的私有jsp文件放在该文件夹中以通过servlet强制请求。