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

时间:2013-02-19 10:41:55

标签: 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

我可以使用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 ,这需要更改为映射到控制器(可能在/ like调度程序servlet)将 index 作为视图名称返回。所以我的所有链接都需要由控制器提供。我对吗 ?或者当jsp页面位于WEB-INF下时(在配置了InternalResourceViewResolver的情况下),有没有办法在没有任何映射控制器的情况下引用jsp页面。

此致

米滕。

1 个答案:

答案 0 :(得分:6)

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

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

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

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