かなり単純なアプリの開発中に問題が発生しました。どこから来たのか全くわかりません。
基本的に、Java アプリケーションからページを読み込もうとしているときに、アプリ全体のデータ (My DAO) の初期化を目的としたリスナーを有効にすると、Tomcat から 404 エラーが発生します。web.xml の行をコメントアウトしてリスナーを無効にすると、サーブレット呼び出しで 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
ます。呼び出されるメソッドは、データを JSP に渡す doGet(request, response) である必要があります。index
web.xml
this.getRequestDispatcher("/WEB-INF/index.jsp").forward(request,response);
ファイルが存在し、適切な名前が付けられていることを確認しました。それ以前は適切に動作していた別のサーブレット ( と の両方doGet
)doPost
が、フィルターがアクティブなときに応答しなくなったことに言及する価値があるかもしれません。