在webapp与WEB-INF下的spring mvc和jsp页面位置

Mit*_*ten 3 jsp spring-mvc

我对web-INF下的webapp vs下的spring mvc和jsp页面位置有疑问.

让我们说我们有以下设置.

webapp
  WEB-INF
    mvc-dispatcher.xml
    web.xml
  login.jsp
  register.jsp
  success.jsp
  error.jsp
  index.jsp
Run Code Online (Sandbox Code Playgroud)

我可以使用http://host.com/app/index.jsp这样的网址从浏览器引用页面,从那里我可以链接(一个href)到register.jsp.从register.jsp我发布到控制器,它可以返回解析为success.jsp的成功视图(使用InternalResourceViewResolver).

如果我在WEB-INF下移动jsp页面(而不是早先在webapp下),我将无法从浏览器中引用http://host.com/app/index.jsp.同样来自success.jsp目前我使用href ="index.jsp" 链接到index.jsp,需要将其更改为映射到控制器(可能位于/就像调度程序servlet),它将返回索引作为视图名称.所以我的所有链接都需要由控制器提供.我对吗 ?或者当jsp页面位于WEB-INF下时(参见InternalResourceViewResolver),有没有办法在没有任何映射控制器的情况下引用jsp页面.

问候,

米滕.

mad*_*ead 6

你是绝对正确的.您不能WEB-INF直接从浏览器中引用JSP .这非常好.您的所有请求都应该通过控制器转发到JSP,并且您的所有JSP都应该在WEB-INF.这样做的原因有很多:

  • 用户无法获得JSP的实际来源,并且它对安全性产生积极影响.
  • 许多JSP依赖于某些请求属性(模型).当用户直接从浏览器调用JSP时,Model不存在.这可能会打破一些逻辑.
  • 下面的一个JSP WEB-INF可用于提供不同的URL而无需任何更改,用户将对此一无所知!
  • 这是一个很好的做法,当你做MVC(模型2,而不是模型1)

考虑到您在没有Controller的情况下直接引用JSP的问题:

  • 您可以通过JSP错误页面直接将HTTP异常/ Throwables映射到JSP .例如,一种简单的技术适用于自定义404.
  • 使用Apache Tiles + Spring并访问一些/notmappedurlSpring(Tiles)时会尝试查找notmappedurl模板定义.(根据我对Tiles + Spring的经验).我认为其他视图技术也有类似的行为.
  • 写起来并不是很难:@RequestMapping("/someurl")void someurl(){}.Spring将尝试someurl根据方法名称查找视图.只是一个存根.