Struts2 中获取资源的几种方法

来源:互联网 发布:如何利用网络寻找客户 编辑:程序博客网 时间:2024/05/27 02:30
一,使用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对象不存在,则返回空值。
原创粉丝点击