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

Struts 2 核心三大件全解析:struts.properties、struts.xml 與 Action 開發指南

     編輯:Java 綜合教學

Struts 2 架構心法:三大核心元素

掌握 Struts 2 只需圍繞三大件展開:

  1. 全局屬性文件 struts.properties — 系統級參數,單例全局生效
  2. 映射配置文件 struts.xml — 請求路由、攔截器、結果視圖,支持模塊化拆分
  3. 業務控制器 Action — POJO 或繼承 ActionSupport,承載業務邏輯與數據

一、struts.properties:系統級開關大全

該文件定義框架運行時默認行為,常用關鍵屬性分類如下:

1. 國際化與編碼

struts.i18n.encoding=UTF-8
struts.locale=zh_CN

2. 靜態資源服務

struts.serve.static=true
struts.serve.static.browserCache=true   # 生產環境建議 true

3. 開發模式與熱加載

struts.devMode=false                    # 生產必須 false
struts.configuration.xml.reload=false   # 生產關閉熱加載
struts.i18n.reload=false

4. Action 映射擴展名

struts.action.extension=action,do,jnlp  # 多擴展名用逗號分隔

5. 文件上傳解析器

struts.multipart.parser=jakarta         # 推薦 jakarta (Commons FileUpload)
struts.multipart.maxSize=2097152        # 2MB 默認限制

6. Spring 集成開關

struts.objectFactory=spring
struts.objectFactory.spring.autoWire=name
struts.objectFactory.spring.useClassCache=true

提示: 所有屬性均可在 struts.xml 中用 <constant> 覆蓋,實現多模塊差異化配置。

二、struts.xml:請求路由中樞

根元素 <struts> 下常用七大配置功能:

元素作用典型場景
<constant>覆蓋 properties 屬性模塊級 devMode 開關
<include>引入子配置文件業務模塊拆分 user-struts.xml
<package>Action/攔截器命名空間name="user" extends="struts-default"
<action>請求路徑映射name="login" class="com.demo.LoginAction"
<result>視圖跳轉name="success">/jsp/home.jsp
<global-results>跨 Action 共享結果全局異常頁、登錄頁
<interceptors>定義/引用攔截器棧權限檢查、日誌、事務

最小化 struts.xml 範例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "https://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <constant name="struts.devMode" value="true"/>
  <package name="default" extends="struts-default">
    <action name="hello" class="com.demo.HelloAction">
      <result name="success">/hello.jsp</result>
    </action>
  </package>
</struts>

三、Action 開發:POJO 化與上下文訪問

1. 無需繼承,純 POJO 即可

public class HelloAction {
    private String message;               // 自動接收表單參數
    public String execute() {             // 默認執行方法
        message = "Hello, " + message;
        return "success";
    }
    // getter/setter 省略
}

2. 繼承 ActionSupport 獲得豐富能力

  • 實現 Validateable、ValidationAware — 內建校驗框架
  • 實現 LocaleProvider — 國際化支持
  • 提供 addActionError()、getText() 等便捷方法

3. 訪問 Servlet API(非侵入式)

// 方式 A:實現 ServletRequestAware 等 Aware 接口(推薦)
public class MyAction implements ServletRequestAware {
    private HttpServletRequest request;
    @Override public void setServletRequest(HttpServletRequest req) { this.request = req; }
}

// 方式 B:ActionContext 線程局部變量
HttpServletRequest req = (HttpServletRequest) ActionContext.getContext()
    .get(StrutsStatics.HTTP_REQUEST);

四、最佳實踐速查

  • 配置分層: 基礎設施放 struts.properties,業務路由放 struts.xml,大模塊拆 include 子文件。
  • Action 粒度: 單一職責,一個用例一個 Action,避免「上帝 Action」。
  • 結果類型: 優先用 dispatcher(默認轉發),必要時用 redirect、redirectAction、json、stream。
  • 攔截器棧復用: 定義 <interceptor-stack name="myStack">,在 <action> 引用 <interceptor-ref name="myStack"/>。

結語

Struts 2 以「約定優於配置」降低樣板代碼,核心在於 Action 即 POJO 與 攔截器鏈 兩大創新。熟練掌握三大件配置與 Action 開發模式,即可輕鬆駕馭企業級 MVC 應用。

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