现在的位置: 首页 > 综合 > 正文

Struts2 中获取资源的几种方法

2013年06月19日 ⁄ 综合 ⁄ 共 2199字 ⁄ 字号 评论关闭
一,使用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对象不存在,则返回空值。

抱歉!评论已关闭.