Action访问Servlet API

        Struts2提供了两种方式来访问ServletAPI。

        一种是通过ActionContext访问Servlet API;

        另一种是通过实现*Aware()接口来获得Servlet API。

 通过ActionContext访问Servlet API

        ActionContext类提供了一个静态方法getContext(),该方法返回一个ActionContext的实例。该方法返回一个ActionContext的实例。这个实例提供了一些访问Servlet API的方法,学用的方法及其功能如下:

        ActionContext getContent()

                获取系统的ActionContext实例

        Map getSession()

                返回一个Map对象,该对象存入HttpSession实例

        void setSession(Map session)

                直接传入一个Map实例,将该实例中的key、value对应转换成session的属性名、属性值

        Map getApplication()

                返回一个Map对象,该对象存入ServletContext实例

        void setApplication(Map application)

                直接传入一个Map实例,将实例中的key、value对应转换成application的属性名、属性值

        Map getParameters()

                获得所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap方法

        通过这些方法,可以得到上下文和会话实例都是Map类型的,并没有得到ServletContext和Session,实际上Struts2把Map对象模拟成了ServletContext对象和HttpSession对象,从而将Servlet API从Action中分离出来。

eg:

ActionContext ac = ActionContext.getContext();
//获得Session
Map session = ac.getSession();
//获得Application
Map application = ac.getApplication()

      通常web开发中Request和Response对象比较常见,但在Struts2框架中由于Action能直接与JSP页面进行数据交互,所以通常都不会用到这两个对象.如想想在Struts2中使用这两个对象,可以通过ServletActionContext类,在这个类中包含了一些方法,能够获得和设置request和response对象,并且还能获得ServletContext对象。常用方法如下:

HttpServletRequest getRequest()

        获得Web应用的HttpServletRequest对象

HttpServletResponse getResponse()

        获得Web应用的HttpServletResponse对象

ServletContext getServletContext()

         获得Web应用的ServletContext对象

例如:

//获得HttpServletRequest
HttpServletRequest request = ServletActionContext.getRequest();
//获得HttpServletResponse
HttpServletResponse response = ServletActionContext.getResponse();
//获得HttpSession
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
//获得ServletContext
ServletContext sc = ServletActionContext.getServletContext();
通过实现*Aware()接口来获得Servlet API

        让Action实现SessionAware接口。除了获得Session外,还可以获得其它对象,如下:

实现接口名称获得Servlet对象
Applicationvoid setApplication(Map appliction)
CookiesAwarevoid setCookiesMap(Map cookies)
RequestAwarevoid setRequest(Map request)
ServletRequestAwarevoid setServletRequest(HttpServletRequest request)
ServletResponseAwarevoid setServletResponse(HttpServletResponse response)
SessionAwarevoid setSession(Map session)
使用Session对象的例子:

public class TestSession implements SessionAware {
	private Map session;
	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public void setSession(Map session) {
		this.session = session;
	}
	public String execute() throws Exception {
		if (user != null) {
			session.put("user",user)
			return SUCESS;
		} else {
			return ERROR;
		}
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值