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
下。这样做的原因有很多:
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文件为啥不能访问
shiro+springmvc集成时,配置loginUrl='login.jsp',但是login.jsp页面在WEB-INF 目录下,导致无法显示