Tomcat正常启动,却打不开WebRoot目录下的html文件

What__If 2014-04-25 01:13:29
历史总是很讽刺,两天前我在这儿发帖求助大神解答为什么该出404的地方页面正常显示,现在又要问为啥老是给我404!

描述一下我遇到的问题,和我解决问题时候的努力吧。

今天在美橙买了个虚拟JSP空间,蛋疼的问题来了。项目在本地部署一切正常,访问一切正常。但是到了虚拟主机上,居然连WebRoot根目录下的一个html文件都打不开了。最关键的是启动没有任何报错信息。

经过一番努力,发现了,只要把web.xml里面struts2和spring的监听类注释掉,就可以正常访问jsp和html。

当然这个确实不是解决问题的好办法,总不能不用struts2和spring吧。

加上struts2和spring的侦听,用log4j开debug模式,打印日志的时候发现只打印了两行:
[DEBUG]_2014-04-25 00:41:34 :Stopping filters
[INFO ]_2014-04-25 00:41:34 :Shutting down log4j

虚拟主机提供的Tomcat版本是5.5,和我开发的版本6.0.35不太一致,我又在本地下载了一个5.5版本,居然还是没发现任何问题。

重启了TomcatN次,跟业务人员扯皮扯了半天,那边一口咬定是我程序的问题,好吧。

下面把一些关键代码贴出来,请大神指点一下,这里先谢过了。

web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
</filter>

<!-- log4j context-param -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j-config.properties</param-value>
</context-param>
<context-param>
<param-name>log4jExposeWebAppRoot</param-name>
<param-value>false</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
</web-app>


贴上报错的图,无论输入什么,都是这个。


启动日志:
Apr 25, 2014 1:00:29 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/lib
Apr 25, 2014 1:00:29 AM org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-9595
Apr 25, 2014 1:00:29 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 639 ms
Apr 25, 2014 1:00:30 AM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Apr 25, 2014 1:00:30 AM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.20
Apr 25, 2014 1:00:30 AM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
Apr 25, 2014 1:00:30 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/var/www/virtual/xhb1987fyy/webapps/ROOT/WEB-INF/lib/javaee.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Apr 25, 2014 1:00:31 AM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Apr 25, 2014 1:00:31 AM org.apache.catalina.core.StandardContext start
SEVERE: Context [] startup failed due to previous errors
[DEBUG] 2014-04-25 01:00:31 :Stopping filters
[INFO ] 2014-04-25 01:00:31 :Shutting down log4j
Apr 25, 2014 1:00:33 AM org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-9595
Apr 25, 2014 1:00:34 AM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:10595
Apr 25, 2014 1:00:34 AM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=1/21 config=null
Apr 25, 2014 1:00:34 AM org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
Apr 25, 2014 1:00:34 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 4288 ms

看到日志出的SEVERE: Context [] startup failed due to previous errors这句话,到网上找了一下,发现大部分都说是配置文件中文件路径问题。其他文件涉及到文件路径的也就是mybatis数据源里面的一句:classpath:mybatis-config.xml。

所以感觉问题还是出在了系统上面,开发是在windows下的,部署到linux下会产生问题吗? 如果有大神遇到过这个问题,请给一个思路,是不是需要装个linux虚拟机测试?

如果需要别的配置文件信息,请留言说明。

先谢过各位了。
...全文
5881 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
What__If 2014-04-26
  • 打赏
  • 举报
回复 1
引用 10 楼 xuefeng0707 的回复:
SEVERE: Error listenerStart
应该是两个Listener的问题,具体什么问题,看下Tomcat的其他日志文件里,看下有没有信息。
先感谢楼上各位提供的思路,大家集思广益终于把这个问题解决了。 现在第一时间贴出问题出现的原因和解决方案,如果有人之后遇过,请参考一下,也给自己留个备忘。 问题原因:本地与服务器上JDK版本不一致。 这里说明一下,我们写出的.java文件编译成.class文件走的是一个JDK流程,到tomcat容器中,运行.class文件这是另一个JDK(或JRE)流程。这两个环境如果Java版本不一致就会导致服务器直接在启动的时候宕掉。最关键的是,出错的时候尼玛Tomcat居然没有任何的提示!!! 而这个问题的隐蔽性在用MyEclipse里面开发达到了最大化。 我们都知道Tomcat启动的时候会自动检查环境变量里面的JAVA_HOME或JRE_HOME是否正确设置,如果没有设置就会提示错误。但是在这个过程中,如果是用Myclipse加载的Tomcat,这个java环境并不会应用到项目解析。 SHIT! 这个问题让我走到一个死胡同里面N久没出来。 而Tomcat运行项目时候所使用的Java环境从哪里来?如果你用了MyEclipse,这货会很无节操的自己帮你选一个JDK给TOMCAT做解析用,尼玛,以前一直用1.6的时候无视了这个问题,今天终于醒目的发现在window-preferences-myeclipse-servers-tomcat-Tomcat N.x下面还有JDK的设置,在这里指定的就是Tomcat运行时候解析的Java环境。 然后就是项目编译环境,大家应该都懂得,在Java-Compiler里面指定一个和Tomcat解析相同的版本就OK。 BUT,如果之前项目使用JDK1.6创建的话,直接把这里改成1.5会报Project Facets不匹配,解决办法是:右键项目名-properties-Project Facets(有的MyEclipse版本中,是在Properties-MyEclipse-Project Facets),把java版本设为1.5即可。 为了挽回这张3年码农的老脸,说的废话比较多,凑合着看吧。 另外,Tomcat报错信息不明确的问题,这里倒是有一个算是技巧吧,希望能给大家一点思路。我的这个问题解决也是多亏了log4j兄台。 方法就是利用log4j的DEBUG模式。我的项目中本身是有log4j的,只是把它的侦听类放到了最后,每次没加载到它服务器就挂了,因此一直没看到出错说明。所以,以后如果大家遇到在刚启动服务器就出问题的情况,可以考虑把log4j侦听类放到web.xml中的靠前的位置,比如放在welcome-file前面,这样就能确保第一时间看到出错的原因所在。 最后,还是说一下这次获取的一个额外的经验吧。web项目在windows和linux下面运行,路径是不需要单独设置的,你完全可以使用如/WEB-INF/XXX.xml和classpath:xxxx.xml这种形式指定配置文件在linux下运行。 再次感谢楼上各位提供的解决问题思路,结贴时分比较少不能一一照顾到请见谅。
Kamoe 2014-04-25
  • 打赏
  • 举报
回复
经过一番努力,发现了,只要把web.xml里面struts2和spring的监听类注释掉,就可以正常访问jsp和html 这是为什么 为什么注释掉监听就能正常访问啊 是不是先后顺序放错了 如果不注释掉 调整下顺序不可以吗
Juedaifanghua 2014-04-25
  • 打赏
  • 举报
回复
引用 3 楼 holycheng 的回复:
[quote=引用 1 楼 Juedaifanghua 的回复:] url没贴出来! 既然你说你本地测试没问题,那么你问题的重点应该放在-------本地和非本地的项目区别在什么地方?
你是指项目中的url吗? 现在是连welcome-file里面指向的根目录下的index.html文件都打不开啊。 linux那边的环境,因为是美橙的,我也看不到里面的布置。[/quote] 看看 访问的那个路径 服务端口
Fate- 2014-04-25
  • 打赏
  • 举报
回复
你打的包解压后 里面的东西检查一下,应该是路径的问题
tony4geek 2014-04-25
  • 打赏
  • 举报
回复
应该是路径的问题。
What__If 2014-04-25
  • 打赏
  • 举报
回复
引用 2 楼 defonds 的回复:
八成是路径问题
晚上回去装个虚拟机试试吧。
What__If 2014-04-25
  • 打赏
  • 举报
回复
引用 1 楼 Juedaifanghua 的回复:
url没贴出来! 既然你说你本地测试没问题,那么你问题的重点应该放在-------本地和非本地的项目区别在什么地方?
你是指项目中的url吗? 现在是连welcome-file里面指向的根目录下的index.html文件都打不开啊。 linux那边的环境,因为是美橙的,我也看不到里面的布置。
Defonds 2014-04-25
  • 打赏
  • 举报
回复
八成是路径问题
Juedaifanghua 2014-04-25
  • 打赏
  • 举报
回复
url没贴出来! 既然你说你本地测试没问题,那么你问题的重点应该放在-------本地和非本地的项目区别在什么地方?
What__If 2014-04-25
  • 打赏
  • 举报
回复
引用 10 楼 xuefeng0707 的回复:
SEVERE: Error listenerStart
应该是两个Listener的问题,具体什么问题,看下Tomcat的其他日志文件里,看下有没有信息。
先谢过楼上给位提示的思路。这里一起说一下吧。 首先我是直接把TOMCAT的webapps文件夹下编译后的项目取出的,而且单独下载过tomcat5.5到本地测试,结果一切正常。这应该排除了编译后项目的问题。 正如Juedaifanghua大神所说,应该是路径引用之类的出了问题,只是不太清楚windows和linux文件系统有哪里不一样。 今天在公司下载了虚拟机和ubuntu,晚上回家再做个减法,好好看看是哪个配置的问题。 如果问题解决了,我会第一时间发到这里。再次感谢楼上各位大神提供的解决思路。
xuefeng0707 2014-04-25
  • 打赏
  • 举报
回复
SEVERE: Error listenerStart
应该是两个Listener的问题,具体什么问题,看下Tomcat的其他日志文件里,看下有没有信息。
sunaer 2014-04-25
  • 打赏
  • 举报
回复
把spring和struts配置文件携程绝对路径, 试下

81,092

社区成员

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

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