Struts2框架的使用步驟

jopen 10年前發布 | 79K 次閱讀 Struts2 Web框架

Struts2是基于MVC 的一個非常優秀的框架。Struts2的使用非常簡單,這里舉出一個簡單的Struts2框架的使用步驟。

一、下載Jar包

從Apache網站下載Struts2的Jar包。

二、部署Struts.xml和Web.xml

打開壓縮包中的Blank實例,copy其中的Struts.xml到項目的src目錄下,copy其中的Web.xml中的filter部分到項目中的web.cml中。

三、復制Jar包

copy blank實例中lib目錄中的所有Jar包到項目中的lib目錄下。

四、寫Action類

一般來說Action就是MVC中的Controller,Action一般要繼承ActionSupport類

在里面寫各種處理的方法即可。

五、配置Struts.xml

    <package name="default" namespace="/" extends="struts-default">  

            <action name="addStudent" class="com.lubby.action.Action1"  
                method="add">  
                <result name="success">/welcome.jsp</result>  
            </action>  
        </package>  
namespace是指虛擬的路徑,如果namespace="student" 那么action的路徑就是localhost/student/addStudent.

extends一般默認的是struts-default

action標簽中的那么就是瀏覽器請求的地址

class屬性是指處理請求的Action是哪一個,包名+Action類名

method屬性是指Action中處理請求的方法名

result就是轉向返回的頁面

name屬性是指如果方法返回的字符串匹配就返回result中的頁面。

 

六、通配符

使用通配符的方式使得action的配置更簡潔

    <package name="default" namespace="/" extends="struts-default">  

            <action name="student*" class="com.lubby.action.Action1"  
                method="{1}">  
                <result name="success">/student{1}.jsp</result>  
            </action>  
            <action name="addStudent" class="com.lubby.action.Action1"  
                method="add">  
                <result name="success">/welcome.jsp</result>  
            </action>  
        </package>  

這里action的name屬性的值可以有*號作為匹配的標志。method屬性的{1}代表的是*的內容 。

譬如瀏覽器請求的是studentDelete那么method的值就是Delete,就會交給Action中的Delete方法處理。

七、Action接收參數

Action接收頁面的參數非常簡單。

只要在Action中聲明的屬性,并且寫了set,get方法,那么前臺的name和屬性名一樣,Struts就會自動調用set方法把值傳給相應的屬性。

如果Action中聲明的屬性是一個類對象,只要寫了set,get方法,那么前臺的name為對象名.對象屬性。對象就能獲得該屬性值。

    package com.lubby.action;  

    import java.util.Map;  

    import com.lubby.bean.Student;  
    import com.opensymphony.xwork2.Action;  
    import com.opensymphony.xwork2.ActionContext;  
    import com.opensymphony.xwork2.ActionSupport;  

    public class Action1 extends ActionSupport{  
        private String name;  
        private int age;  
        private Student stu;  

        public String add(){  

            System.out.println(name());  
            System.out.println(age());  
            System.out.println(stu.getName());  
            System.out.println(stu.getAge());  
            return Action.SUCCESS;    
        }  


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

        public Student getStu() {  
            return stu;  
        }  

        public void setStu(Student stu) {  
            this.stu = stu;  
        }  

    }  



前端頁面

    <form action="addStudent" method="get">   
        <input type="text" name="name">  
        <input type="text" name="age">  
     <input type="text" name="stu.name"> <input type="text" name="stu.age"> <input type="submit"> </form>  

八、result的type類型

result有個type標簽,其中最常用的兩個是dispatcher和redirect。

如果不寫type的話,默認是dispatcher

區別:dispatcher是服務器跳轉,客戶端的地址欄中地址不會變的,request和session在跳轉的頁面保持不變。其實是整個ActionContext都沒有改變。

redirect可以認為是客戶端跳轉,就是服務器告訴客戶端重新進入新的地址,客戶端的地址欄中的地址發生了改變,request和session改變了。


九、OGNL表達式

前端也需要從action中取得數值,可以通過ognl表達式的方式取到屬性的值,對象的屬性,session、request、application中的map對,

有兩種寫法:1.使用struts2中的標簽,首先在jsp中引入struts2標簽 <%@taglib uri="/struts-tags" prefix="s"%>,然后使用標簽<s:property  value="stu.name" />這樣就能在jsp中取出struts中的屬性

2.使用ognl表達式${stu.teacher.tname } 可以取出stu對象的teacher對象的tname屬性。

利用ognl取得session,request,application中的屬性或者對象的屬性。

session

<s:property value="#session.stu.name">

application

 <s:property value="#application.name"/>

request

   <s:property value="#request['age']" />

list的某個元素

<s:property value="list[0].name" />

map的某個元素

<s:property value="map.cat">

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!