事件監聽器
一;監聽同一個用戶重複登陸
下面以一個用戶登陸列;來講解sessiong監聽器的原理和用法
1, 創建一個容器來封裝登陸用戶的信息,代碼如下:
package org.luojs.lister;
import java.util.ArrayList;
import java.util.List;
import com.luojs.struts.form.UserForm;
public class ListLister {
private static List list = new ArrayList();
public ListLister(){
super();
}
public List getList(){
return list;
}
public void addList(UserForm user){
this.list.add(user);
}
public void remove(int n){
list.remove(n);
}
/**
* 判斷新來的用戶是否也存在,如果存在,返回ture
* @param user
* @return true;
*/
public boolean isExec(UserForm user){
boolean flag = false;
for (int i = 0; i < list.size(); i++) {
UserForm userForm = (UserForm)list.get(i);
if(userForm.getUsername().equals(user.getUsername())){
flag = true;
break;
}
}
return flag;
}
}
2, 監聽器需要實現一個接口(implements HttpSessionAttributeListener),
package org.luojs.lister;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import com.luojs.struts.form.UserForm;
public class SessionLister implements HttpSessionAttributeListener{
/* 創建一個 ListLister 來封裝登陸的用戶對象 */
private static ListLister list = new ListLister();
/**
* 實現attributeAdded 方法,當用戶向session 中添加用戶對象時,觸法次方法
* 這個方法將把該用戶的信息保存到 ListLister 中
*/
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("wcome you ! add ");
if(arg0.getName().equals("username")){
System.out.println("wcome you ! add sssssssssssssss");
UserForm answer = (UserForm)arg0.getValue();
list.addList(answer);
}
}
/**
* 當有用戶登陸來時,判斷他是否已存在,如果存在,讓他出去
*/
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("wcome come your removed ");
int n=0;
UserForm p1 = (UserForm)arg0.getValue();
for(int i=0;i<list.getList().size();i++){
UserForm p2 = (UserForm)list.getList().get(i);
if(p1.getUsername().equals(p2.getUsername())){
n=i;
break;
}
}
list.getList().remove(n);
}
public void attributeReplaced(HttpSessionBindingEvent arg0) {
}
}
3, 處理用戶提交時的代碼:(這是在Struts 中的驗證)
public ActionForward longin(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm) form;// TODO Auto-generated method stub
boolean flag = false;
ListLister listuser = new ListLister();
HttpSession session = request.getSession();
String user = userForm.getUsername();
String pass = userForm.getPassword();
flag = userbiz.selectByName(user, pass);
if (flag) {
if (!listuser.isExec(userForm)) {
session.setAttribute("username", userForm);
return mapping.findForward("indexto");// 如果登陸成功,把權限轉交給JobsAction
} else {
error = "<h3><li>Sorry! 此用戶也存在,不能重複登陸 !</h3>";
}
} else {
error = "<h3><li> sorry ! this is your userName or passwrod error !</h3>";
}
request.setAttribute("error", error);
return mapping.findForward("backToIndex");// 回到登陸頁
}
3, 在web.xml中註冊監聽器;
<listener> <listener-class>org.luojs.lister.SessionLister</listener-class>
</listener>