Могу ли я реализовать HttpSessionListener таким образом? - PullRequest
0 голосов
/ 18 ноября 2008

Я пытаюсь отследить действительные идентификаторы пользователей в своем Java-сервлете, могу ли я реализовать HttpSessionListener таким образом?

public class my_Servlet extends HttpServlet implements HttpSessionListener
{
  String User_Id;
  static Vector<String> Valid_User_Id_Vector=new Vector<String>();
  private static int activeSessions=0;

  public void sessionCreated(HttpSessionEvent se)
  {
// associate User_Id with session Id;
// add User_Id to Valid_User_Id_Vector
    Out(" sessionCreated : "+se.getSession().getId());
    activeSessions++;
  }

  public void sessionDestroyed(HttpSessionEvent se)
  {
    if (activeSessions>0)
    {
// remove User_Id from Valid_User_Id_Vector by identifing it's session Id
      Out(" sessionDestroyed : "+se.getSession().getId());
      activeSessions--;
    }
  }

  public static int getActiveSessions()
  {
    return activeSessions;
  }

  public void init(ServletConfig config) throws ServletException
  {
  }

  public void destroy()
  {

  }

  protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException
  {
    User_Id=request.getParameter("User_Id");
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
    processRequest(request, response);
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
    processRequest(request, response);
  }

  public String getServletInfo()
  {
    return "Short description";
  }
}

Как уведомить слушателя о завершении сеанса? Я пытаюсь обойти "/WEB-INF.web.xml" все вместе, это выполнимо? Или это имеет смысл?

1 Ответ

3 голосов
/ 18 ноября 2008

Это не обойдет /WEB-INF/web.xml. Кроме того, вы получите 2 экземпляра этого класса, а не 1, выполняющий обе функции. Я предлагаю вам поместить этот Вектор в ServletContext и иметь 2 отдельных класса.

В сервлете вы попадаете на него через getServletContext(). В слушателе вы будете делать что-то вроде этого:

public void sessionCreated(HttpSessionEvent se) {
    Vector ids = (Vector) se.getSession().getServletContext().getAttribute("currentUserIds");
    //manipulate ids
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...