struts2入门之action获取表单提交数据
action获取表单提交数据,有三种方式:
1、根据ActionContext对象获取;
2、利用ServletActionContext类获取表单数据;(其实就是可以获取HttpServletRequest对象)
3、利用接口注入的方式获取表单数据;实现接口(ServletRequestAware)
其实以上三种方式都是action通过操作域对象来获取数据,和servlet中操作域对象有异曲同工之妙,
I、通过ActionContext类获取表单提交数据,代码如下:
1 public class DogAction2 extends ActionSupport { 2 @Override 3 public String execute() throws Exception { 4 ActionContext context = ActionContext.getContext(); 5 Map<String, Object> map = context.getParameters(); 6 Set<String> set = map.keySet(); 7 for (String key : set) { 8 Object[] objects = (Object[]) map.get(key);//这里我之所以要转化成object数组的形式,是因为表单提交数据也有可能是复选框的情况,这里要考虑周全 9 System.out.println(Arrays.toString(objects)); 10 } 11 return "success"; 12 } 13 }
II、利用ServletActionContext类,代码如下:
1 import org.apache.struts2.ServletActionContext; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 5 public class Dog3Action extends ActionSupport { 6 private static final long serialVersionUID = 1L; 7 8 @Override 9 public String execute() throws Exception { 10 HttpServletRequest request = ServletActionContext.getRequest(); 11 String username = request.getParameter("username"); 12 String password = request.getParameter("password"); 13 System.out.println(username + "---" + password); 14 return NONE; 15 } 16 }
III、利用接口(ServletActionAware)注入方式获取表单数据,代码如下:(利用要实现的接口中的参数来初始化request对象,进而获取表单数据)
1 import javax.servlet.http.HttpServletRequest; 2 3 import org.apache.struts2.interceptor.ServletRequestAware; 4 5 public class Dog4Action implements ServletRequestAware { 6 private HttpServletRequest request; 7 8 @Override 9 public void setServletRequest(HttpServletRequest request) { 10 this.request = request; 11 } 12 13 public String execute() { 14 String username = request.getParameter("username"); 15 String password = request.getParameter("password"); 16 System.out.println(username + "---" + password); 17 return "none"; 18 } 19 }
总结:上面的后两种方式都是沿袭了servlet的方式,通过域对象来获取表单数据,第一种方式获取的表单数据是一个map集合,进而可以进一步得到具体的数据。
接下来我会准备struts2的获取表单数据的方式。见下一篇博客。。。
----------------------------------------------分割线--------------------------------------------------------------
说一下action和servlet的区别:
servlet:第一次请求的时候才创建,并且只创建一次;
action:每请求一次action都会创建一个action对象,每个action对象中都有一个值栈对象(只有一个) 。