Action访问ServletAPI
struts2的一个重大改良之处就是与ServletAPI的解耦。不过,对于Web应用而言,不访问ServletAPI几乎是不可能的。例如跟踪HTTPSession的状态。Struts2框架提供了一种轻松的方式来访问ServletAPI。通常需要访问的对象是HttpServletRequest,HttpServletSession,ServletContext,这三类也代表了JSP的内置对象中的request,session,application.
方法有:
1 Object get(Object key):类似于条用HttpServletRequest的getAttribute(String name)
2 Map getApplication:返回对象为map,模拟了ServletContext。
3 Static ActionContext().getContext(),获取ActionContext实例。
4 Map getParameters()
5 void setApplication(Map application)
6 void setSession(Map session)
用一个2方法,获取ActionContext实例,通过该对象的getApplication()和getSession()的put(key,value)方法,实现访问ServletAPI。
一个用ActionContext().getContext()获取ServletContext的例子
index.jsp
@page language="java"contentType="text/html; charset=GBK"%>
@ taglib prefix="s"uri="/struts-tags"%>
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
welcome.jsp
@page language="java"contentType="text/html; charset=GBK"%>
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
![4f1150b881333f12a311ae9ef34da474.png](https://i-blog.csdnimg.cn/blog_migrate/b2459b5195c09ae0fd014c54f2df42a3.png)
LoginAction类的execute()
publicString execute()throwsException
{
ActionContext ctx=ActionContext.getContext();
Integer counter=(Integer) ctx.getApplication().get("counter");
if(counter==null)
{
counter=1;
}else
{
counter=counter+1;
}
ctx.getApplication().put("counter", counter);
ctx.getSession().put("user", getUsername());
if(getUsername().equals("ming")&&getPassword().equals("123456"))
{
setTip("欢迎您,"+getUsername());
returnSUCCESS;
}else
{
returnERROR;
}
另外,
虽然Struts2提供了ActionContext来访问ServletAPI,但是并不能直接获得ServletAPI的实例。但是Struts2提供了一下接口,
1 ServletContextAware:实现该接口的Action可以直接访问ServletContext实例。
2 ServletRequestAware:实现该接口的Action可以直接访问HttpServletRequest实例。
3 ServletResponseAware
例如
Action类
public class LoginAciton implements Action,ServletResponseAwre{
private HttpServletResponse response;
private String username;
private String password;
....//setter getter
public void serServletResponse(HttpServletResponse response){
this.response=response;
}
public String execute() throws Exception{
Cookie c = new Cookie("user",getUsername);
c.setMaxAge(60*60);
response.addCookie(c);
return SUCCESS;
}
}
//通过HttpServletResponse为系统添加Cookies对象。
jsp页面
从系统中读出Cooki值:${cookies.user.value}
=======虽然可以在Action中获得HttpServleResponse对象,但是希望通过它来生成服务器相应是不可能的。即使在Struts2中获得了HttpServletResponse对象,也不要尝试直接在Action中对客户端生成相应。没有任何实际意义。
posted on 2009-11-05 01:03 南朝 阅读(179) 评论(0) 编辑 收藏 所属分类: Struts2