Struts2(Action获取数据和生命周期、StrutsMVC、自动数据类型转换)

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";
        }
}

测试结果:

 

原文地址:https://www.cnblogs.com/zhai1997/p/12269125.html