java - 监听器触发的错误 404

标签 java jakarta-ee tomcat servlets

我在开发一个相当简单的应用程序时遇到了问题。我完全不知道它来自哪里。

基本上,在尝试从我的 Java 应用程序加载页面时,当我启用旨在初始化应用程序范围数据 (My DAO) 的监听器时,我从 Tomcat 收到 404 错误。当我通过注释掉 web.xml 中的行来禁用监听器时,我在 servlet 调用中收到 500(由于缺少通过监听器类进行初始化,由 NPE 在 init() 方法中触发)。

知道它可能来自哪里吗?

这里是代码摘录

web.xml

    ...
    <listener>
        <listener-class>com.mypackage.InitialisationDAOFactory</listener-class>
    </listener>
    ...
    <servlet>
        <servlet-name>NewBooking</servlet-name>
        <servlet-class>com.mypackages.NewBooking</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>NewBooking</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>
    ...

初始化DAOFactory.java

    public class InitialisationDAOFactory implements ServletContextListener
    {
        private static final String ATT_DAO_FACTORY = "daofactory";
        private DAOFactory daoFactory;

            ...

        @Override
        public void contextInitialized(ServletContextEvent event)
        {
            ServletContext context = event.getServletContext();
            this.daoFactory = DAOFactory.getInstance();
            context.setAttribute(ATT_DAO_FACTORY, daoFactory);
        }
    }

NewBooking.java

    public class NewBooking extends HttpServlet
    {
        private static final String CONF_DAO_FACTORY = "daofactory";
    ...
        private BookingDAO = daoBooking;
        private TripDAO = daoTrip;

        public void init()
        {
            this.daoBooking = ( (DAOFactory) getServletContext().getAttribute(CONF_DAO_FACTORY)) .getBookingDAO();
            this.daoBooking = ( (DAOFactory) getServletContext().getAttribute(CONF_DAO_FACTORY)) .getBookingDAO();
        }
    ...
    }

500 发生在监听器不活动时(在 web.xml 中被注释掉)因此 daofactory 不在 servletContext 中,然后尝试访问它返回 null,因此 NPU on .getBookingDAO() 调用。 但是,我完全不知道 404 是从哪里来的。

有人知道它的起源和可能的更正吗?谢谢

编辑:应用在 TomCat 7 上运行

编辑 2:如评论中所述,我尝试使用 http://localhost/AppName/indexhttp://localhost/AppName 因为 indexweb.xml 中被声明为欢迎文件。调用的方法应该是 doGet(request, response),它使用 this.getRequestDispatcher("/WEB-INF/index.jsp").forward(request,response);

我确实检查了该文件是否存在并正确命名,可能值得一提的是另一个 servlet,它在此之前运行正常(均使用 doGetdoPost)当过滤器处于 Activity 状态时不再响应

最佳答案

监听器在上下文启动之前运行。如果监听器抛出异常,您的上下文将失败并且您只会看到 404,因为请求的 URI 上实际上没有应用程序。请参阅 catalina.out 启用日志记录以查看发生了什么。

关于java - 监听器触发的错误 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496617/

相关文章:

java - 使用复杂的 XML/JSON 进行 SmartGWT 数据检索

java - ejb-jar.xml : Allowed Methods for container-transaction tag

java - Tomcat + NetBeans + JAX-WS 示例项目导致 javax.xml.ws.WebServiceException

java - 悬停时 JFrame 上的图像(JLabel)变亮

java - 如何通过java检测重定向以检索access_token

java - Oracle 和 Java 中出现 UTF-8 字符问题

java - Maven项目中继承了什么

jakarta-ee - CDI 的静态实用方法 (Weld JEE6)

apache - 主机文件是否影响临时连接的设备?

java - 如何消除tomcat服务器的端口号