【发布时间】:2011-10-13 03:28:54
【问题描述】:
我注意到一个常见的模式是将 JSP 页面放在 WEB-INF 文件夹中(而不是 WAR 根目录)。有什么不同?为什么首选?
【问题讨论】:
我注意到一个常见的模式是将 JSP 页面放在 WEB-INF 文件夹中(而不是 WAR 根目录)。有什么不同?为什么首选?
【问题讨论】:
WEB-INF 中的文件对用户不可见。这样比较安全。
如果(一个人为的示例)您包含db.jsp,但它本身会引发异常,恶意用户可以打开http://yoursite.com/db.jsp 并从异常消息中了解您的应用程序(最糟糕的是数据库凭据) .
【讨论】:
我不认为这是一个好的设计模式,但我相信我可以解释其中的原因。
Servlet 容器不会提供 WEB-INF 中的任何内容。通过将 JSP 放在那里,您可以防止任何人通过在浏览器中按名称导航到 JSP 来直接访问它。如果您的一些 JSP 只是代码/标记的片段,并不打算直接使用,这可能被认为是一种好的做法,并且可能会打开一些您从未想过的安全漏洞。
即使在WEB-INF 中,仍然可以让容器按预期查看和使用 JSP。
【讨论】:
使用Controller(或 Front-Servlet)的一个额外好处是,您可以将 URL 路径与项目中 JSP 文件的物理位置分离。
作为示例,这里是来自 Spring Controller 的简单请求映射:
@RequestMapping(value = "/item/edit", method = RequestMethod.GET)
public String getItemEdit(@RequestParam(value = "id", required = false) final String id) {
return "itemeditform";
}
ViewResolver 负责将 URL 映射到 JSP 所在的位置。
【讨论】: