私はサーブレットを初めて使用します。このチュートリアルに従っていますが、すべて正常に動作しますが、リクエストから属性を削除すると、適切なイベントがトリガーされません。これが私のコードです。
SOで同様のケースが見つかりませんでした。
サーブレット
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
ServletContext ctx = request.getServletContext();
ctx.setAttribute("User", "Pankaj");
String user = (String) ctx.getAttribute("User");
System.out.println("removing attr");
ctx.removeAttribute("User");
HttpSession session = request.getSession();
session.invalidate();
PrintWriter out = response.getWriter();
out.write("Hi "+user);
}
リスナー
@WebListener
public class AppContextAttributeListener implements
ServletRequestAttributeListener
{
public void attributeAdded(ServletRequestAttributeEvent arg0) {
System.out.println("ServletContext attribute added::{"
+ arg0.getName() + ","
+ arg0.getValue() + "}");
}
public void attributeRemoved(ServletRequestAttributeEvent arg0) {
System.out.println("here");
System.out.println("ServletContext attribute removed::{"
+ arg0.getName() + ","
+ arg0.getValue() + "}");
}
public void attributeReplaced(ServletRequestAttributeEvent arg0) {
System.out.println("ServletContext attribute replaced::{"
+ arg0.getName() + ","
+ arg0.getValue() + "}");
}
}
期待される出力
ServletRequest initialized. Remote IP=0:0:0:0:0:0:0:1%0
ServletContext attribute added::{User,Pankaj}
removing attr
here
ServletContext attribute removed::{User,Pankaj}
Session Created:: ID=8805E7AE4CCCF98AFD60142A6B300CD6
Session Destroyed:: ID=8805E7AE4CCCF98AFD60142A6B300CD6
ServletRequest destroyed. Remote IP=0:0:0:0:0:0:0:1%0
私の出力
ServletRequest initialized. Remote IP=0:0:0:0:0:0:0:1%0
ServletContext attribute added::{User,Pankaj}
removing attr
Session Created:: ID=8805E7AE4CCCF98AFD60142A6B300CD6
Session Destroyed:: ID=8805E7AE4CCCF98AFD60142A6B300CD6
ServletRequest destroyed. Remote IP=0:0:0:0:0:0:0:1%0
attributeAdded() は印刷されていますが、attributeRemoved() をトリガーすることはできません。これは、リスナーが適切に定義されていることを意味します。
ここで何が問題なのですか?Tomcat 7 とサーブレット 3 を使用しています