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

若有不足之处,请不吝赐教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值