Struts2 part 3:在Action中使用ServletAPI

1、使用ActionContext对象,采用解耦合的方式访问ServletAPI

ActionContext context = ActionContext.getContext();

 jsp

<form action="${pageContext.request.contextPath }/demo04/scope1.action" method="post">
		<input type="text" name="scopetext" /> <input type="submit" value="提交" />
	</form>

 action,通过context获取的对象都是Map,这种方式完全与Servlet解构

public class ScopeAction1 extends ActionSupport {
	@Override
	public String execute() {
		
		ActionContext context = ActionContext.getContext();
		//parameters 
		Map<String, Object> parameters = context.getParameters();
		//default return object
		String[] strs = (String[]) parameters.get("scopetext");
		System.out.println(strs[0]);
		
		//request scope
		context.put("reqinfo", "request scope");
		System.out.println(context.get("reqinfo"));
		
		//session scope
		Map<String, Object> session = context.getSession();
		session.put("sessioninfo", "session sceop");
		System.out.println(session.get("sessioninfo"));
		
		//appliction scope
		Map<String, Object> application = context.getApplication();
		application.put("appinfo", "application scope");
		System.out.println(application.get("appinfo"));
		
		return NONE;
	}
}

配置

	<package name="demo04" namespace="/demo04" extends="struts-default">
		<action name="scope1" class="demo04.ScopeAction1">
		</action>
	</package>

2、使用接口注入的方式使用ServletAPI

jsp

	<form action="${pageContext.request.contextPath }/demo04/scope2.action" method="post">
		<input type="text" name="scopetext" /> <input type="submit" value="提交" />
	</form>

 Action,通过实现接口,设置setXXX来获取HttpServletXXX对象

public class ScopeAction2 extends ActionSupport implements ServletContextAware, ServletResponseAware, ServletRequestAware {
	private HttpServletResponse response;
	private ServletContext context;
	private HttpServletRequest request;

	@Override
	public String execute() {

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

		// request scope
		request.setAttribute("reqinfo", "request scope");
		System.out.println(request.getAttribute("reqinfo"));

		// session scope
		 HttpSession session = request.getSession();
		 session.setAttribute("sessioninfo", "session sceop");
		System.out.println(session.getAttribute("sessioninfo"));

		// appliction scope
		context.setAttribute("appinfo", "application scope");
		System.out.println(context.getAttribute("appinfo"));

		return NONE;
	}

	@Override
	public void setServletResponse(HttpServletResponse response) {
		this.response = response;

	}

	@Override
	public void setServletContext(ServletContext context) {
		this.context = context;
	}

	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}

}

配置

		<action name="scope2" class="demo04.ScopeAction2">
		</action>

 3、通过ServletActionContext耦合的方式获取ServletAPI

jsp

	<form action="${pageContext.request.contextPath }/demo04/scope3.action" method="post">
		<input type="text" name="scopetext" /> <input type="submit" value="提交" />
	</form>

 Action

public class ScopeAction3 extends ActionSupport {

	@Override
	public String execute() {

		System.out.println(ServletActionContext.getRequest().getParameter("scopetext"));

		// request scope
		ServletActionContext.getRequest().setAttribute("reqinfo", "request scope");
		System.out.println(ServletActionContext.getRequest().getAttribute("reqinfo"));

		// session scope
		 HttpSession session = ServletActionContext.getRequest().getSession();
		 session.setAttribute("sessioninfo", "session sceop");
		System.out.println(session.getAttribute("sessioninfo"));

		// appliction scope
		ServletContext context = ServletActionContext.getServletContext();
		context.setAttribute("appinfo", "application scope");
		System.out.println(context.getAttribute("appinfo"));

		return NONE;
	}

}

 配置

		<action name="scope3" class="demo04.ScopeAction3">
		</action>

这三种方式最好的是第一种,Action和Servlet完全解耦合,通过ServletActionContext的方式是最直接的,但也是耦合度最高的

猜你喜欢

转载自mvplee.iteye.com/blog/2240323