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

Posted

技术标签:

【中文标题】webapp vs WEB-INF下的spring mvc和jsp页面位置【英文标题】:spring mvc and jsp pages location under webapp vs WEB-INF 【发布时间】:2013-02-04 00:19:02 【问题描述】:

我对 webapp 和 WEB-INF 下的 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 之类的网址从浏览器中引用页面,然后我可以从那里链接(a href)到 register.jsp。从 register.jsp 我发布到控制器,该控制器可以返回 success 视图,该视图解析为 success.jsp(使用 InternalResourceViewResolver )。

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

问候,

米腾。

【问题讨论】:

【参考方案1】:

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

用户无法获得 JSP 的实际来源,这对安全性产生了积极影响。 许多 JSP 依赖于某些请求属性才能存在(模型)。当用户直接从浏览器调用 JSP 时,模型不存在。这可能会破坏一些逻辑。 WEB-INF 下的一个 JSP 可以不加任何修改地服务不同的 URL,用户对此一无所知! 当您执行 MVC 时,这只是一个好习惯(Model 2,而不是 Model 1)

考虑到您对直接引用没有控制器的 JSP 的问题:

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

【讨论】:

似乎我需要一个合并控制器映射到 / 在方法级别使用更具体的 RequestMappings 来处理所有 jsps 映射,以便我可以根据您的示例在 href 中将它们引用为 /someurl 。我同意这样做的好处,但我想看看在某些情况下我是否可以通过某些情况下内容更加静态但仍然在 jsp 中只是为了将它们放在同一个文件夹中。 - 米滕。

以上是关于webapp vs WEB-INF下的spring mvc和jsp页面位置的主要内容,如果未能解决你的问题,请参考以下文章

在WEB-INF下的jsp页面想要访问webapp下面的css/addBook.css文件为啥不能访问

Spring Boot 配置文件介绍

spring项目中web-inf下不能引用页面资源

shiro+springmvc集成时,配置loginUrl='login.jsp',但是login.jsp页面在WEB-INF 目录下,导致无法显示

spring mvc 如何通过ACTION访问在WEB-INF下的html

spring配置中的classpath