监听对象 | 监听接口 | 监听事件 |
ServletRequest | ServletRequestListener | ServletRequestEvent |
ServletRequestAttributeListener | ServletRequestAttributeEvent | |
HttpSession | HttpSessionListener | HttpSessionEvent |
HttpSessionActivationListener | ||
HttpSessionAttributeListener | HttpSessionBindingEvent | |
HttpSessionBindingListener | ||
ServletContext | ServletContextListener | ServletContextEvent |
ServletContextAttributeListener | ServletContextAttributeEvent |
Listener接口 | Event类 |
HttpSessionListener | HttpSessionEvent |
HttpSessionActivationListener | |
HttpSessionAttributeListener | HttpSessionBindingEvent |
HttpSessionBindingListener |
<context-param>
<param-name>Name</param-name>
<param-value>Jack</param-value>
</context-param>
String name = (String)application.getInitParameter("Name");
${initPara.name}
String name = (String)ServletContext.getInitParameter("Name");
(ServletRequestAttributeEvent e):向Request对象添加新属性。
(ServletRequestAttributeEvent e):从Request对象中删除属性。
(ServletRequestAttributeEvent e):替换对象中现有属性值
<?xml version="1.0"encoding="UTF-8"?>
<web-app>
......
<listener>
<listener-class>pageage.listenerclass</listener-class>
</listener>
......
</web-app>
package handson.register;
import javax.servlet.ServletContextEvent;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.text.SimpleDateFormat;
public class OnlineListener implements HttpSessionAttributeListener{
//编写添加和删除属性方法
public void attributeAdded(HttpSessionBindingEvent e) {
UserList.addUser(String.valueOf(e.getValue()));
System.out.println("session(" + e.getSession().getId() + ")增加属性"
+ e.getName() + ",值为" + e.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent e) {
UserList.removeUser(String.valueOf(e.getValue()));
System.out.println("session(" + e.getSession().getId() + ")移除属性"
+ e.getName() + ",值为" + e.getValue());
}
//编写更改属性方法
public void attributeReplaced(HttpSessionBindingEvent e) {
String oldValue=String.valueOf(e.getValue());
String newValue=
String.valueOf(e.getSession().
getAttribute(e.getName()));
UserList.removeUser(oldValue);
UserList.addUser(newValue);
System.out.println("session(" + e.getSession().getId() + ")属性"
+ e.getName() + "的值,由"+oldValue+"更改为" + newValue);
}
//编写操作监听方法,Http会话的创建监听 ,
public void sessionCreated(HttpSessionEvent e) {
System.out.println("创建新会话session("+e.getSession().getId()+")");
}
//Http会话的销毁监听
public void sessionDestroyed(HttpSessionEvent e) {
System.out.println("销毁会话session("+e.getSession().getId()+")");
}
//编写操作上下文方法,监听ServletContext创建
public void contextInitialized(ServletContextEvent e) {
System.out.println("ServletContext初始化......");
}
//监听ServletContext销毁
public void contextDestroyed(ServletContextEvent e) {
System.out.println("ServletContext被销毁......");
}
//编写输出信息方法
private void print(String message) {
PrintWriter out = null;
try {
out = new PrintWriter(new
FileOutputStream("d:\\log.txt", true));
out.println(new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss").
format(new Date())
+ " " + message);
out.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
编写UserList类主要代码如下
package handson.register;
import java.util.Vector;
public class UserList {
private static Vector onlineUsers=new Vector();
public static void addUser(String userName){
onlineUsers.addElement(userName);
}
public static void removeUser(String userName){
onlineUsers.removeElement(userName);
}
//获取在线用户数量
public static int getUserCount(){
return onlineUsers.size();
}
public static Vector getVector(){
return onlineUsers;
}
}
package handson.register;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginDo extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest req,
HttpServletResponse resp)throws IOException{
String userName=req.getParameter("userName");
HttpSession session=req.getSession();
session.setAttribute("userName", userName);
resp.sendRedirect("index.jsp");
}
}
ExitDo类编写退出登录主要代码如下
package handson.register;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ExitDo extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
req.getSession().removeAttribute("userName");
resp.sendRedirect("login.jsp");
}
}
配置登录和退出Servlet :
<listener>
<listener-class>
handson.register.OnlineListener
</listener-class>
</listener>
<servlet>
<servlet-name>loginDo</servlet-name>
<servlet-class>handson.register.LoginDo</servlet-class>
</servlet>
<servlet>
<servlet-name>exitDo</servlet-name>
<servlet-class>handson.register.ExitDo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>loginDo</servlet-name>
<url-pattern>/loginDo</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>exitDo</servlet-name>
<url-pattern>/exitDo</url-pattern>
</servlet-mapping>
创建login.jsp页面
<form method="post" action="loginDo">
<center>
<h2>用户登录</h2>
<hr/>
<br/>
用户名:
<input type="text" name="userName"/>
<br/>
<input type="submit" value="登录" />
</center>
</form>
编写index.jsp页面中获得登录信息代码
<body>
<%
//如果未登录,转向登录页面
if(session.getAttribute("userName")==null){
response.sendRedirect("login.jsp");
}
Vector onlineUsers=UserList.getVector();
%>
<h2>登录成功</h2>
欢迎你 <span style="color:red;">
<%=session.getAttribute("userName") %>
</span>
<a href="exitDo">退出登录</a>
当前在线人数:<span style="color:red;">
<%=UserList.getUserCount() %>人</span>
<br/><br>
在线用户名单 :
<br/>
<select multiple="multiple" name="list"
style="width:200px;height:250px">
<%
for(int i=0;i<onlineUsers.size();i++){
out.write("<option>"+onlineUsers.get(i)+"</option>");
}
%>
</select>
</body>