Struts2 网站上来多少人

strut.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

   <constant name="struts.action.extension" value="action,do,"></constant>

    <package name="default" namespace="/" extends="struts-default">
        <action name="login-ui">
            <result>/login.jsp</result>
        </action>
        <action name="user-login" class="user.action.UserAction">
            <result name="login-success">/login-success.jsp</result>
        </action>
        
        <action name="logout" class="user.action.UserAction" method="logout">
            <result name="logout-success">/login.jsp</result>
        </action>
    </package>

</struts>

Action中的业务实现:

  

package user.action;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.SessionAware;


public class UserAction implements SessionAware,ApplicationAware{
    private String username;
    public void setUsername(String username) {
        this.username = username;
    }
    public String execute(){
        //把用户信息存入Session域中
        //1:获取session 实现SessionAware接口
        //2:获取登录信息    :通过在Action中添加setter方法
        //3:把用户信息存入Session域中
        session.put("username", username);
        //在线人数+1
            //1:获取当前在线人数 :从application中获取。
    Integer count=    (Integer) application.get("count");
        if(count==null){
            count=0;
        }
            //2:当前人数+1
        count++;
        application.put("count", count);
        return "login-success";
    }
    
    public String logout(){
        //1.在线人数-1
        Integer count=(Integer) application.get("count");
        if(count !=null && count>0){
            count--;
            application.put("count", count);
        }
        //2.session失效 :用ServletActionContext获取到HttpServletRequest。让后用HttpServletRequest
            //获取到session :request.getSession() 调用:invalidate()
        HttpServletRequest request = ServletActionContext.getRequest ();
        request.getSession().invalidate();
        return "logout-success";
    }
    
    private Map<String,Object> session;
    public void setSession(Map<String, Object> session) {

        this.session=session;
    }
    private Map<String,Object> application;
    public void setApplication(Map<String, Object> application) {

        this.application=application;
    }
}

用到的知识就是:获取WEB资源:

    在 Action 中, 可以通过以下方式访问 web 的 HttpSession, HttpServletRequest, HttpServletResponse  等资源

      1:与 Servlet API 解耦的访问方式

        

      2:与Servlet API耦合的访问方式

      

-------------ActionContext---------

1):ActionContext 是 Action 执行的上下文对象, 在 ActionContext 中保存了 Action 执行所需要的所有对象, 包括 parameters, request, session, application 等.
2):获取 HttpSession 对应的 Map 对象:    
  public Map getSession()
3):获取 ServletContext 对应的 Map 对象:
      public Map getApplication()
4):获取请求参数对应的 Map 对象:
  public Map getParameters()
5):获取 HttpServletRequest 对应的 Map 对象:
  public Object get(Object key):

  ActionContext 类中没有提供类似 getRequest() 这样的方法来获取 HttpServletRequest 对应的 Map 对象. 要得到 HttpServletRequest 对应的 Map 对象, 可以通过为 get() 方法传递 “request” 参数实现

------------------解耦和方式的实现接口---------

Action 类通过可以实现某些特定的接口, 让 Struts2 框架在运行时向 Action 实例注入 parameters, request, session 和 application 对应的 Map 对象:

-----------耦合形式的        原生的Servlet API  ServletActionContent-------------

常用的方法:

 1:直接获取 HttpServletRequest 对象:
    ServletActionContext.getRequest()
   2:直接获取 HttpSession 对象
    ServletActionContext.getRequest().getSession()
  3:直接获取 ServletContext 对象
    ServletActionContext.getServletContext()

 

posted @ 2016-09-04 17:32  陆伟  阅读(289)  评论(0编辑  收藏  举报