1、从表单获取数据
(1)创建一个表单(form.jsp):
<body> <form action="${pageContext.request.contextPath}/h/Action"> 用户名:<input type="text" name="username"/> <input type="submit" value="提交"/> </form> </body>
(2)创建一个Action:
public class Action extends ActionSupport{ private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String execute(){ System.out.println("用户名为:"+username); return "success"; } }
Action从表单获取值的时候,需要保证被获取的值在Action和表单中有相同的名字。
(3)对Struts2.xml 文件进行配置:
<package name="hello" namespace="/h" extends="struts-default"> <action name="Action" class="pers.zhb.hello.Action" method="execute"> <result name="success" type="dispatcher">/form.jsp</result> </action> </package>
(4)测试结果:
表单中写入数据并提交:
Action中获取数据并打印到控制台:
2、Action的生命周期
(1)每次请求Action的时候都会创建一个Action实例对象:
public class Action extends ActionSupport{ private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Action(){ super(); System.out.println("Action的实例对象被创建了!"); } public String execute(){ System.out.println("用户名为:"+username); return "success"; } }
(2)Action是线程安全的(不存在并发,每发起一次请求都会创建一个Action实例),可以用成员变量接收参数,而Servlet是线程不安全的,不能用成员变量接收数据。
3、MVC与StrutsMVC:
(1)MVC思想:
M:操作数据的业务处理层
V:采集和显示数据
C:视图层和业务模型之间的桥梁
(2)Struts MVC:
M:对象模型,封装页面传来的参数,交由业务进行处理,处理后可能还要返回模型数据到页面进行显示
V :视图,struts提供标签来支持视图的展示
C:提供struts的过滤器,拦截用户的请求,查找struts配置文件,为其匹配一个对应的Action,这个Action负责调用模型,获得数据,然后对数据做部分处理,接着Action再将处理后的数据,为其选择一个视图进行显示
4、自动数据类型转换
在利用Servlet接收表单提交的数字类型数据的时候,需要将表单提交的字符串类型的数据转化为相应的数据,但是在Struts2里面是不需要的,可以自动完成。
表单:
<form action="${pageContext.request.contextPath}/h/Action"> 用户名:<input type="text" name="username"/><br> 年龄:<input type="text" name="userage"/><br> <input type="submit" value="提交"/> </form>
Action:
public class Action extends ActionSupport{ private String username; private Integer userage; public Integer getUserage() { return userage; } public void setUserage(Integer userage) { this.userage = userage; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String execute(){ System.out.println("用户名为:"+username); System.out.println("年龄为:"+userage); return "success"; } }
测试结果: