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

Kon*_*rus 30 java jsp

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

Boz*_*zho 34

文件输入WEB-INF对用户不可见.这样有点安全.

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

  • 我不明白......当你打开JSP的URL而不是JSP代码时,你不会得到一个HTML响应吗?我可能会遗漏一些东西 (4认同)

Sea*_*wen 11

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

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

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

  • 这根本不是**设计**模式. (11认同)
  • 我同意@pap.1)它强制你将控制器放在JSP前面(Servlet,Action等),2)它确实隐藏了Java细节(.jsp结尾). (7认同)
  • 我不同意.我认为这是一个非常好的模式,因为它以简单,强大且易于理解的方式解决了一个真正的问题. (2认同)

ygl*_*odt 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";
}
Run Code Online (Sandbox Code Playgroud)

视图解析器采用URL映射到你的JSP居住的地方照顾.