Caros, boa tarde.
Estou com um problema ao tentar listar as sessoes ativas de um container, a finalidade seria para matar determinadas sessoes ativas. O problema eh que qdo rodo a aplicacao, abro uma sessao ao acessar o servlet, e dps abro mais algumas para ver se ta listando certinho. Acesso o servlet de pcs diferentes/abro janelas do safari distintas…e nunca passa de 1 sessao. vejam o codigo:
Listener:
package app.listeners;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
* <p><b>A listener to get a session list from container.</b></p>
*
**/
public class SessionListListener implements ServletContextListener, HttpSessionListener {
public void contextInitialized(ServletContextEvent e) {
e.getServletContext().setAttribute("sessionList", new ArrayList());
}
public void contextDestroyed(ServletContextEvent e) {
}
public void sessionCreated(HttpSessionEvent e) {
HttpSession session = e.getSession();
List sessionList = (List) session.getServletContext().getAttribute("sessionList");
sessionList.add(session);
}
public void sessionDestroyed(HttpSessionEvent e) {
HttpSession session = e.getSession();
List sessionList = (List) session.getServletContext().getAttribute("sessionList");
sessionList.remove(session);
}
}
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<listener>
<listener-class>app.listeners.SessionListListener</listener-class>
</listener>
<servlet>
<servlet-name>SessionListServlet</servlet-name>
<servlet-class>app.servlets.SessionListServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SessionListServlet</servlet-name>
<url-pattern>/SessionListServlet</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
Parte importante do HTML:
<form name="submitForm" action="SessionListServlet" method="get">
<input type="submit" value="Touch this!"/>
</form>
Servlet:
package app.servlets;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import javax.servlet.*;
import javax.servlet.http.*;
/**
*
* @author dimitrimartins
* @version 1.0
*
*/
public class SessionListServlet extends HttpServlet {
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
/* TODO output your page here
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet SessionListServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet SessionListServlet at " + request.getContextPath () + "</h1>");
out.println("</body>");
out.println("</html>");
*/
out.close();
ArrayList sessionList = (ArrayList)this.getServletContext().getAttribute("sessionList");
Iterator it = sessionList.iterator();
while(it.hasNext()) {
HttpSession s = (HttpSession)it.next();
System.out.println(s.getId());
}
System.out.println("Session list size: " + sessionList.size());
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
Ao executar, a saida eh:
INFO: Server startup in 990 ms
May 11, 2008 2:09:43 PM org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/SessionListExample]
6C6289558972E2F762B54A5E7B2853E8
Session list size: 1
6C6289558972E2F762B54A5E7B2853E8
Session list size: 1
Na segunda ocorrencia o list size deveria sair 2…O numero grande ai, eh o session.getId(); de cada session.
Alguem poderia dar um help???
Muito grato desde ja…
Se ajudar: to usando o NetBeans 5.5 pra Mac OS X, no leopard 10.5.2 e tomcat 5.5 bundled.
Acessando pelo localhost ou por uma maquina fisica remota diferente da que esta rodando a aplicacao, da no mesmo.