Struts2學習——0400ActionWildCard通配符配置

背景

我們在前面用了DMI,動態的進行了方法的引用,得到了一個效果,只需要配置一個action,多個result就可以了,不用針對一個類的不同方法,配置不同的action。但是,這樣我們是覺得煩,能不能action只有一個,result也只有一個呢?這就是我們通配符配置的前提或者說是背景。

兩個特點:
- 用通配符配置,能把代碼變得最簡潔
- 要遵循“約定優於配置”原則

所謂的“約定優於配置”的意思是,只要一羣人用一種約定去開發程序,就能是的整個配置文件的書寫變得最簡潔。所以,約定要比配置更重要。

通配符配置

基於背景,我們可以看看,到底能夠怎麼樣配置使得struts.xml文件最簡潔。

【注】“*”星號就是通配符,一個星號可以理解爲代表一段字符串。例如

* 可以代表Teacher,也可以代表Student。
* 可以代表add,也可以代表delete

1. 分析

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" />
    <package name="actions" extends="struts-default" namespace="/actions">
        <!-- 第一個action,action_name=user*,可以是useradd,也可以是userdelete... -->
        <!-- 由於可以有多個*,所以{1}代表第一個*代表的內容,如action_name=useradd,{1}就是add-->

        <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}">
        <!-- 若action_name=useradd,result就跳轉到Studentadd_success.jsp -->
        <!-- 當然,這些文件、java類、方法的命名方法要提前約定好。再一次的體現出了“約定優於配置” -->
            <result>/Student{1}_success.jsp</result>
        </action>

        <!-- 此action_name可以是Teacher_add,也可以是Course_delete -->
        <!-- 第一個通配符可以確定class的名稱和位置,第二個通配符可以確定class中的方法 -->
        <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">
        <!-- result也可以由通配符決定,達到極簡 -->
            <result>/{1}_{2}_success.jsp</result>
            <!-- {0}_success.jsp -->
        </action>
    </package>
</struts>

StudentAction

package com.bjsxt.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class StudentAction extends ActionSupport {
    /*
        兩個方法add()和delete()
        都是返回success
    */
    public String add() {
        return SUCCESS;
    }
    public String delete() {
        return SUCCESS;
    }

}

TeacherAction

package com.bjsxt.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class TeacherAction extends ActionSupport {
    /*
        同樣TeacherAction也有兩個方法
        add()和delete(),返回success
    */
    public String add() {
        return SUCCESS;
    }

    public String delete() {
        return SUCCESS;
    }
}

index.jsp

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

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

<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>
使用通配符,將配置量降到最低<br />
<a href="<%=context %>/actions/Studentadd">添加學生</a>
<a href="<%=context %>/actions/Studentdelete">刪除學生</a>
<br />
不過,一定要遵守"約定優於配置"的原則
<br />
<a href="<%=context %>/actions/Teacher_add">添加老師</a>
<a href="<%=context %>/actions/Teacher_delete">刪除老師</a>
<a href="<%=context %>/actions/Course_add">添加課程</a>
<a href="<%=context %>/actions/Course_delete">刪除課程</a>

</body>
</html>

2. 結果

這裏寫圖片描述

3. 分析

在演示中,我們可以看到,課程刪除和課程添加還沒完成,現在,完成以下這兩部分。

這裏寫圖片描述

CourseAction

package com.bjsxt.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class CourseAction extends ActionSupport {
    public String add(){
        return SUCCESS;
    }
    public String delete(){
        return SUCCESS;
    }
}

Course_add_sucess.jsp

package com.bjsxt.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class CourseAction extends ActionSupport {
    public String add(){
        return SUCCESS;
    }
    public String delete(){
        return SUCCESS;
    }
}

Course_delete_success.jsp

<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
    <%@taglib uri="/struts-tags" prefix="s" %>
<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>
    Course Delete Success!
</body>
</html>

可以看到,我根本就沒有動xml文件,就完成了功能的添加,所以這個通配符配置還是很有好處的。

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

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