Struts2學習——0300DMI動態方法調用

背景

現在有一個Action,它的action_name=user,背景是從現實小項目中抽象出來。現在有一個用戶管理系統,而用戶管理,肯定不僅僅是添加用戶,還有的比如用戶登錄,後臺刪除用戶等等需求,使得user的操作不僅僅是一個add(),肯定還有delete(),update()等等。所以如果按照我們前面的做法,肯定是弄很多個action,每個action一個execute方法,一個result。這種做法明顯是爛透了……

DMI動態方法調用

1. 分析

我們還是基於代碼來分析這個DMI。

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <!-- 開發者模式 -->
    <constant name="struts.devMode" value="true" />
    <!-----------------  法一  ------------------>
    <!-- 名稱空間是/user -->
    <package name="user" extends="struts-default" namespace="/user">
    <!-- action_name=userAdd,說明/user/userAdd的URL地址來找這個action -->
    <!-- action 對應了一個class,這個action對應的是class裏面的add方法 -->
        <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
            <result>/user_add_success.jsp</result>
        </action>
     <!-----------------  法二  ------------------>
     <!-- action_name=user 說明/user/user的URL來找它 -->
     <!-- 這裏並沒有指定method,比較靈活 -->
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
     <!-- result沒有指定name,就是默認的name="success" -->
            <result>/user_add_success.jsp</result>
        </action>
    </package>
</struts>

UserAction

package com.bjsxt.struts2.user.action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
    /*
        其實也只有一個方法,add(),返回值是success。    
    */
    public String add() {
        return SUCCESS;
    }
}

index.jsp

<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>

<% String context = request.getContextPath(); %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>Insert title here</title>
</head>
<body>

    <!-- 第一種方法的方式 -->
    <a href="<%=context %>/user/userAdd">添加用戶</a>
    <br />
    <!-- 法二的URL要加! 指定到底調用的是哪個add()方法 -->
    <a href="<%=context %>/user/user!add">添加用戶</a>
    <br />

前者會產生太多的action,所以不推薦使用

</body>
</html>

2. 結果

index.jsp
這裏寫圖片描述

法一
這裏寫圖片描述

法二
這裏寫圖片描述

可以得到結論,兩種方法,都可以達到相同的效果,那麼我們到底用哪一個方法更好呢?

3. 對比

兩種方法,對比起來,肯定是後一種方法更好。因爲,一個User裏面肯定不只是一個addUser的方法,肯定有delete、update等方法。如果用的是第一種方法,那麼,一種方法就要換一個method,在struts.xml裏面就要配置太多東西。而第二種方法,在struts.xml文件裏面只要寫

<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
            <result>/user_add_success.jsp</result>
</action>

不用因爲用其他的方法寫很多個action,但是由於它有很多個method,因此雖然不用寫多個action,但是一個action還是要針對不同方法返回值,寫多個與之匹配的result

若有不足之處,請不吝賜教

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章