为什么把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所在的位置。