You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java EJB应用调用Controller时出现404错误,求排查思路

排查方向整理
  • 确认Servlet所在模块类型
    你的Controller Servlet必须放在**Web模块(WAR包)**中,而非纯EJB模块(JAR包)。EJB模块不会被JBoss的Web容器扫描处理Servlet注解,只有WAR包的WEB-INF/classes目录或其内部依赖的JAR包中的Servlet才会被识别。

  • 验证Servlet注解与类的正确性

    1. 检查@WebServlet注解的包路径:必须是javax.servlet.annotation.WebServlet,避免误用其他框架的同名注解。
    2. 确认Servlet类继承自javax.servlet.http.HttpServlet,且doGet方法的签名完全正确:
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          // 你的代码
      }
      
      方法权限、参数类型、抛出异常都不能出错,否则容器可能无法识别该方法。
  • 查看JBoss中Servlet的实际映射
    登录JBoss管理控制台(默认地址http://localhost:9990),找到已部署的OfflineInspections应用,进入Servlet标签页,检查是否存在/Controller的映射记录。如果没有,说明容器未加载该Servlet,需排查扫描或类加载问题。

  • 排查CSP过滤器缺失的影响
    日志中提到的Content-Security-Policy过滤器依赖缺失,可能导致Web应用初始化时出现隐性错误(虽显示部署成功,但Web组件未完全加载):

    1. 检查代码中是否存在@WebFilter注解引用了不存在的CSP过滤器类;
    2. 暂时注释掉所有与该过滤器相关的代码,重新部署后测试404问题是否消失。
  • 确认应用上下文路径与请求路径匹配
    前端请求的路径是http://localhost/OfflineInspections/Controller,需确认:

    1. 应用部署的上下文路径确实为/OfflineInspections(WAR包名称默认即为上下文路径,若为ROOT.war则是根路径);
    2. 前端页面的相对路径是否正确:若页面位于/OfflineInspections/pages/下,相对路径应改为../Controller而非Controller。
  • 开启JBoss DEBUG日志排查加载过程
    修改JBoss的standalone.xml配置,将Web容器相关日志级别调至DEBUG:

    <logger category="org.apache.catalina">
        <level name="DEBUG"/>
    </logger>
    

    重新部署后,查看日志中是否有关于Controller Servlet的加载、映射日志,或类加载失败、初始化异常等信息。

  • 检查Servlet API依赖兼容性
    确保项目中Servlet API依赖版本与JBoss EAP 7.0兼容(对应Java EE 7,Servlet API 3.1),且依赖范围为provided(避免打包进WAR包导致冲突)。Maven配置示例:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    
  • 测试极简Servlet验证基础映射
    编写一个无任何业务逻辑的极简Servlet:

    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/TestServlet")
    public class TestServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
            response.getWriter().write("Test Success");
        }
    }
    

    部署后直接访问http://localhost/OfflineInspections/TestServlet:

    • 若仍返回404:说明Web应用的Servlet扫描机制存在全局问题;
    • 若能正常访问:说明原Controller Servlet存在初始化失败、依赖注入错误等问题,需进一步排查其内部逻辑。

内容的提问来源于stack exchange,提问作者rphello101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 19:54:58