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

标签 jsp spring-mvc

我对 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 这样的 url 从浏览器引用页面从那里我可以链接 (a href) 到 register.jsp。我从 register.jsp 发布到 Controller ,它可以返回解析为 success.jspsuccess View (使用 InternalResourceViewResolver ).

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

问候,

米顿。

最佳答案

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

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

考虑到您对不带 Controller 直接引用 JSP 的问题:

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

关于jsp - webapp 与 WEB-INF 下的 spring mvc 和 jsp 页面位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14955438/

相关文章:

java - 在jsp中传递变量时出错?

java - 从使用 "iso-8859-1"编码的浏览器发布的字符,但它应该是 "UTF-8"

java - 如何获取默认的 WebApplicationContext?

javascript - 在外部链接的javascript中渲染EL变量

javascript - 如何隐藏地址栏中的Url?

java - JSP 中的隐藏输入在将其传递给 servlet 时会产生 null

java - 在 Spring 3.0 GET 请求中,@PathVariable 和 @RequestParam 之间有什么区别

java - long 类型的方法参数缺少 URI 模板变量 'id'

java - Apache CXF 网络服务问题

java - 通过 arraylist JAVA 使用主键添加和检索 MySql 数据库数据