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

SSH 整合實戰(二):Spring 2.5 整合 Struts 2 完整步驟

     編輯:Java 相關知識

承接上篇 Spring 配置,本文詳細演示如何在 Spring 2.5 基礎上整合 Struts 2,涵蓋 web.xml Filter 配置、struts.xml 核心常量、Spring Plugin 依賴、Action 開發與驗證全流程。

web.xml 關鍵配置

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Spring ContextLoaderListener 保持不變 -->

struts.xml 核心設置

<struts>
  <constant name="struts.objectFactory" value="spring" />
  <package name="mizi" namespace="" extends="struts-default">
    <action name="Hello" class="Hello">  <!-- class 指向 Spring Bean ID -->
      <result>/hello.jsp</result>
    </action>
  </package>
</struts>

關鍵點:struts.objectFactory=spring 將 Action 創建權委託給 Spring;Action 的 class 屬性不再寫全限定類名,而是 Spring Bean ID。

必需 JAR:struts2-spring-plugin

struts2-spring-plugin-2.0.11.1.jar 內含 StrutsSpringObjectFactory,是整合橋樑,缺失將報錯「Unable to load object factory」。

Action 開發與 Spring 註冊

// test.action.Hello extends ActionSupport
private String username, sex; private int age;
// getter/setter 省略
public String execute() {
    hello = "Hello:" + username + ";u is " + age + " age; and u is a " + sex;
    return SUCCESS;
}
<bean id="Hello" class="test.action.Hello" scope="prototype"/>

scope=prototype 保證每次請求新實例,避免線程安全問題。

JSP 頁面

<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form action="Hello">
  <s:textfield name="username" label="u name"/>
  <s:textfield name="age" label="u age"/>
  <s:textfield name="sex" label="u sex"/>
  <s:submit/>
</s:form>

結果頁 hello.jsp:<s:property value="hello"/>

驗證結果

訪問 https://localhost/miziStudy,填寫表單提交,頁面顯示「Hello:Mizi;u is 25 age; and u is a man」即代表整合成功。

常見坑點

  • Struts 2.1+ 需用 StrutsPrepareAndExecuteFilter 替換 FilterDispatcher。
  • Action 類未實現 Serializable 導致 Session 複制失敗(集群環境)。
  • Spring Bean ID 與 struts.xml class 不一致導致「No bean named 'XXX' is defined」。
  • JSP 標簽庫 URI 錯誤(/struts-tags 而非 https://struts.apache.org/tags-struts)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved