我在开发一个相当简单的应用程序时遇到了问题。我完全不知道它是从哪里来的。
基本上,在尝试从我的 java 应用程序加载页面时,当我启用旨在初始化应用程序范围数据(My DAO)的侦听器时,我从 Tomcat 收到 404 错误。当我通过注释 web.xml 中的行来禁用侦听器时,我在 servlet 调用上得到 500(由于缺少通过侦听器类进行的初始化,由 init() 方法中的 NPE 触发)。
任何想法从哪里来?
以下是代码摘录
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,因此在 .getBookingDAO() 调用上出现 NPU。但是,我完全不知道 404 来自哪里。
任何人都知道它的起源和潜在的更正吗?谢谢
编辑:该应用程序在 TomCat 7 上运行
编辑 2:如评论中所述,我尝试通过使用冷漠http://localhost/AppName/index
或http://localhost/AppName
在. 调用的方法应该是 doGet(request, response) ,它将数据传递给 JSPindex
web.xml
this.getRequestDispatcher("/WEB-INF/index.jsp").forward(request,response);
我确实检查了该文件是否存在并且是否正确命名,并且可能值得一提的是另一个 servlet,它在过滤器处于活动状态时不再响应,它之前表现正常(使用doGet
和)doPost