java action api_action类访问ServletAPI

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

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ taglib prefix="s"uri="/struts-tags"%>4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngstruts2.demo1 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png 4f1150b881333f12a311ae9ef34da474.png

welcome.jsp

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@page language="java"contentType="text/html; charset=GBK"%>4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

struts2.demo1 4f1150b881333f12a311ae9ef34da474.png  

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png  本站访问次数:${applicationScope.counter } 4f1150b881333f12a311ae9ef34da474.png  ${sessionScope.user },你已经登陆 4f1150b881333f12a311ae9ef34da474.png  ${requestScope.tip }

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

LoginAction类的execute()

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicString execute()throwsException9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        ActionContext ctx=ActionContext.getContext();

d18c02628675d0a2c816449d98bda930.png        Integer counter=(Integer) ctx.getApplication().get("counter");

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifif(counter==null)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png            counter=1;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif        }else9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png            counter=counter+1;

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png        ctx.getApplication().put("counter", counter);

d18c02628675d0a2c816449d98bda930.png        ctx.getSession().put("user", getUsername());

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifif(getUsername().equals("ming")&&getPassword().equals("123456"))9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png            setTip("欢迎您,"+getUsername());

d18c02628675d0a2c816449d98bda930.pngreturnSUCCESS;

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif        }else9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngreturnERROR;

ecedf933ec37d714bd4c2545da43add2.png        }

另外,

虽然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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值