什么是监听器?
- Listener是Servlet的监听器
- 监听客户端的请求和服务器端的操作
- 通过实现Listener接口的类,可以在特定事件发生时,自动激发一些操作
什么是HttpSessionBindListener(接口)?
- 当一个实现了该接口的对象被捆绑到Session中或从Sessioon中被解放的时候启动监听
- 创建类实现HttpSessionBindListener接口
- ValueBound();
- valueUnbound();
- 不需要再web.xml中配置监听器
- 监听范围:一对一
实现页面访问人数的代码实现过程
package cn.kgc.pojo;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import cn.kgc.util.Constants;
public class User implements HttpSessionBindingListener {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
private String userName;
private String passWord;
private String email;
public void valueBound(HttpSessionBindingEvent arg0) {
Constants.USER_COUNT++;
}
public void valueUnbound(HttpSessionBindingEvent arg0) {
Constants.USER_COUNT--;
}
}
package cn.kgc.util;
public class Constants {
public static int USER_COUNT=0;
}
<body>
<form action= "doLogin.jsp">
用户名:<input type="text" name="userName">
<input type="submit" value="登入">
</form>
</body>
<body>
<%
String userName=request.getParameter("userName");
if(userName==null||userName.equals("")){
response.sendRedirect("login.jsp");
}else{
User user=new User();
user.setUserName(userName);
session.setAttribute("user", user);
response.sendRedirect("online.jsp");
}
%>
</body>
<body>
<%
User user=null;
if(session.getAttribute("user")==null){
response.sendRedirect("Login.jsp");
}else{
user=(User)session.getAttribute("user");
%>
欢迎你:<%=user.getUserName() %><br/>
目前在线人数<%=Constants.USER_COUNT %>
<a href="Loginout.jsp">离开</a>
<%
}
%>
</body>
- 编写离开页面(Loginout)销毁Session即可
<body>
<%
session.invalidate();
%>
</body>