版本:apache-tomcat-6.0.29,winxp(cent5.4上也是如此)
配置:仅在conf/server.xml添加了如下的配置,其它的地方没有更改
<Host appBase="D:/dev/workspace/xxx/src/web" name="localhost" 
       unpackWARs="true" autoDeploy="true">            
      <Context docBase="." path="" reloadable="true"></Context>
</Host>
问题:
/admin开始的链接全部404
/admin目录下的文件,在报错时会显示
org.apache.jasper.JasperException: /index.jsp(4,1) File "/headers/RootHeader.jsp" not found
tomcat好像把/admin下的东西当成一个新的站点来发布了,而不是一个站点的子目录。像上面/admin/index.jsp会被理解成/index.jsp,所以所有的文件引用都是错误的,所有以/admin/开始的链接都找不到页面,站点引入的jar包中的类也无法使用。这个问题如何解决呢?/admin/index.jsp的报错:
HTTP Status 500 - type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception 
org.apache.jasper.JasperException: /index.jsp(4,1) File "/headers/RootHeader.jsp" not found
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:301)
org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:334)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:443)
org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1753)
org.apache.jasper.compiler.Parser.parse(Parser.java:127)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:238)
org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:118)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:193)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:360)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:594)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:316)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat链接404时的错误信息
HTTP Status 404 - /admin/boss/product/listProduct.dotype Status reportmessage /admin/boss/product/listProduct.dodescription The requested resource (/admin/boss/product/listProduct.do) is not available.
Apache Tomcat

解决方案 »

  1.   

    /index.jsp(4,1) File "/headers/RootHeader.jsp" not found
    (/admin/boss/product/listProduct.do) is not available.
    提示的很清楚啊
      

  2.   

    你是不是放到web-inf下面了。如果是这下面的话那是访问不了。如非在内部用servlet去访问。
      

  3.   

    嗯,这个的程序在apache-tomcat-5.5.12版本上运行是正常的。在tomcat6和7及最新的从官方上下的5.5上这些版本上都有这个问题。
    在6版本的tomcat上运行时其它的非admin开始的链接和目录,都是正常的。/index.jsp(4,1) File "/headers/RootHeader.jsp" not found
    在非admin开始的目录中去故意引用不存在的文件时,比如在/customer目录下,它是:/customer/index.jsp File "/headers/xxx.jsp" not found,它是有/customer在index.jsp前面的,而这个就没有admin在前面。
    另外,确实有些jsp在WEB-INF下面,但它们都是在内部servlet中访问的,它们中的不以/admin开头的也是正常的。
      

  4.   

    谢谢licip,ovecy两位朋友,这个admin的问题现在已经好了。参考它自带项目的配置,修改server.xml居然起效。方法如下:
    还是在配置上,可能tomcat高版本的要求高点吧。
    <Host appBase="D:/dev/workspace/xxx/src/web" name="localhost"  
      unpackWARs="true" autoDeploy="true">   
      <Context docBase="." path="" reloadable="true"></Context>
    </Host>
    这个代码在apache-tomcat-5.5.12上运行是可以的,在6上运行要去appBase的最后的/web,即更改为:
    <Host appBase="D:/dev/workspace/xxx/src" name="localhost"  
      unpackWARs="true" autoDeploy="true">   
      <Context docBase="." path="" reloadable="true"></Context>
    </Host>
    这样所有的链接代码就都可以访问了。我其实不太明白为什么appBase配置要在web布署目录的上一层目录上。