背景
現在有一個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
若有不足之處,請不吝賜教