Tomcat 8.5 无法加载@WebServlet 注解

Tomcat 8.5 无法加载@WebServlet 注解

我想将我的 Web 应用程序从tomcat7/转移java7tomcat 8.5/ java8。我的应用程序由一个目录组成,其中包含一些 JSP 文件和 WEB-INF 文件夹,其中包含我的应用程序的web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                          http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
      version="3.1"
      metadata-complete="false">
      ...
</web-app>

以下是 tomcat 虚拟主机配置的一部分:

<Host name="my-domain.ir" appBase="/path/to/my/webapp" >
    <Context path="" docBase="base-dir" 
     xmlValidation="false" xmlNamespaceAware="false" crossContext="false" reloadable="false" >
    ...
    </Context>
    ...
</Host>

假设我有以下 servlet 实现:

@WebServlet(
    name = "MyServlet1",
    urlPatterns = {"/MyServlet1"}
)
@SuppressWarnings("serial")
public class MyServlet1 extends HTTPServlet {
    ...
}

我已经创建了一个单独的 jar 文件,其中包含我的所有 servlet 实现,并将其添加到TOMCAT-HOME/lib文件夹中(因为它被多个虚拟主机使用并且我不想为每个虚拟主机单独将其加载到内存中)。

问题是,当 tomcat 启动时,我收到以下消息catalina.out

2016 年 12 月 2 日 19:32:44.442 FINE [localhost-startStop-1] org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan 在 [file:/opt/tomcat/lib/MY-SERVLETS-IMPL.jar] 中未找到 TLD 文件。请考虑将 JAR 添加到 CATALINA_BASE/conf/catalina.properties 文件中的 tomcat.util.scan.StandardJarScanFilter.jarsToSkip 属性中。

当我想使用地址访问我的 servlet 时,my-domain.ir/MyServlet1我得到了一个 404 未找到错误页面,但如果我添加 servlet 映射web.xml而不是使用注释,它就可以正常工作。在这两种情况下,我的 JSP 文件都可以正常工作。

有什么建议吗?

答案1

在 conf/context.xml 中请添加下面的代码,它可能会起作用

<JarScanner scanClassPath="false" />

默认情况下,scanAllDirectories、scanAllFiles 和 scanBootstrapClassPath 设置为 false,但 scanClassPath 为 true。因此将其设置为 false 可能会有效。

如果它不起作用请告诉我。

另请阅读, 我会帮你的。

相关内容