Struts2常用类及方法

Struts的学习过程中,感觉很多东西都有一种似曾相识的感觉,但是同时也有一种傻傻分不清的感觉,今天就把那些我认为Struts中比较难分的类说明讲述一下。


Action


Action是一个接口,里面定义了SUCCESS NONE ERROR INPUT LOGIN 以及一个抽象方法execute()


import com.opensymphony.xwork2.Action;
/*
 * 动作类:实现Action接口
 */
public class HelloAction2 implements Action {
	@Override
	public String execute() throws Exception {
		System.out.println("HelloAction2执行了");
		return SUCCESS;
	}
}


ActionSupport


ActionSupport继承了Action接口,重写了execute()方法,定义了Validate()方法,在execute()执行前执行,如果校验失败会转入input处,所以需要在struts.xml中的result标签中定义name为input。


import com.opensymphony.xwork2.ActionSupport;
/*
 * 继承ActionSupport类创建动作类
 */
public class HelloAction3 extends ActionSupport {
	private static final long serialVersionUID = 1L;
}


Servlet


Servlet全名为Java Servlet是用Java编写的服务端的小程序,是应用程序设计接口和相关类和方法的Java程序。


ServletAPI


全名是Server+Applet,包括Java两个包

javax.servlet:定义了所有的Servlet类都必须实现或者扩展的通用接口和类。

javax.servlet.http:定义了采用Http协议通信的HttpServlet类。


Action访问Servlet的方式:


IOC方式:通过让它实现某些特定的接口,让Struts框架在运行时向Action实例注入request、session、application对象。


import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

public class Hello3Action extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{

	private HttpServletRequest request;
	private HttpServletResponse response;
	private HttpSession session;
	private ServletContext application;
	
	@Override
	public void setServletResponse(HttpServletResponse response) {
		this.response=response;
	}
	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request=request;
	}
	@Override
	public void setServletContext(ServletContext application) {
		this.application = application;
	}
}


非IOC方式:


import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {

	private HttpServletRequest request;
	private HttpServletResponse response;
	private HttpSession session;
	private ServletContext application;
	
	public String sayHello(){
		request = ServletActionContext.getRequest();
		response=ServletActionContext.getResponse();
		session=request.getSession();
		application=ServletActionContext.getServletContext();

		return SUCCESS;
	}
}


Tomcat


实现了ServletAPI,运行时将一些实现类自动实例化。

工作流程:Web客户向Servlet(Tomcat)容器发出HTTP请求,Servlet容器分析请求信息,容器创建HttpRequest和HttpResponse对象,在调用HttpServlet对象的service方法使将它们作为参数传递给HttpServlet对象,调用参数中对象的方法,获取请求,生成响应给Web。


ContextMap


OGNL上下文,是struts2中封装数据的最大的对象,所有的数据都可以在这个对象里面获取。


  


ContextMap一共有七个对象,除了ValueStack是栈结构,其他都是Map结构是key-value形式的。


Map中添加内容:


public class Demo1Action extends ActionSupport{
	public String demo1(){
		//获取ActionContext对象
		ActionContext context = ActionContext.getContext();
		//向Map中存入数据
		context.put("contextMap", "hello context map");
		
		//方式一:获取大Map中的小Map中的内容
		Map<String,Object> applicationMap = context.getApplication(); 
		applicationMap.put("applicatonMap", "hello application map");
		
		//方式二:
		ServletContext applicationAttr = ServletActionContext.getServletContext();
		applicationAttr.setAttribute("applicationAttr", "hello application Attr");
		return SUCCESS;
	}
}

从Map中获取内容


<!-- 1.获取 -->	
<s:property value="#contextMap"/><br/>

<!-- 2.获取大Map中的小Map -->
<s:property value="#application.applicatonMap"/><br/>
<s:property value="#application.applicationAttr"/>


ValueStack栈结构


public class Demo2Action extends ActionSupport{
	public String demo2(){
		//获取ActionContext对象
		ActionContext context = ActionContext.getContext();
		//获取ValueStack对象
		ValueStack vs = context.getValueStack();
		//可以push不同数据类型的内容
		vs.push("你好");
		return SUCCESS;
	}
}


ActionContext


ActionContext是一个快速操作ContextMap的工具类,是线程安全的。


创建时间:核心控制器StrutsPrepareAndExecuteFilter的doFilter方法执行时


创建完ActionContext后就与线程进行了绑定:


 


 


维护的是Map结构:


  


ServletActionContext


继承了ActionContext类,提供了直接与Servlet相关对象访问的功能。


例子如ServletAPI。


小结:及时学习并总结是很有必要的,如果不总结就会越学越乱,最后感觉万物归一,然后丧失学习的兴趣,有问题就要及时解决,不能越堆越多,否则后面会很吃力的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值