RCP中调用内嵌版tomcat报No default web.xml 请大家帮忙

xiaokunyu 2008-11-22 01:14:24
我用的是embedded tomcat(内嵌版tomcat 5.5.27), 在RCP中启动tomcat, 报如下错误.

更多的信息:
两个项目, 一个SWT, 一个RCP,
用的是同一个web模组, 即两个项目都用spring去调用同一个tomcat服务.(所以tomcat端不需要更改)
SWT的调用正常, 而用RCP的调用就启动不了tomcat (web模组完全不变, 代码及配置都为同一份)

自检:
rcp项目中, classpath有引入tomcat与spring的包.
换过正常的web.xml, 也用过空的web.xml,也删掉过web.xml,也用过tomcat内置的原版web.xml
如果web.xml中<web-app>节点中, 没有任何信息, 启动时,不会报错, 但是tomcat依然启动不成功.
查过资料, 有说, 可能是因为eclipse3.2&3.3的版本的一个什么BUG会导致log4j或commons-logging使用不了.英文不怎么好, 所以也描述不清楚, 后换用eclipse3.4(有说3.4已修复那个BUG), 同样也是SWT程式调用正常,RCP调用不正常
NoSuchMethodException: org.apache.catalina.core.StandardContext addChild
有查过此包,有引入,包内有StandardContext.class, 查过源码,也有此方法. catalina.jar也用的是内嵌版tomcat5.5.27中自带的包
个人认为是rcp的classloader与普通的SWT程式不一样,导致些问题....


错误信息:
信息: Starting tomcat server
2008-11-22 12:34:06 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/5.5.27
2008-11-22 12:34:06 org.apache.catalina.core.StandardHost start
信息: XML validation disabled
2008-11-22 12:34:06 org.apache.catalina.loader.WebappLoader start
信息: Dual registration of jndi stream handler: factory already defined
2008-11-22 12:34:06 org.apache.catalina.startup.ContextConfig defaultWebConfig
信息: No default web.xml
2008-11-22 12:34:06 org.apache.tomcat.util.digester.Digester endElement
严重: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.core.StandardContext addChild

at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:897)
at org.apache.tomcat.util.digester.SetNextRule.end(SetNextRule.java:193)
at org.apache.tomcat.util.digester.Rule.end(Rule.java:229)


严重: Parse error in application web.xml file at jndi:/localhost/VenusServer/WEB-INF/web.xml
java.lang.NoSuchMethodException: org.apache.catalina.core.StandardContext addChild

at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2726)
at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2752)


我的web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<!-- 只要加上<servlet>这一段, 就会报错, 不加的话, 则不报错, 但是依然启动不了-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.service</url-pattern>
</servlet-mapping>
</web-app>



这个是调用embedded tomcat的代码,

public boolean startTomcat() throws Exception {
Embedded tomcat = new Embedded();

Engine engine = tomcat.createEngine();

Host host = tomcat.createHost("localhost",
"F:/***/***/***/" + "websevice/webapps"); //tomcat webapps所在的目录

String appPath = host.getAppBase() + "/" + "VenusServer"; //服务名
Context context = tomcat.createContext("/" + "VenusServer", appPath);

host.addChild(context);
engine.addChild(host);
engine.setDefaultHost(host.getName());
tomcat.addEngine(engine);

Connector connector = tomcat.createConnector(InetAddress.getByName("localhost"), 8080,
false);
tomcat.addConnector(connector);

tomcat.start();
return true;
}


给出建议的, 或有解决, 将另开贴加分 谢谢各位!!!
...全文
473 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
低调de程序渣 2011-11-17
  • 打赏
  • 举报
回复
No Default web.xml 此问题是由于tomcat下conf/web.xml文件被不当操作删除了,可能是由于删除work整个目录造成,或者其他原因
xiaokunyu 2010-01-18
  • 打赏
  • 举报
回复
忘记结贴了, 感激各位的关注.

问题最终如何解决与是否解决了, 我也忘记了, 很长时间了...

好像也是自己一个一个的jar包去试的.
jinxfei 2009-05-04
  • 打赏
  • 举报
回复
apache commons 开源代码中的Digester,是用来做xml分析的,
这个包对其它commons系列包的版本依赖比较严重。

你最好确认一下两个版本中用到的commons-xxxxxx.jar是否完全一致,
另外与tomcat/lib目录下的版本是否有冲突。
yageryy 2009-05-04
  • 打赏
  • 举报
回复
关注ing
yageryy 2009-05-04
  • 打赏
  • 举报
回复
关注ing
wind9984 2008-11-26
  • 打赏
  • 举报
回复
楼主说的也有可能,等待答复,关注中
xiaokunyu 2008-11-25
  • 打赏
  • 举报
回复
首先表示感谢..大清早6点半就来帮忙了.

"我猜测是你的WEB-INF/lib 下面有不该有的jar文件了。而且版本不兼" 看到这一句话,
我还是明天回去仔细检查自己的web模块下的lib里的包,是否是冲突的原因.
可能不是tomcat的包有问题, 而是自己web模块里的包与tomcat的冲突了.
---------------本来是要回复下面一段话, ---------------------
内嵌版tomcat5.5.27是在官方下的.没有在tomcat下加其他应用包,
只是在RCP项目的classpath中加入了spring的包

我也试过不加入spring模块, 直接在java代码中启动tomcat, 返回简单的index.jsp的输出值, 但是tomcat根本就启动不了.

之前怀疑过是 log4j与commons-logging的版本冲突, 试过原版的tomcat lib不行, 换过最新的, 与其他项目中使用正常的包, 都不行.
如果说是跟spring的包冲突, 在SWT项目中, 同样的配置却是正常的.

老紫竹 2008-11-25
  • 打赏
  • 举报
回复
信息: No default web.xml
2008-11-22 12:34:06 org.apache.tomcat.util.digester.Digester endElement
严重: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.core.StandardContext addChild
at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:897)


我猜测是你的WEB-INF/lib 下面有不该有的jar文件了。而且版本不兼容
lihan6415151528 2008-11-24
  • 打赏
  • 举报
回复
单纯帮顶了
xiaokunyu 2008-11-22
  • 打赏
  • 举报
回复
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<!--加载系统配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/jdbc.properties</value>
</list>
</property>
</bean>

<!-- 配置数据源dataSource -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">

<!-- 其中变量引用/WEB-INF/jdbc.properties中的key -->
<property name="driverClassName"
value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

</beans>
xiaokunyu 2008-11-22
  • 打赏
  • 举报
回复
dispatcherServlet-servlet.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="hardList2.service">HardListService2</prop>
</props>
</property>
</bean>

<bean id="HardListService2"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="HardListDAO2" />
<property name="serviceInterface"
value="com.emis.ccrj.dao.IHardListDAO2" />
</bean>

<bean id="HardListDAO2"
class="com.emis.ccrj.dao.HardListDAO2"/>
</beans>
xiaokunyu 2008-11-22
  • 打赏
  • 举报
回复
帮顶的也先谢谢了.
gxglsshui 2008-11-22
  • 打赏
  • 举报
回复
不懂,帮顶
qap22 2008-11-22
  • 打赏
  • 举报
回复
不懂,帮顶

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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