美文网首页
01-struts属性注入

01-struts属性注入

作者: 何惧l | 来源:发表于2018-06-22 10:18 被阅读8次
    1. 继承属性
    2. 复合属性注入
    3. 复合属性注入:接口方式
    4. 属性注入: struts.xml方式

    struts2利用反射技术将请求对象中的参数名与action对象的属性名进行匹配。然后将参数注入到[赋值]给同名的属性中[set和get]

    继承属性

    这种方式用于继承bean中类,这样降低了代码的可扩展性,不常用

    1. 在web.xml中注册struts框架
     
      <!-- 注册struts框架 -->
      <filter>
        <filter-name>mystruts</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
      
      <filter-mapping>
        <filter-name>mystruts</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      
    
    
    1. 在test.html中进行输入数据
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
        <!-- 验证Action属性注入 -->
        <form action="test1" method="post">
        姓名:<input type="text" name="name"><br>
        年龄:<input type="text" name="age"><br>
        性别:<input type="radio" value="男" name="sex">男<input type="radio" value="女" name="sex">女<br>
        地址:<input type="text" name="address"><br>
        生日:<input type="text" name="birth"><br>
        <input type="submit" value="测试1"> 
        <input type="reset" value="重置"> 
        </form><br>
    
    </body>
    </html>
    
    
    1. 根据表单中的name值编写对应的User类,写set和get方法
    package bean;
    
    import java.util.Date;
    
    public class User {
    
        private String name;
        private char sex;
        private int age;
        private String address;
        private Date birth;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public char getSex() {
            return sex;
        }
        public void setSex(char sex) {
            this.sex = sex;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public Date getBirth() {
            return birth;
        }
        public void setBirth(Date birth) {
            this.birth = birth;
        }
        @Override
        public String toString() {
            return "User [name=" + name + ", sex=" + sex + ", age=" + age + ", address=" + address + ", birth=" + birth
                    + "]";
        }
    
    }
    
    
    
    1. action包中编写对应的类以及方法
    package action;
    
    import bean.User;
    
    public class TestAction1 extends User {
    
        // 在Action类中接收表单中的所有数据,利用struts2的自动注入功能
        // 方式:根据请求参数名与属性名匹配,然后进行注入,利用set和get
         
        // 编写action方法,查看属性。验证是否属性注入成功
        public String test1() {
            System.out.println("TestAction1--test1()!");
            System.out.println(super.toString());
            return "success";
        }
        
    }
    
    1. 在struts.xml中进行配置
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package name="attr" namespace="/" extends="struts-default">
            <!-- 普通属性  继承属性 -->
            <action name="test1" class="action.TestAction1" method="test1">
                <result>/index.jsp</result>
            </action>
        </package>
    </struts>
    
    

    复合属性注入

    主要区别就是action和struts.xml的配置以及输入数据的时候
    这种方式在test.html中输入数据的时候的name值还需是在action中new出来的对象的属性名,这样不方便

    1. 在action中
    package action;
    
    import bean.User;
    
    public class TestAction2 {
    
        // 复合属性注入
    
        private User Myuser = new User();
        
        public User getMyuser() {
            return Myuser;
        }
    
        public void setMyuser(User myuser) {
            Myuser = myuser;
        }
    
        public String test2() {
            System.out.println("TestAction2--test2()!");
            System.out.println(Myuser.toString());
            return "success";
            
        }
        
    }
    
    
    
    1. 在struts.xml中
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    
        <package name="attr" namespace="/" extends="struts-default">
        
        <!-- 复合属性注入 -->
        <action name="test2" class="action.TestAction2" method="test2">
            <result>/index.jsp</result>
        </action>
        </package>
    
    </struts>
    
    
    1. 在test.html中,这里的name值要用在action中new出来的对象的属性名
            <!-- 验证复合属性注入 
        请求参数:  Action对象属性名.属性名   比如: user.name   myUser.name  user,myUser是Action对象的属性名
        -->
        <form action="test2" method="post">
        姓名:<input type="text" name="Myuser.name"><br>
        年龄:<input type="text" name="Myuser.age"><br>
        性别:<input type="radio" value="男" name="Myuser.sex">男<input type="radio" value="女" name="Myuser.sex">女<br>
        地址:<input type="text" name="Myuser.address"><br>
        生日:<input type="text" name="Myuser.birth"><br>
        <input type="submit" value="测试1"> 
        <input type="reset" value="重置"> 
        </form><br>
    
    

    复合属性注入:接口方式

    主要区别就是action和struts.xml的配置
    常用的就是这个方式

    1. 在action中,实现这个接口,重写这个方法
    package action;
    import com.opensymphony.xwork2.ModelDriven;
    import bean.User;
    public class TestAction3 implements ModelDriven<User>{
    
        private User myUser = new User();
        //将复合属性对象 返回给struts2框架,由框架完成属性值的注入
        @Override
        public User getModel() {
            // TODO Auto-generated method stub
            return myUser;
        }
        
        public String test3() {
            System.out.println("TestAction3--test3()!");
            System.out.println(myUser.toString());
            return "success";
            
        }
    
    }
    
    
    1. 在struts.xml中
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
        
    <struts>
    
        <package name="attr" namespace="/" extends="struts-default">
            <!-- 复合属性注入 :接口方式 -->
            <action name="test3" class="action.TestAction3" method="test3">
                <result>/index.jsp</result>
            </action>
        </package>
    
    </struts>
    
    
    1. 在test.html中
        <form action="test3" method="post">
        姓名:<input type="text" name="name"><br>
        年龄:<input type="text" name="age"><br>
        性别:<input type="radio" value="男" name="sex">男<input type="radio" value="女" name="sex">女<br>
        地址:<input type="text" name="address"><br>
        生日:<input type="text" name="birth"><br>
        <input type="submit" value="测试1"> 
        <input type="reset" value="重置"> 
        </form><br>
    
    

    属性注入: struts.xml方式

    主要区别就是action和struts.xml的配置

    1. 在struts.xml中
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package name="attr" namespace="/" extends="struts-default">
            <!-- 属性注入: struts.xml方式 -->
            <action name="test4" class="action.TestAction4" method="test4">
                <param name="encoding">UTF-8</param>
                <result>/index.jsp</result>
            </action>
        </package>
    </struts>
    
    
    1. 在action中
    package action;
    
    public class TestAction4 {
        private String encoding;
        public String getEncoding() {
            return encoding;
        }
        public void setEncoding(String encoding) {
            this.encoding = encoding;
        }
        
        public String test4() {
            System.out.println("TestAction4--test4()!");
            System.out.println("编码: "+encoding);
            return "success";
            
        }
        
    }
    
    
    
    1. test.html和上面一样
    2. 这个在struts.xml中配置属性的方法适用于少量数据

    相关文章

      网友评论

          本文标题:01-struts属性注入

          本文链接:https://www.haomeiwen.com/subject/uszhyftx.html