首页 > 代码库 > Struts2+DAO层实现实例03——添加监听器跟踪用户行为

Struts2+DAO层实现实例03——添加监听器跟踪用户行为

实例说明

  根据上两次的成品进行二次加工。

  加入Listener,监听用户的登陆注销情况。

所用知识说明

  采用SessionBindingListener对Session进行监听。

  同时,Action中获取Application,Session,request的方法(在此只列出一种)更多方法

    public class LoginAction {          private Map request;          private Map session;          private Map application;                    public String execute() {              request = (Map)ActionContext.getContext().get("request");              session = ActionContext.getContext().getSession();              application = ActionContext.getContext().getApplication();              request.put("username1", "jingjing1");              session.put("username2", "jingjing2");              application.put("username3", "jingjing3");              return "success";          }      }  

 代码实例

  登陆控制UserManagment

package UserBlock;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;import javafx.application.Application;import org.apache.struts2.views.util.ContextUtil;import javax.servlet.ServletContext;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionBindingListener;import java.util.ArrayList;import java.util.Map;/** * Servlet监听器,控制记录用户的登陆注销信息 * Created by Richard on 2017/6/16. */public class UserManagment {    class Userlistener implements HttpSessionBindingListener{        private  String username;        public String getUsername() {            return username;        }        public void setUsername(String username) {            this.username = username;        }        @Override        public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {                ActionContext context = ActionContext.getContext();                Map application = context.getApplication();                ArrayList online= (ArrayList) application.get("online");            if(online==null){                    online=new ArrayList();                }            online.add(username);            application.put("online",online);        }        @Override        public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {            ActionContext context = ActionContext.getContext();            Map application = context.getApplication();            ArrayList online= (ArrayList) application.get("online");            online.remove(username);        }    }    /*            登陆                首先判别是否登陆                已经登陆---->return                没有登陆---->获取对应的Session,存入对应用户名的listener     */    public void login(String username){        if(islogin(username)){            return;        }else{            Userlistener newUser=new Userlistener();            newUser.setUsername(username);            ActionContext actionContext=ActionContext.getContext();            Map session=actionContext.getSession();            session.put("username",newUser);        }    }    /*            判断是否登陆:                判别条件Session中是否有对应的该用户名的Listener                有--->已经登陆,未注销                无--->没有登陆     */    public  boolean islogin(String username){        ActionContext actionContext=ActionContext.getContext();        Map session=actionContext.getSession();        Userlistener judge= (Userlistener) session.get("username");        if(judge!=null){            return true;        }else {            return false;        }    }    /*              注销                    首先判断是否登陆                    已经登陆--->移除Listener--->true                    没有登陆--->false     */    public boolean logoff(String username){        if(islogin(username)){            ActionContext actionContext=ActionContext.getContext();            Map session=actionContext.getSession();            session.remove(username);            return true;        }else {            return false;        }    }    /*            人数统计                 返回Session中List的Size。     */    public int returnNum(){        ActionContext actionContext=ActionContext.getContext();        Map session=actionContext.getSession();        ArrayList online= (ArrayList) session.get("online");        if(online==null){            online=new ArrayList();        }        return online.size();    }    /*            list返回     */    public ArrayList  returnlist(){        ActionContext actionContext=ActionContext.getContext();        Map session=actionContext.getSession();        ArrayList online= (ArrayList) session.get("online");        if(online==null){            online=new ArrayList();        }        return online;    }}

主页in.jsp

<%--  Created by IntelliJ IDEA.  User: Richard  Date: 2017/6/16  Time: 21:38  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="s" uri="/struts-tags" %><html><head>    <title>Welcome</title></head><body><h1>WelCome to My Struts Page</h1><hr>当前登录的用户:${param.username}<br><hr>当前所有登陆的用户:<table border=1 width=200>    <s:iterator value="#application.online" var="user">        <tr <s:if test="#user.odd"> style="background-color: dimgray"  </s:if> >            <td><s:property value="#user.count"></s:property> </td>            <td><s:property value="#user"></s:property></td>        </tr>    </s:iterator></table><a href="login.jsp">注销</a></body></html>

Action:

package UserBlock;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import java.util.ArrayList;import java.util.Map;import java.util.logging.LogManager;/** * Created by Richard on 2017/6/16. * 继承ActionSupport实现一个Action * 登陆界面通过loginuser.action调用login()方法来处理数据 *          login()方法中通过ActionContext调用Session对象,存入输入错误的数据 *          通过addActionMessage()方法向页面输出相关信息 * 注册页面通过reguser.action调用reg()方法来处理数据 */public class UserAction extends ActionSupport {    private String INDEX="index";    private String LOGIN="login";    private  String REG="register";    private String username;    private String password;    private String compassword;    private UserDao user;    private UserManagment managment;    public String getCompassword() {        return compassword;    }    public void setCompassword(String compassword) {        this.compassword = compassword;    }    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 login(){        try{            managment=new UserManagment();            user=new UserDao();            ArrayList result=user.up_select(username);            if(result.size()>0){                User aim= (User) result.get(0);                if(aim.getPassword().equals(password)){                    /*登陆成功*/                    managment.login(username);                    return INDEX;                }else{                    ActionContext applicton=ActionContext.getContext();                    Map session=applicton.getSession();                    int count;                    if(session.get("count")==null){                        count=0;                    }else{                        count= (int) session.get("count");                    }                    if(count>=3){                        addActionMessage("错误次数过多");                        count=0;                        session.put("count",count);                        return LOGIN;                    }else{                        count++;                        addActionMessage("您输入的用户名或密码错误"+count);                        session.put("count",count);                        return LOGIN;                    }                }            }else{                addActionMessage("该用户不存在,已经跳转到注册页面");                return REG;            }        }catch (Exception e){            addActionError(e.getMessage());            System.out.println(e.getMessage());            e.printStackTrace();            return LOGIN;        }    }    public String reg(){        try{            managment=new UserManagment();            user=new UserDao();            ArrayList result=user.up_select(username);            if(result.size()>0)            {                addActionMessage("该用户已经存在");                return REG;            }            else{                if(user.insert(username,password)){                    managment.login(username);                    return INDEX;                }else{                    addActionMessage("发生未知错误,请重试!");                    return REG;                }            }        }catch (Exception e){                addActionError(e.getMessage());                return REG;        }    }}

 

    

Struts2+DAO层实现实例03——添加监听器跟踪用户行为