我注意到一个常见的模式是将JSP页面放在WEB-INF文件夹中(而不是WAR根目录)。有什么不同?为什么这是首选的?
答案 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所在的位置。