在struts2框架中三种方法获取与使用servlet api

在struts2框架中获取servlet api

 

对于struts2框架,不建议直接使用servlet api;

 

在struts2中获取servlet api有三种方式:

1.通过ActionContext来获取

   1.获取一个ActionContext对象。

ActionContext context=ActionContext.getContext();

   2.获取servlet api

注意:通过ActionContext获取的不是真正的Servlet api,而是一个Map集合。

api下的一些方法

1.context.getApplication()

2.context.getSession()

3.context.getParameter();---得到的就相当于request.getParameterMap()。获取请求参数,注意:不知为什么这里get到的数据会变成String类型的数组,所以你必须强转成String类型的数组

如:Map<String,Object> map3 = context.getParameters();
        System.out.println(((String[])map3.get("username"))[0]);

4.context.put(String,Object) 相当于request.setAttribute(String,String);

2.注入方式获取(这种方式是真正的获取到了servlet api)

 

1.要求action类必须实现提定接口。

ServletContextAware : 注入ServletContext对象

ServletRequestAware :注入 request对象

ServletResponseAware : 注入response对象

 

2.声明一个web对象,重定接口中的方法,使用接口中的方法的参数对声明的web对象赋值。

public class ServletDemo2Action extends ActionSupport implements
		ServletRequestAware {

	private HttpServletRequest request;

	@Override
	//在执行此方法之前,必定会先执行方法2
	public String execute() throws Exception {

		System.out.println(request.getParameter("username"));

		return null;
	}
	//方法2
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
}

 

 

扩展:分析其实现:

是使用struts2中的一个interceptor完成的.

<interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
 

 if (action instanceof ServletRequestAware) { //判断action是否实现了ServletRequestAware接口

HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST); //得到request对象.

((ServletRequestAware) action).setServletRequest(request);//将request对象通过action中重写的方法注入。

}

3.通过ServletActionContext获取.

在ServletActionContext中方法都是static。

getRequest();

getResposne();

getPageContext();

public class ServletDemo3Action extends ActionSupport {

	@Override
	public String execute() throws Exception {
		HttpServletRequest request = ServletActionContext.getRequest();

		System.out.println(request.getParameter("username"));
		return SUCCESS;
	}

}

猜你喜欢

转载自blog.csdn.net/xiaoshuo566/article/details/82467564
今日推荐