Struts2 中获取资源的几种方法

使用org.apache.struts2.ServletActionContext对象

该对象包含了一下几个静态方法,用于获取http中的资源信息

public static javax.servlet.http.HttpServletRequest getRequest();  
public static javax.servlet.http.HttpServletResponse getResponse();  
public static javax.servlet.ServletContext getServletContext();  

使用方法例如:

public String execute(){  
    HttpServletRequest request = ServletActionContext.getRequest();  
    HttpSession session = request.getSession();  
    if(session.getAttribute("user")==null){  
        return LOGIN;     
    }else{  
        return SUCCESS;   
    }  
}  

实现Aware系列接口

实现Aware接口利用了依赖注入的方式能够让应用程序有更好的重用性。 Struts2提供了4种分别用来访问ServletContext、HttpServletRequest、HttpServletResponse、HttpSession对象的接口:

org.apache.struts2.util.ServletContextAware;  
org.apache.struts2.interceptor.ServletRequestAware;  
org.apache.struts2.interceptor.ServletResponseAware;  
org.apache.struts2.interceptor.SessionAware;  

使用者可以根据自己的需要去实现以上四种接口,使用方法如下:

1. ServletContextAware接口:

该接口有一个必须实现的方法:setServletContext。在调用实现这个接口的动作的时候,Struts将会在填充动作属性之前调用该动作的setServletContext方法,并且传递ServletContext对象。然后再执行动作方法(如默认的execute)。你所需要做的就是在动作中定义一个ServletContext类型的成员变量,再把这个setter继续写完,如:

private ServletContext servletcontext;  
    public void setServletContext(ServletContext servletcontext){  
        this.servletcontext = servletcontext;     
}     

之后你就可以在动作类中任何地方去使用ServletContext了。

2. ServletRequestAware接口:

该接口有一个setServletRequest方法,用法同 1。

3. ServletResponseAware接口:

该接口中有一个setServletResponse方法,用法同 1。

4. SessionAware接口:

SessionAware接口与其他三个接口有所区别。

不同于其他三个接口中的方法传递实体对象,SessionAware接口的setSession方法所传递的是一个java.util.Map。

在调用一个动作的时候,Struts将会检查动作类是否实现了SessionAware接口。如果是,则会调用它的setSession方法。在该方法中传递一个org.apache.struts2.dispatcher.SessionMap实例。这个类扩展自实现了java.util.Map的java.util.AbstractMap。Session是当前HttpSession对象的一个打包容器,它提供了一个指向HttpSession对象的引用指针。

在SessionMap的内部,指向HttpSession对象的引用指针是受保护的,所以我们不能从动作类中直接访问到它。不过SessionMap已经提供了一系列必要的方法作为与HttpSession共同的桥梁,供我们访问:

public void invalidate()  //验证当前的HttpSession对象。若HttpSession对象还没有被创建,就不会抛出异常。  
public void clear()  //清除HttpSession对象里面的所有属性。  
public Set entrySet()  //从HttpSession对象里返回一个属性集合(Set类型)。如果HttpSession对象不存在,则返回空集。  
public Object get(Object key)  //返回与指定关键字关联的会话属性。若HttpSession不存在或找不到该键,则返回空值。  
public Object put(Object key,Object value)  //把一个会话属性保存到HttpSession对象里并且返回该属性的值。若HttpSession不存在,则创建一个HttpSession对象。  
public Object remove(Object key)  //删除指定的会话属性并且返回该属性的值。如果HttpSession对象不存在,则返回空值。  

Friskit

继续阅读此作者的更多文章