Maven Tomcat 插件 - 找不到 404 WebServlet

Maven Tomcat plugin - 404 WebServlet not found

我有一个带有 Maven 的 Web 应用程序,它使用 Tomcat 服务器插件。该应用程序被编译为 .war ,在提取时,它似乎包含 WEB-INF/classes 文件夹中的所有 类 (包括 servlet)。

当urlhttp://localhost:8080/com.galya.crm gets hit, index.html (which is a SPA app) gets loaded normally redirecting to http://localhost:8080/com.galya.crm/#!/login/msg/notlogged

我有 4 个以类似方式注释的 servlet:

@WebServlet("/restapi/login")
public class LoginController extends HttpServlet {

当 SPA 应用程序尝试使用登录 servlet(如上所示)进行身份验证时,问题就出现了。我希望它在这里: http://localhost:8080/com.galya.crm/restapi/login ,但我收到 404 错误。

下面我附上了自动创建的Tomcat插件文件夹。工作目录是空的,我不确定它是否可以。

最初 webapp/WEB-INF/web.xml 是自动生成的,包含以下内容:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>

我也尝试将其更改为接受 WebServlet 注释,但也没有用:

<!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">
</web-app>

P.S。该应用程序之前在另一台服务器上运行,所以问题应该出在服务器配置上,而不是代码本身。

原因肯定是部署描述符必须声明为 3.0 版本。你的 web.xml 仍然是 2.3。

删除 DOCTYPE 声明并保留根节点,就像您已经做的那样:

<web-app 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">

我自己测试过,成功了。