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";
}
}
测试结果: