Struts2之Action請求方式與參數傳遞的方式總結

在struts2中關於action的請求url請求基本上由三種狀況: web

首先要先提下struts在發送請求的處理流程: tomcat

客戶端請求(http://localhost:8080/HelloWorld/stu/stuadd)->tomcat接收請求->根據HelloWorld這個項目來加載處理web.xml->把請求交給strutstfilter來處理,strutsfilter交給doFilter處理->doFilter根據struts.xml找到對應的namespace、action,及action處理完成返回的信息來顯示調用對應的result頁面->返回給客戶端 jsp

struts.xml配置以下: ide

<package name="student" namespace='/stu' extends="struts-default">
     函數

        #1:不指定 <action method="methodName">由StudentAction中的默認函數execute來處理 this

        <action name="default" class="com.hupu.action.StudentAction" >
            <result>/Student_index.jsp</result>
        </action> url

        #2:指定<action method="methodName"> 來處理
        <action name="index" class="com.hupu.action.StudentAction" method="index"  >
            <result>/Student_index.jsp</result>
        </action>
    
             <!-- method 請求時 回調用 method=add的方法 -->
        <action name="stuadd" class="com.hupu.action.StudentAction" method="add"  >
            <result name='add_student'>/Student_add.jsp</result>
            <result name='add_student_error'>/Student_add_error.jsp</result>
        </action> spa

          #3: <!-- DMI 動態方法調用 user!add  這樣 就能夠只配置這同樣action 就能處理類似的請求-->
        <action name="user" class="com.hupu.action.UserAction">
            <result name='add_user'>/user_add.jsp</result>
        </action> xml

        #4:通配符處理
        <action name="*_*" class="com.hupu.action.{1}Action" method="{2}">
            <result>/{1}_{2}.jsp</result>
        </action>
    </package> 對象


參數傳遞:struts中參數傳遞有基本三種方法:

1:Action接收參數:
    1:由Action中的getXXX(),setXXX()來處理參數的接收,其中的Action的屬性名稱不必定要傳遞的參數的名稱同樣,可是getXXX後面的名稱必定要一致。

代碼:


public class UserAction extends ActionSupport {
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //參數和成員變量時一一對應的 類型自動轉換
    private String name;
    private int age;

    public String add(){
        return "add_user";
    }
}

    2:域模型對象

建立一個域模型對象接收參數此時參數的傳遞:user.name=.....

同時因爲可能域模型字段比要接收的字段少好比password的輸入的驗證,這時能夠使用DTO(數據傳輸對象)

做爲中間的數據接收而後再傳遞來處理

    DTO:數據傳輸對象 
    DO:數據對象
    3:modeldriven 模型驅動
代碼:使用的是com.opensymphony.xwork2.ModelDriven;模型驅動類

這是請求的url地址:http://localhost:8080//HelloWorld/stu/stuadd?name=liujijun&age=27 就能填充到

Student類中,這是須要單獨的new出來一個student對象

public class StudentAction extends ActionSupport implements ModelDriven<Student> {          private Student student = new Student();          public String index(){                  return SUCCESS;     }          public String add(){                  if(true){             this.addFieldError("name", "name is error");             this.addFieldError("name", "name is too long");             return "add_student_error";         }         return "add_student";     }     @Override     public Student getModel() {         // TODO Auto-generated method stub         return student;     }          @Override     public String execute(){         return SUCCESS;     } }

相關文章
相關標籤/搜索