1 什么是web监听器?
web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如ServletContext,HttpSession,ServletRequest的创建和销毁;可以在某些动作前后增加处理,实现监控
2 监听器常用的用途
通常使用Web监听器做以下的内容:
连接池
统计在线人数,利用HttpSessionLisener
加载初始化信息:利用ServletContextListener
统计网站访问量
实现访问监控
Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
过滤器(客户端请求时)拦截request和response,listener实在获取对象(session、request)之前做一些事务处理
web文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>listenerproject</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>DataSourceServlet</servlet-name>
<servlet-class>com.neusoft.servlet.DataSourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DataSourceServlet</servlet-name>
<url-pattern>/DataSourceServlet</url-pattern>
</servlet-mapping>
<listener>
<listener-class>com.neusoft.listener.MyServletContextListener</listener-class>
</listener>
<listener>
<listener-class>com.neusoft.listener.SessionListener</listener-class>
</listener>
</web-app>
计数:
public class SessionListener implements HttpSessionListener{
int count=0;
@Override
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
count++;
session.setAttribute("count", count);
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("监听器销毁");
}
}
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent event) {
System.out.println("监听器销毁");
}
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext sc= event.getServletContext();
BasicDataSource bds = new BasicDataSource();
bds.setDriverClassName("com.mysql.jdbc.Driver");
bds.setUrl("jdbc:mysql://localhost:3306/db214");
bds.setUsername("root");
bds.setPassword("root");
sc.setAttribute("dataSource", bds);
}
public class DataSourceServlet extends HttpServlet{
private Connection connection;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext sc = getServletContext();
BasicDataSource bds = (BasicDataSource) sc.getAttribute("dataSource");
try {
Connection conn= bds.getConnection();
PreparedStatement ps = conn.prepareStatement("select * from emp");
ResultSet rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t"+rs.getString(4)+"\t"
+rs.getString(5)+"\t"+rs.getString(6)+"\t"+rs.getString(7)+"\t"+rs.getString(8)+"\t");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpSession session = request.getSession();
int count= (int) session.getAttribute("count");
System.out.println("您是第"+count+"位访问者");
}
@Override
protected void doPost(HttpServletRequest reqest, HttpServletResponse response) throws ServletException, IOException {
doGet(reqest, response);
}
}