【问题标题】:Use JSPs without defining a servlet-mapping for them?使用 JSP 而不为它们定义 servlet 映射?
【发布时间】:2015-07-18 06:22:15
【问题描述】:

有没有办法通过仅从 servlet 向 JSP 分派,而不在 web.xml 中映射到 JspServlet (Tomcat 7) 的 <servlet-mapping> 来使用 JSP?

我想构建一个 webapp,它使用控制器 servlet 来处理输入并执行处理并最终移交给 JSP 进行渲染;即经典的 MVC 模式。

因此,servlet 包含(或转发到)JSP

request.getRequestDispatcher( "/view.jsp" ).include( request, response );

要完成这项工作,似乎除了在 web.xml 中有一个 <servlet-mapping> 之外别无他法,它将 "/view.jsp" 映射到 JspServlet。 (不管那个映射是什么。)

关键问题:有没有办法在不通过 servlet-mapping 暴露 JSP 的情况下使用它们? 如果 JSP 被映射,那么对它们的直接请求是可能的,这应该避免。 如果直接调用视图 JSP 将无法工作,缺少由 控制器 servlet。

没有使用任何框架。

【问题讨论】:

  • 我不明白你的问题。您想直接访问 JSP 而不使用 servlet?
  • 不,JSP 只能从 Controller servlet 调用。
  • 哦,所以只有 servlet 可以调用它,外部用户看不到它们的内容,对吧?
  • 将您的 JSP 放入 WEB-INF 文件夹,即使使用 servlet 映射,它们也无法访问。我不认为没有 JSP servlet 就可以轻松使用 JSP
  • 是的。好的,内容,即源代码,无论如何都不应该被看到......这导致了另一个重要方面:如果 JSP 没有映射到 JspServlet,而是驻留在 webapp 的可访问文件夹中,那么它必须确保它们不是由 DefaultServlet 提供的,否则它们在源中提供。

标签: java jsp servlets


【解决方案1】:

据我所知,防止用户直接访问服务器上的资源(如 JSP)但同时允许服务器访问它们的标准方法是将它们放在 WEB-INF 文件夹中。所以你可以尝试类似的东西

request.getRequestDispatcher( "/WEB-INF/views/view.jsp" ).include( request, response );

【讨论】:

  • 是的,没错。这样做。我之前尝试过这个,但是随后使用带有<jsp-file>/WEB-INF/view.jsp</jsp-file> 定义并将 /view 映射到这个 servlet。这样,仍然可以使用 URL /app/view 直接调用 JSP。解决方案是使用像默认 *.jsp 一样的通用映射。这样,客户端必须调用 /app/WEB-INF/view.jsp 才能直接访问 JSP,这当然会被阻止。
  • 对不起,但为什么你甚至想在你的 web.xml 中有 JSP 映射(我不是 JEE 专家,所以我有点好奇你想在这里实现什么)?
  • 没有映射就没有处理。通常在应用程序的 web.xml 中没有 JSP 映射,因为有一组 default 映射:*.jsp 映射到 JspServlet(说到 Tomcat)。 ${catalina.base}/conf 中还有另一个全局 web.xml,它被添加到每个应用程序 web.xml 中。我在我的应用程序的 web.xml 中使用了一个显式映射,因为我为 servlet 路径 "/" 定义了一个映射,即它是所有其他无法找到更具体映射的路径的后备。通过使用"/" 的映射,您可以禁用*.jsp 的默认映射,因此需要再次添加。
  • 好的,感谢您的澄清。其实现在我看到我的回答并没有完全回答你的问题。因此,请随时发布您自己的答案,您将在其中使用通用映射解释解决方案。如果你接受你的回答而不是我的回答,我不介意。
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 2013-05-20
  • 2017-02-21
  • 2021-04-15
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多