【问题标题】:Maven Tomcat plugin - 404 WebServlet not foundMaven Tomcat 插件 - 找不到 404 WebServlet
【发布时间】:2015-08-19 06:38:57
【问题描述】:

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

当 URL http://localhost:8080/com.galya.crm 被点击时,index.html(这是一个 SPA 应用程序)会正常加载并重定向到 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>

附:该应用程序前段时间在另一台服务器上运行,因此问题应该出在服务器配置上,而不是代码本身。

【问题讨论】:

  • 我刚刚看到 Tomcat 服务器使用来自 \target\tomcat\conf\web.xml 的配置,其中版本为“2.5”。似乎这应该是问题所在,但是从上面粘贴 3.0 的 sn-p 不起作用...
  • 好吧,看来我犯了一个非常愚蠢的错误。我运行命令 tomcat:run,它启动了其他一些使用 Idea 配置的服务器,而不是插件。现在,当我使用命令 tomcat7:run 并使用版本 3 配置时,servlet 可以工作。但是即使在welcome-file-list 中列出,index.html 现在也会出现 404 错误

标签: maven tomcat servlets http-status-code-404


【解决方案1】:

原因肯定是部署描述符必须声明为版本 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">

自己测试过,效果不错。

【讨论】:

  • 你是说Doctype?
  • 是的。在最后一个脚本中,OP 设置了一个文档类型和一个模式,每个都有不同的版本。我猜 doctype 声明优先于模式,所以最好放弃它。
  • 这可能是问题所在,但很长一段时间过去了,我不确定发生了什么。我仍然会接受你的努力。
  • 谢谢。我知道很长一段时间过去了,但无论如何,我发布我的答案是为了启发其他搜索这个确切问题的用户。
猜你喜欢
  • 2017-02-13
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
相关资源
最近更新 更多