【问题标题】:Make JSP accessible via RequestDispatcher#include only仅通过 RequestDispatcher#include 使 JSP 可访问
【发布时间】:2017-07-16 00:54:06
【问题描述】:

我要解决的问题是,我有一个在 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 发出错误响应。

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

【问题讨论】:

    标签: jsp servlets requestdispatcher


    【解决方案1】:

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

    【讨论】:

    • 如何编译到WEB-INF文件夹中?
    • 太棒了!我不知道我可以在那里放任意东西。
    • @TonyBenBrahim 我猜它有效。我看到有人提到它here。我没有做足够的挖掘来找到官方规范。
    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2016-06-28
    相关资源
    最近更新 更多