我在struts上创建了一个动态web项目,当我尝试执行它时,我得到了错误
java.lang.NoClassDefFoundError:javax/servlet/过滤器导致的原因:java.lang.ClassNotFoundException:javax.servlet.Filter
问题是Tomcat正在查找javax.servlet.Filter
,但〉我有jakarta.servlet.Filter
Tomcat Version : 10.0
Struts Version : 2.5
有人能帮忙吗?先谢了。
项目树
struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="first" extends="struts-default">
<action name="Action" class="guild.Action">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="5.0">
<display-name>FSGuild</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Action.java
package guild;
public class Action {
public String execute() {
System.out.println("Someone called execute");
return "SUCCESS";
}
}
error.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Error</title>
</head>
<body>
<h1>ERROR</h1>
</body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>SUCCESS</title>
</head>
<body>
<h1>SUCCESS</h1>
</body>
</html>
2条答案
按热度按时间mjqavswn1#
问题是您使用的是Struts,而Struts还没有更新以支持Servlet规范5.0或更高版本(请参阅https://issues.apache.org/jira/browse/WW-5141)。Servlet规范5.0引入了一个重大的突破性变化,即将API从包
javax.servlet
移动到jakarta.servlet
。这意味着仍然使用旧包名称的库等将无法使用。您需要切换到Tomcat 9并将应用程序定义为Servlet规范4.0 Web应用程序(或Servlet规范3.1)。
0yg35tkg2#
javax.servlet
是JavaEE规范(Servlet规范〈= 5.0),jakarta.servlet
是JakartaEE规范(Servlet规范〉= 6.0)。您需要做的就是从Tomcat 10.0切换到10.1。
另见
唯一可能出现的问题是,如果您的应用程序具有两种规范的类,那么您可能希望找到一个可以在两种规范上并行运行的容器,例如符合https://docs.wildfly.org/的Wildfly 22.0.0