Struts2之访问Servlet API

目录

访问Servlet的API

ActionContext类(建议使用,与Servlet API解耦)

访问Servlet API常用方法

ServletActionContext类

static HttpServletRequest getRequest

static HttpServletResponse getResponse

static ServletContext  getServletContext

static PageContext getPageContext

XxxAware接口

ServletContextAware

ServletRequestAware

ServletResponseAware

SessionAware


访问Servlet的API

如果表单中有参数如何进行接收,又或者我们需要向页面保存一些数据,又要如何完成?

在Struts2中,Action并没有直接和Servlet API进行耦合,也就是说在Struts2中的Action不能直接访问Servlet API。虽然,Struts2中的Action访问Servlet API麻烦一些,但是这却是Struts2中Action的重要改良之一,方便Action进行单元测试。

尽管Action和Servlet API解耦会带来很多好处,然而在Action中完全不访问Servlet API几乎是不可能的,在实现业务逻辑时,经常要访问Servlet中对象,如session、request、和application等,在Struts2中访问Servlet API有三种方法,ActionContext类、ServletActionContext类、实现XxxAware接口。

其实三者本质上都是通过,ActionContext类完成的。

  • ActionContext类(建议使用,与Servlet API解耦)

Struts2框架提供了ActionContext类来访问Servlet API,ActionContext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括parameters、request、session、application等

Struts2中不推荐使用原生request域,ActionContext和request生命创建周期一样,可以直接将数据存储到ActionContext的map中

访问Servlet API常用方法

ActionContext类中访问Servlet API常用方法
方法声明 功能描述
static ActionContext getContext() 返回当前线程的ActionContext对象
Object get(String key) 通过参数key来查找当前ActionContext中的值
Map<String,Object> getApplication() 返回一个Application级的Map对象
Map<String,Object> getParameters() 返回一个包含所有HttpServletRequest参数信息的Map对象
Map<String,Object> getSession() 返回一个Map类型的HttpSession对象
void put(String key,Object value) 将key-value键值对放入ActionContext中,模拟Servlet API中的HTTPServletRequest的setAttribute()方法
void setApplicationMap<String,Object>application) 设置Application上下文
void setSession(Map<String,Object>application) 设置一个Map类型的Session值
public class HelloAction extends ActionSupport{
	
	private static final long serialVersionUID = 1L;

	public String Demo() throws Exception {
		/*
		 * request域
		 * 不推荐使用原生request域存储数据
		 * 推荐将需要存储到request域中的数据,直接放到ActionContext中
		 */
		ActionContext context = ActionContext.getContext();
//		Map<String, Object> requestScope = (Map<String, Object>) context.get("request");
		context.put("name", "mark");
		
		/*
		 * session域
		 */
		Map<String, Object> sessionScope = context.getSession();
		sessionScope.put("age", 15);
		
		/*
		 * application域
		 */
		Map<String, Object> applicationScope = context.getApplication();
		applicationScope.put("tele", 15264);
		return "success";
	}

}
 
  • ServletActionContext类

为了直接访问Servlet API,Struts2框架还提供了ServletActionContext类,该类中几个常用静态方法如下

static HttpServletRequest getRequest

获得Web应用程序的HttpServletRequest对象

static HttpServletResponse getResponse

获得Web应用程序的HttpServletResponse对象

static ServletContext  getServletContext

获得Web应用程序的ServletContext 对象

static PageContext getPageContext

获得Web应用程序的PageContext对象

public class HelloAction extends ActionSupport{
	
	private static final long serialVersionUID = 1L;

	public String Demo() throws Exception {
		//原生Request
		HttpServletRequest request = ServletActionContext.getRequest();
		
		//原生Session
		HttpSession session = request.getSession();
		
		//原生Response
		HttpServletResponse response = ServletActionContext.getResponse();
		
		//原生ServletContext
		ServletContext servletContext = ServletActionContext.getServletContext();
		return "success";
    }
}
  • XxxAware接口

Struts2框架提供了ActionContext类来访问Servlet API,虽然这种方法可以访问Servlet API,但是无法直接获得Servlet API实例,为了在Action中直接访问Servlet API,Struts2还提供了一系列接口

ServletContextAware

实现该接口的Action可以直接访问Web应用的ServletContext实例

ServletRequestAware

实现该接口的Action可以直接访问Web应用的HttpServletRequest实例

ServletResponseAware

实现该接口的Action可以直接访问Web应用的HttpServletResponset实例

SessionAware

实现该接口的Action可以直接访问Web应用的HttpSession实例

public class HelloAction extends ActionSupport implements ServletRequestAware{
	
	private static final long serialVersionUID = 1L;
	
	private HttpServletRequest request;
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}

}

猜你喜欢

转载自blog.csdn.net/mmake1994/article/details/81609130