Struts2的通配符配置方式


Struts2的Action類很有意思,你可以使用3種方式來實現具體的Action類:

  1. 讓你的Action類繼承自ActionSupport類(項目中最常用這種方式,因為ActionSupport類中定義了很多幫助方法)
  2. 讓你的Action類實現Action接口
  3. 使用POJO的方式來實現,只要Action類中有一個返回值為String的execute方法就好了(這種方式使Action類最容易被測試)

以上三種Action的實現方式都可以被struts2框架自動識別,如果你在struts.xml里面配置了一個action塊但是沒有配置action類的路徑,這樣框架默認使用ActionSupport來處理請求。

但是在實際使用struts2的過程中我發現了一個問題,一個Action只有一個execute方法來處理一類請求,如果我開發的某塊功能有100個不同的請求那我豈不是要寫100個Action類,每個類實現一個execute方法,這樣雖然滿足了一個類一個責任的設計原則,但是會不會造成“類爆炸”?后來看了struts2的文檔才知道,其實我們可以使用struts2靈活的通配符配置來達到減少action類的目的:

先來看看一個簡單的時序圖

請求從這個頁面發起,只是簡單的兩個鏈接

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="infoadd">ADD INFO</a><br>
<a href="infodel">DEL INFO</a><br>
</body>
</html>

請求的控制轉發是在struts.xml里面配置的

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <package name="mypack" extends="struts-default">
        <action name="info*" class="com.stone.struts2.action.MyFirstAction" method="{1}">
            <result>/{1}info.jsp</result>
            <allowed-methods>add,del</allowed-methods>
        </action>
    </package>
</struts>

上面這個XML的配置內容有幾點需要注意:

  1. 我開啟了struts2的RMI,apache struts基於安全性考慮,RMI默認是關閉的。
  2. 大家看到action name的值跟平常有點不一樣,我使用了星號通配符用來匹配JSP中的兩個鏈接:infoadd和infodel, 要配置method="{1}", 這樣要被調用的method名字就分別是add和del了。
  3. result的JSP頁面的名字也可以用通配符來配置,我分別定義了兩個JSP,addinfo.jsp和delinfo.jsp,這樣正好一一對應。
  4. 注意在struts2.5之后,基於安全性考慮struts2默認開啟了SMI,必須顯示定義Action中能被請求調用的方法,所以我有配置<allowed-methods>

看看這個Action類

public class MyFirstAction extends ActionSupport {
    
    public String add() {
        return SUCCESS;
    }
    
    public String del() {
        return SUCCESS;
    }
}

這個demo是為了測試struts2的通配符配置,所以兩個JSP里面的內容只是返回一句話而已,這里我就不貼出來了,現在看看調用,我點第一個鏈接:

點第二個鏈接

由此可見,struts2的通配符配置真的是很靈活很強大滴,這樣我們在實際項目開發中可以少寫很多Action類並減少很多配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM