私は同様の問題に直面しており、web.xmlが読み取られるとリスナークラスがインスタンス化されることを学びました。リスナークラスには、メインサーブレットのdoPost(データベース(mysql)と対話してユーザーに関するデータの読み取り/書き込みを行う)とHttpSessionListenerのメソッドによって使用される関数がいくつかあります。それで、コンテナがリスナークラスをロードするのを妨げるものは何ですか。404エラーが発生します。
スニペット:
public class EntryServlet extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
PlayersList playa = new PlayersList(); //listener class
if(!playa.isExisting(params[3])){
if(params[1].equals("Register")){
playa.addPlayer(params);
}
}
else
out.println("Username already exists");
if(playa.isExisting(params[argUName],params[argUPwd])){
HttpSession session = request.getSession(true);
session.setMaxInactiveInterval(600);
HashMap playersMap = playa.getActivePlayers();
//code . .
}
else
out.println("Couldn't locate player Name!");
out.println(playa.getIn());
}
リスナークラス:
public class PlayersList implements HttpSessionListener{
private Connection cn;
private Statement st;
PlayersList(){
try{
Class.forName("com.mysql.jdbc.Driver");
cn = DriverManager.getConnection("jdbc:mysql://localhost/homeDbse\'","root","");
st = cn.createStatement();
}
catch(ClassNotFoundException ce){}
catch(SQLException se){}
catch(Exception e){}
}
public boolean isExisting(String player){
//interaction with dbse
}
public void addPlayer(String[] args){
//interaction with dbse
}
public void sessionCreated(HttpSessionEvent se){
//session managing
}
public void sessionDestroyed(HttpSessionEvent se){
//session managing
}