Web.xml欢迎文件在jetty中不起作用

时间:2014-08-29 12:25:28

标签: tomcat jetty web.xml

我有一个webconf,其中包含webcontext rootname" testProject"。我尝试使用web.xml并配置welcome-file:

<welcome-file-list>
    <welcome-file>/jspFiles/index.html</welcome-file>
</welcome-file-list>

这适用于tomcat,但不适用于码头:

Tomcat 7.0:

    如果我浏览到localhost:8080/testProject/
  1. 会正确显示index.html 如果我浏览到localhost:8080/testProject/jspFiles/index.html
  2. 会正确显示index.html

    Jetty 9.0:

      如果我浏览localhost:8080/testProject/ ,则
    1. 出现404错误 如果我浏览到localhost:8080/testProject/jspFiles/index.html
    2. 会正确显示index.html

      我的webcontent文件夹如下所示;

      Webcontent
      |
      + jspFiles/index.html
      |
      + META-INF
      |
      + WEBINF
        |
        + web.xml
      

      我是否需要配置额外的东西以使其在jetty上工作?

2 个答案:

答案 0 :(得分:1)

<welcome-file>中找到的值只是附加到传入请求中,试图找到http客户端要求的资源。

带有'/'的条目只会使事情变得复杂(特别是在开头,这被认为是非规范化的)

以下面的例子为例:

Webapp deployed to '/foo'
You have 1 <welcome-file>jsps/index.jsp</welcome-file> set
Your webapp contents are:
    /WEB-INF/web.xml
    /jsps/index.jsp
    /css/main.css
    /js/jquery.js
    /bar/list.jsp

让我们看几个场景。

  1. /foo的来电请求
    • {webapp-base}/作为文件资源存在吗?都能跟得上
    • {webapp-base}/jsps/index.jsp作为文件资源存在吗?是的,处理它。
  2. /foo/bar的来电请求
    • {webapp-base}/bar作为文件资源存在吗?不。
    • {webapp-base}/bar/jsps/index.jsp作为文件资源存在吗?不。
    • 默认servlet返回404。
  3. “as file resource”部分过于简单,因为搜索文件资源可能是以下任何位置(这不是官方搜索顺序,请参阅官方订单的servlet规范)< / p>

    • WebApp的ClassLoader - 又名/WEB-INF/classes
    • /WEB-INF/resources/
    • 中的任何内容
    • /META-INF/resources/
    • 的jar文件中的/WEB-INF/lib/中找到的任何内容
    • 您的webapp根目录中的内容

    然后,JSP实现本身就增加了在其他位置查找内容的功能。

    主要是因为您对以*.jsp结尾的文件的请求意味着JspServlet(通常映射在jsp servlet名称)也会被要求提供内容。 有些实现甚至会对request.getPathInfo()中的任何内容使用传入的/WEB-INF/(这样做是为了允许jsps存在于/WEB-INF/my.jsp中以供JspServlet使用(编译时)并提供服务响应,但也获得/WEB-INF/的标准servlet规范安全性,并且永远不会在未经处理的情况下提供jsp源代码。

答案 1 :(得分:0)

我发现Eclipse.jsp向导使jsp非常接近应该的位置,但Eclipse嵌入式jetty或Eclipse生成.war都将.jsp放在服务器无法找到的地方。在这两种情况下,我都右键单击了jsp,选择了MOVE,然后将其放在嵌入式webapp文件夹或Java EE WAR的WebContent文件夹中。我在两种情况下为每个新的jsp I代码执行此操作。

很难展示,但我会尝试。 Eclipse运行嵌入式jetty的错误方法:

src/main/webapp (folder)
+>css           (package)
+>images        (package)
+>WEB-INF       (folder)
++>lib          (folder)
   web.xml
   my.jsp
   ohmy.jsp
   ohmygod.jsp

这里的web.xml在正确的位置,但我从未弄清楚到底是哪个地方。 永远找不到my.jsp。

现在,如果你使用move函数将my.jsp移动到src / main / webapp中 最终看起来像这样,找到my.jsp,一切正常。

src/main/webapp (folder)
+>css           (package)
+>images        (package)
+>WEB-INF       (folder)
++>lib          (folder)
   web.xml
  my.jsp
  ohmy.jsp
  ohmygod.jsp

正如我所说,我仍然不知道web.xml&#34;&#34;因为它与lib文件夹有关,但不在其中。 .jsp位于webapp文件夹中(它们确实是),文档说它们应该存在并且一切正常。它看起来与.war有点不同,但问题和解决方案是一样的。在最坏的情况下,只需移动.jsp(或者在您的情况下是欢迎文件),直到服务器找到它们,如果这些说明对您没有意义。

我现在有我需要的东西,但是当我(如果)找出欢迎文件时,我会回来并更新。