Java 自动更新web.xml中的servlet类

Java 自动更新web.xml中的servlet类,java,eclipse,servlets,Java,Eclipse,Servlets,我在eclipse中有一个动态web项目。我在项目中创建了一些新包,并移动了一些servlet。现在servlet无法工作,因为web.xml文件中的路径没有更新。 它正在抛出以下异常 Mar 14, 2017 10:45:12 AM org.apache.catalina.core.ApplicationContext log INFO: Marking servlet ServletName as unavailable Mar 14, 2017 10:45:12 AM org.apache

我在eclipse中有一个动态web项目。我在项目中创建了一些新包,并移动了一些servlet。现在servlet无法工作,因为web.xml文件中的路径没有更新。 它正在抛出以下异常

Mar 14, 2017 10:45:12 AM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet ServletName as unavailable
Mar 14, 2017 10:45:12 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet ServletName
java.lang.ClassNotFoundException: com.package.database.ServletName
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1062)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:813)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at com.jamonapi.http.JAMonTomcatValve.invoke(JAMonTomcatValve.java:67)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
例外说明了一切,servlet的web.xml文件中的
是不正确的。如果我更新路径,它将工作,但我已经移动了相当多的servlet


是否可以自动更新整个web.xml文件以修复所有路径?

我不认为eclipse可以自动更新所有路径,但是如果您使用的是Tomcat 7.0,那么您有一个解决方案,如前所述

Tomcat7是一个与Servlet3.0兼容的容器。自Servlet 3.0以来,Servlet可以通过类上的@WebServlet注释进行配置,而不需要web.xml配置条目。仔细看看您刚刚创建的servlet类,它上面有一个@WebServlet注释,包含您在NewServlet向导中指定的所有信息

实际上,这种配置servlet的新方法

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {}
<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>
与配置servlet的这种传统方式完全相同

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {}
<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

helloServlet
com.example.HelloServlet
helloServlet
/你好

如果动态Web模块版本低于3.0,则必须在Project属性的Project Facets部分将其更改为3.0。

我认为eclipse无法自动更新所有路径,但如果您使用的是Tomcat 7.0,则有一个解决方案,如前所述

Tomcat7是一个与Servlet3.0兼容的容器。自Servlet 3.0以来,Servlet可以通过类上的@WebServlet注释进行配置,而不需要web.xml配置条目。仔细看看您刚刚创建的servlet类,它上面有一个@WebServlet注释,包含您在NewServlet向导中指定的所有信息

实际上,这种配置servlet的新方法

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {}
<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>
与配置servlet的这种传统方式完全相同

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {}
<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

helloServlet
com.example.HelloServlet
helloServlet
/你好

如果动态Web模块版本低于3.0,则必须在Project属性的Project Facets部分将其更改为3.0。

可能会将“路径名”与“类名”混淆?完全不同的事情!更新<代码>这就是web.xml中的名称。也许你把“路径名”和“类名”混淆了?完全不同的事情!更新
这就是web.xml中的名称。我正在使用Tomcat 7.0,但这又是一项艰巨的工作,因为我必须向每个Servlet添加
@WebServlet annotation
,我可能会手动更新web.xml。无论如何,感谢您的帮助我正在使用Tomcat 7.0,但这又是一项艰巨的工作,因为我必须向每个Servlet添加
@WebServlet annotation
,我可能会手动更新web.xml。无论如何谢谢你的帮助