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">
我自己测试过,成功了。
我有一个带有 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">
我自己测试过,成功了。