【问题标题】:Jsp,Servelet URL DifferenceJsp,Servlet URL 区别
【发布时间】:2014-07-18 12:15:49
【问题描述】:

JSP 中的绝对路径servlet有什么区别。
我的示例项目结构:

Dynamic Project name:PathTest
1.html path:PathTest\WebContent\html\1.html
Context root of Project =PathTest

我通过几次尝试发现了以下内容

  1. Test.jsp 内部(在 Web 内容下): 链接到 1.html , 1.jsp

  2. web.xml 内部(WEB-INF 下):
    提供准确的绝对路径,因为我从 1.html 调用 Serv servelt
    /html/Serv.do"> (这里不包括/PathTest)

  3. Serv.java 内部:
    对 1.html 使用 sendRedirect 方法:
    res.sendRedirect("/PathTest/html/1.html");

  4. Serv.java 内部:
    1.html使用getRequestDispatcher方法:
    RequestDispatcher dispatch=req.getRequestDispatcher("/html/1.html"); (此处不包括/PathTest)

我的问题是:为什么在上述情况下需要不同的绝对路径以及容器如何在这种情况下找到资源?

我找到了一种避免这种混淆的方法,方法是让 context root ='/' 这样我就不必在任何情况下都包含“/PathTest”。但是将上下文根作为“/”是一种好习惯吗?

【问题讨论】:

    标签: jsp url servlets


    【解决方案1】:

    /PathTest 是 Servlet/JSP 术语中称为 context path 的概念的值,它是 servlet 上下文的属性。

    您面临两种环境:浏览器和 Servlet/JSP 容器。

    浏览器(仅限)看到 HTTP 协议,以及通过它传输的任何内容:HTML、CSS 和 javascript。当您生成这些内容时,您需要将/PathTest 放在任何必要的地方,但事实并非如此。现在context path 仅在 Servlet/JSP 环境中才有意义。您的浏览器对此一无所知,它可能正在处理一些完全不相关的技术,甚至不是 JSP 容器,尽管它只关心它。

    在 Servlet/JSP 容器中,您也不需要指定值 /PathTest,而且您不应该!如果需要,使用HttpServletRequest.getContextPath() 获取实际值。

    现在我们分别来看案例:

    1. 在JSP中:<a href="">...</a>会输出HTML,就是浏览器看到的,但是内容是JSP容器生成的,所以需要把context pathvalue以便链接能够正常工作。

      1.html

    2. 在web.xml里面,不用context path,它只由服务器解释,服务器已经知道了tcontext path的值。

    3. HttpServletResponse.sendRedirect(String location) 将向浏览器发送临时重定向响应(HTTP 状态 3xx)。因此,您需要手动包含上下文路径。在某些情况下,您可能希望在上下文路径之外进行重定向。

    4. HttpServletRequest.getRequestDispatcher(String path) 仅用作在上下文路径转发或包含资源的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2011-01-06
      • 2011-03-18
      • 2011-04-01
      • 2012-11-28
      • 2014-05-16
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多