sessionlistener.java
来自「JAVA Servlet2.3外文书籍源码」· Java 代码 · 共 143 行
JAVA
143 行
package persistence.requester;
import java.sql.*;
import java.util.*;
import javax.naming.InitialContext;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.DataSource;
public class SessionListener implements HttpSessionListener,
ServletContextListener, HttpSessionAttributeListener {
/** The DataSource object */
private DataSource ds;
/** The servlet context with which we are associated */
private ServletContext context;
/** A hash table that stores reference to Requester objects */
private Hashtable sessions;
public void attributeAdded(HttpSessionBindingEvent event) {
if (event.getValue() instanceof Requester &&
event.getName().equals(Requester.KEY)) {
sessions.put(event.getSession().getId(), event.getValue());
}
}
public void attributeRemoved(HttpSessionBindingEvent event) {}
public void attributeReplaced(HttpSessionBindingEvent event) {}
public void contextInitialized(ServletContextEvent event) {
context = event.getServletContext();
sessions = new Hashtable();
}
public void contextDestroyed(ServletContextEvent event) {
context = null;
sessions = null;
}
public void sessionCreated(HttpSessionEvent event) {
// Obtain a data source, if one has
// not already been obtained.
if (ds == null) {
ServletContext context = event.getSession().getServletContext();
try {
InitialContext ctx = new InitialContext();
ds = (DataSource) ctx.lookup(context.getInitParameter("DataSourceConfig"));
} catch (Throwable t) {
log(t);
}
}
}
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("sessionDestroyed()");
Connection conn = null;
PreparedStatement pstmt_requesters = null;
Statement stm = null;
PreparedStatement pstmt_requests = null;
//CallableStatement cstmt = null;
String sessionID = event.getSession().getId();
Requester req = (Requester) sessions.get(sessionID);
if (req != null) {
try {
System.out.println("Initialize database resources.");
conn = ds.getConnection();
pstmt_requesters = conn.prepareStatement("INSERT INTO requesters (" +
"remote_host, user_agent) " +
"VALUES (?,?)");
pstmt_requesters.setString(1, req.getRemoteHost());
pstmt_requesters.setString(2, req.getUserAgent());
pstmt_requesters.execute();
System.out.println("Get the ID of the last entry");
stm = conn.createStatement();
ResultSet rset = stm.executeQuery("SELECT requester_id FROM requesters ORDER BY requester_id DESC");
rset.first();
int lastID = rset.getInt(1);
System.out.println("LAST ID: " + lastID);
pstmt_requests = conn.prepareStatement("INSERT into requests (" +
"requester_id, hitdate, uri) " +
"VALUES (?,?,?)");
for (Enumeration e = req.getRequests(); e.hasMoreElements(); ) {
System.out.println("request...");
pstmt_requests.setInt(1, lastID);
pstmt_requests.setDate(2, (new java.sql.Date((new java.util.Date()).getTime())));
pstmt_requests.setString(3, (String) e.nextElement());
pstmt_requests.execute();
}
} catch (Throwable t) {
if (conn != null) {
try {
conn.rollback();
} catch (SQLException ignored) {}
}
log(t);
// Make sure all resources are shut down.
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException ignored) {}
}
/*if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException ignored) {}
}*/
/*if (cstmt != null) {
try {
cstmt.close();
} catch (SQLException ignored) {}
}*/
}
}
// Remove the Requester object.
sessions.remove(sessionID);
}
private void log(Throwable t) {
if (context != null) {
context.log("SessionListener", t);
} else {
t.printStackTrace(System.out);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?