2014-08-29 75 views
2

我有一个webcontext rootname“testProject”的webapp。我试图用web.xml和配置欢迎文件:Web.xml欢迎文件在码头中不起作用

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

这部作品tomcat的,但不能在码头:

的Tomcat 7.0:

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

码头9.0:

  1. 给出了404错误如果我浏览到localhost:8080/testProject/
  2. 正确显示的index.html如果我浏览到localhost:8080/testProject/jspFiles/index.html

我WebContent文件夹看起来像这样;

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

我需要配置一些额外的东西来使这项工作在码头上吗?

回答

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}/作为文件资源? noope
    • 确实{webapp-base}/jsps/index.jsp作为文件资源存在吗?是的,处理它。
  2. /foo/bar
    • 传入的请求不存在{webapp-base}/bar作为文件资源?不。
    • 确实{webapp-base}/bar/jsps/index.jsp作为文件资源存在吗?不。
    • 默认servlet返回404。

的“为文件资源”部分是过于简化的,有目的的,作为一个文件资源搜索可以是下列任一位置的(这不是官方的搜索顺序,请参阅Servlet规范本作的官方命令)Web应用程序的

  • 的ClassLoader - 又名/WEB-INF/classes
  • /WEB-INF/resources/
  • 任何内容的任何内容在/META-INF/resources/发现在一个罐子里音响乐在你的webapp

然后根/WEB-INF/lib/

  • 内容时,JSP实现自己添加寻找在其他位置内容的能力。

    主要是因为您对以*.jsp结尾的文件的请求意味着JspServlet(通常映射在jsp servlet名称)也会被要求输入内容。 一些实现甚至会使用传入的request.getPathInfo()针对/WEB-INF/中的任何内容(这样做是为了允许jsps存在于例如/WEB-INF/my.jsp中供JspServlet使用(编译时)并提供响应,同时也获得标准servlet规范的安全性/WEB-INF/并且从来没有将jsp源文件本身提供给服务器,而没有经过处理。

  • 0

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

    这真的很难显示,但我会尝试。 错误的方式为Eclipse运行嵌入式码头:

    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没有找到,永远。

    现在,如果您使用移动功能将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“是”在哪里,因为它是与lib文件夹,但没有在它。 .jsp位于webapp文件夹中(他们的确是),文档说他们应该在哪里并且一切正常。对于.war而言,它看起来有点不同,但问题和解决方法是一样的。最糟糕的情况是,只要移动.jsp(或者你的情况下的欢迎文件),直到服务器找到它们,如果这些指令对你没有意义的话。

    我有我需要的那一刻,但当(如果)我找出欢迎文件,我会回来并更新此。