首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Struts2 进阶实战(三):namespace 模块化、配置文件拆分、Result 类型与动态结果、全局结果配置

     編輯:Java 綜合教學

Struts2 进阶实战(三)

解决大型项目中 Action 命名冲突、配置文件臃肿、结果跳转多样化、公共错误页面复用等实战问题。

一、namespace 解决同名 Action 冲突

默认 namespace="/" 下无法区分同名 <action name="add">。方案:按业务模块划分 namespace。

<package name="user" namespace="/user" extends="struts-default">
  <action name="add" class="action.UserAction" method="add">
    <result>addUser.jsp</result>
  </action>
</package>

<package name="house" namespace="/house" extends="struts-default">
  <action name="add" class="action.HouseAction" method="add">
    <result>addHouse.jsp</result>
  </action>
</package>

访问路径:/user/add、/house/add,互不干扰。

二、<include> 拆分配置文件

<!-- struts.xml -->
<struts>
  <include file="struts-user.xml"/>
  <include file="struts-house.xml"/>
</struts>
<!-- struts-user.xml -->
<struts>
  <package name="user" namespace="/user" extends="struts-default">
    <action name="add" class="action.UserAction" method="add">
      <result>addUser.jsp</result>
    </action>
  </package>
</struts>

每个模块独立维护,主文件仅聚合,降低合并冲突。

三、Result 配置详解

1. name 属性:匹配 Action 返回值

可自定义返回字符串,对应 <result name="custom">。

2. type 属性:跳转方式

常量含义
SUCCESS执行成功,展示视图
NONE成功但无视图(如 AJAX)
ERROR执行失败,展示错误页
INPUT校验失败,返回输入页
LOGIN未登录,跳转登录页
type行为典型场景
dispatcher请求转发(默认)JSP 渲染
redirect重定向POST 后跳转、跨应用
redirectAction重定向到另一 Action动态决定目标 Action
chainAction 链式调用共享 ActionContext
json返回 JSONREST API

四、动态结果:运行时决定跳转目标

场景:登录成功,管理员跳后台,普通用户跳首页。

public class DynamicAction extends ActionSupport {
    private String nextDispatch;  // 动态目标 Action 名
    // getter/setter

    public String login() {
        if ("common".equals(user.getPassword())) nextDispatch = "common";
        else if ("admin".equals(user.getUsername())) nextDispatch = "admin";
        else return INPUT;
        return SUCCESS;
    }
}
<action name="login" class="action.DynamicAction" method="login">
  <result name="success" type="redirectAction">${nextDispatch}</result>
</action>
<action name="common" class="action.CommonAction">
  <result>common.jsp</result>
</action>
<action name="admin" class="action.AdminAction">
  <result>admin.jsp</result>
</action>

利用 OGNL 表达式 ${nextDispatch} 取值,配合 redirectAction 实现动态分发。

五、全局结果:公共错误页面复用

<package name="user" namespace="/user" extends="struts-default">
  <global-results>
    <result name="error">/error.jsp</result>
  </global-results>
  <action name="add" ...> ... </action>
</package>

包内所有 Action 返回 error 均跳转 /error.jsp,无需逐个配置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved