为什么把JSP放在WEB-INF中?

时间:2011-07-26 06:01:23

标签: java jsp

我注意到一个常见的模式是将JSP页面放在WEB-INF文件夹中(而不是WAR根目录)。有什么不同?为什么这是首选的?

3 个答案:

答案 0 :(得分:34)

用户无法看到WEB-INF中的文件。这样有点安全。

如果(一个人为的例子)你包括db.jsp,但它本身会引发异常,恶意用户可以打开http://yoursite.com/db.jsp并对你的应用程序有所了解(最差 - 数据库凭据)来自异常消息。

答案 1 :(得分:11)

我认为这不是一个好的设计模式,但我相信我可以解释这个推理。

Servlet容器不会提供WEB-INF中的任何内容。通过将JSP放在那里,可以防止任何人通过名称在浏览器中导航到JSP来直接访问JSP。这可能被认为是一种很好的做法,如果你的一些JSP只是代码/标记的片段,并不打算直接使用,也许会打开一些你没有的安全漏洞。

即使在WEB-INF中,仍然可以让容器按预期查看和使用JSP。

答案 2 :(得分:5)

使用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所在的位置。