java - 自动更新 web.xml 中的 servlet-class

标签 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.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)

异常(exception)说明了一切, <servlet-class> servlet 的 web.xml 文件中的内容不正确。如果我更新路径,它会起作用,但我移动的 servlet 相当少。

可以自动更新整个 web.xml 文件来修复所有 <servlet-class>

最佳答案

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

Tomcat 7 是一个 Servlet 3.0 兼容容器。从 Servlet 3.0 开始,可以通过类上的 @WebServlet 注释来配置 servlet,而无需 web.xml 配置条目。仔细观察您刚刚创建的 servlet 类,它上面有一个 @WebServlet 注释,其中包含您在新建 Servlet 向导中指定的所有信息。

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

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {}

与配置 servlet 的传统方式完全相同

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

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

关于java - 自动更新 web.xml 中的 servlet-class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42783994/

相关文章:

java - 使用 Apache httpd 2.4.6 和 Tomcat 8 配置安全的 websockets

localdb的sqlserver的Java连接字符串

eclipse - Equinox发射器

java - Servlet 错误 :- 404 Not Found using HTML WEB FORM DATA

java - 从 API 方法到 Servlet 的 Google App Engine Java HTTP Post 图像

java - 如何使用java调整文本文件中的行号?

java - 警报对话框内的微调器和按钮 onClick 返回 NullPointerException

eclipse - m2eclipse "Resolve in workspace"但在 IntelliJ 中?可能的?

eclipse - 在 Perl 中使用 "use"时编译失败

html - 如何将 json 数据响应从 Servlet 发送到特定的 Url(Server)?