📜  tomcat 找不到符号@WebServlet (1)

📅  最后修改于: 2023-12-03 15:05:36.669000             🧑  作者: Mango

Tomcat 找不到符号 @WebServlet

当使用Tomcat部署Java Web项目时,有时候会出现以下错误信息:

找不到符号:@WebServlet

这是因为在Java 5及以上版本中引入了注解功能,而Tomcat默认使用的是Java 1.4(或更低版本)的编译器,因此无法识别@WebServlet这种注解。

要解决这个问题,可以尝试以下两种方法:

1. 修改Tomcat编译器版本

在Tomcat的conf目录下找到catalina.properties文件,编辑该文件,找到以下这行代码:

#List of comma-separated packages that start with or equal this string
#will cause a security exception to be thrown unless the exception is 
#specifically permitted in a policy file. 
#org.apache.catalina.security.SecurityClassLoad.securityManagerClass=

在该行代码下面添加以下新代码:

# Set Tomcat compiler's source and target levels
tomcat.util.scan.DefaultJarScanner.jarsToSkip=\
    tomcat-*.jar, \
    antlr-*.jar, \
    apache-*.jar, \
    commons-*.jar, \
    jasper-*.jar, \
    jsp-api*.jar, \
    junit-*.jar, \
    servlet-api*.jar, \
    tar-*.jar, \
    tomcat-util-*.jar

# Set Tomcat compiler's source and target levels
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
    tomcat-*.jar, \
    antlr-*.jar, \
    apache-*.jar, \
    commons-*.jar, \
    jasper-*.jar, \
    jsp-api*.jar, \
    junit-*.jar, \
    servlet-api*.jar, \
    tar-*.jar, \
    tomcat-util-*.jar

org.apache.catalina.STRICT_SERVLET_COMPLIANCE=false
org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true
org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true

保存文件后,重启Tomcat,就可以使用Java 5或更高版本的注解了。

2. 添加Servlet API到项目的Classpath中

在项目的Classpath中添加servlet-api.jar即可。

以上是两种解决方法,实际情况可能因为版本和配置的差异而有所不同,需要根据具体情况进行调整。