使JSP可通过RequestDispatcher访问#仅包含

使JSP可通过RequestDispatcher访问#仅包含,jsp,servlets,requestdispatcher,Jsp,Servlets,Requestdispatcher,我试图解决的问题是,我有一个在Tomcat7上运行的web项目,其中大部分都是可公开访问的JSP页面,但也有一些JSP页面是不可公开访问的。这些“私有”页面由各种servlet使用,如下所示: response.setContentType(...); request.getRequestDispatcher("/private/example.jsp").include(request, response); 我希望私有JSP页面可以通过requestDispatcher#include()

我试图解决的问题是,我有一个在Tomcat7上运行的web项目,其中大部分都是可公开访问的JSP页面,但也有一些JSP页面是不可公开访问的。这些“私有”页面由各种servlet使用,如下所示:

response.setContentType(...);
request.getRequestDispatcher("/private/example.jsp").include(request, response);
我希望私有JSP页面可以通过
requestDispatcher#include()
访问,但如果客户机直接导航到例如/private/example.JSP,则不能访问

我现在处理这个问题的方式是从servlet设置一个请求属性:

request.setAttribute("okToAccess", true);
然后在JSP页面中检查该属性,如果找不到,则返回一个空文档。这有两个缺点:

  • 这段代码写起来既单调又烦人
  • 通过
    include调度的servlet不能修改响应状态/头,因此我不能从JSP发回403或404,我必须实现稍微复杂一些的逻辑,让调用servlet发出错误响应

  • 我的问题是:有没有更干净的方法来阻止对这些“私有”JSP的直接访问,同时仍然允许它们与
    include()
    一起使用?我可以放入
    web.xml
    或其他什么东西?

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

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

    如何在WEB-INF文件夹中编译它?太棒了!“我不知道我可以把任意的东西放在里面。”我想这是可行的。我看到有人提到它。我没有做足够的挖掘来找到一个正式的规范。它将如何在WEB-INF文件夹中编译?太棒了!“我不知道我可以把任意的东西放在里面。”我想这是可行的。我看到有人提到它。我没有做足够的挖掘来找到官方的规格。