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

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

WEB-INF中的文件对用户不可见。 这样比较安全

如果(一个人为的例子)包含了db.jsp ,但是它本身会抛出一个exception,恶意用户可以打开http://yoursite.com/db.jsp并获得一些关于你的应用程序的信息(最糟糕的是数据库凭证)从exception消息。

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

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

即使在WEB-INF仍然有可能让容器看到并使用JSP。

使用Controller (或Front-Servlet)时,额外加号是将URLpath与项目中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所在的位置。