我在eclipse上有一个现有的maven项目,我已经在其中包含了一个servlet类(ConfigFileInput.java
):
ConfigFileInput.java
是servlet类,而其他类是普通的java类,CreateMasterConfig.java
包含main方法。
我想在本地Tomcat服务器上部署此servlet。我已正确设置必要的maven依赖项和配置,maven会成功生成.war
文件。
当我将此.war
文件上传到我的Tomcat服务器并进行部署时,它无法启动。
所以,我在Tomcat文件夹中查找了我的webapp目录,发现所有相关的类都存在。
我怀疑我的servlet无法部署,因为main方法在CreateMasterConfig.java
而servlet类是ConfigFileInput.java
,但我不确定这是否属实,以及我应该如何纠正这个问题
我很感激对此提出一些建议。
修改
我的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">
<display-name>ConfigFileInput</display-name>
<description>
This application accepts a URL from user to read the Config File, validates it,
and merges into MasterConfigFile
</description>
<servlet>
<servlet-name>ConfigFileInput</servlet-name>
<servlet-class>ConfigFileInput</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ConfigFileInput</servlet-name>
<url-pattern>/ConfigFileInput</url-pattern>
</servlet-mapping>
编辑2:
刚检出Tomcat生成的日志文件,并遇到了这个错误:
SEVERE: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet
at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:802)
at org.apache.tomcat.util.digester.SetNextRule.end(SetNextRule.java:201)
at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1057)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1742)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2900)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1543)
答案 0 :(得分:2)
更改
<servlet-class>ConfigFileInput</servlet-class>
为:
<servlet-class>edu.apollogrp.dfe.configuration.masterconfig.ConfigFileInput</servlet-class>
这应该可以解决您的错误。
你应该知道关于servlet life-cycle的一些话。 servlet中没有任何main method
的要求。
答案 1 :(得分:1)
首先,如msangel在他/她的回答中所提到的那样,用完整的包名改变servlet名称。
其次,您需要了解错误消息:
java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet
当您尝试在.war文件中部署catalina.jar时,通常会发生这种情况。只需修复构建文件,即不要在.war文件中包含catalina.jar文件。这应该取消这个错误。