求助:使用tomcat6时,项目中的目录/admin下的文件无法正常使用,/admin开始的链接404

tianjiaguo 2010-09-27 11:10:40
版本: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 report

message

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.do

type Status report

message /admin/boss/product/listProduct.do

description The requested resource (/admin/boss/product/listProduct.do) is not available.
Apache Tomcat
...全文
146 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
licip 2010-09-27
  • 打赏
  • 举报
回复
你是不是放到web-inf下面了。如果是这下面的话那是访问不了。如非在内部用servlet去访问。
ovecy 2010-09-27
  • 打赏
  • 举报
回复
/index.jsp(4,1) File "/headers/RootHeader.jsp" not found
(/admin/boss/product/listProduct.do) is not available.
提示的很清楚啊
tianjiaguo 2010-09-27
  • 打赏
  • 举报
回复
谢谢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布署目录的上一层目录上。
tianjiaguo 2010-09-27
  • 打赏
  • 举报
回复
嗯,这个的程序在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开头的也是正常的。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧