Struts 2 基於 WebWork 2 發展而來,屬於標準 MVC 框架。雖然名稱與 Struts 1 相近,但程式碼風格截然不同。Struts 2 的六大核心優勢:
最少需包含以下 JAR(以 2.3.8 版為例):
struts-core-2.3.8.jar - 核心框架xwork-2.3.8.jar - 底層命令模式實作ognl-2.6.jar - 物件圖導航語言freemarker-2.3.x.jar - UI 標籤模板引擎commons-logging-1.1.x.jar - 日誌門面commons-fileupload-1.2.1.jar - 檔案上傳支援(2.1.6+ 必須)取得方式:解壓 struts-2.3.8-all.zip,從 lib 目錄複製所需 JAR。
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>
<package name="demo" namespace="/test" extends="struts-default">
<action name="hello" class="cn.example.HelloAction" method="execute">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
</struts>
放置於 WEB-INF/classes 目錄下。
web.xml 整合 Filter<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:Struts 2.1.3 後 FilterDispatcher 已棄用,請使用 StrutsPrepareAndExecuteFilter。
struts2-blank.war 至 Tomcat webapps 目錄bin/startup.bat)https://localhost:8080/struts2-blankWEB-INF/lib 包含所有必要 JAR| 錯誤現象 | 原因分析 | 解決方法 |
|---|---|---|
java.net.BindException: Address already in use: JVM_Bind | Tomcat 重複啟動,前次未正確關閉 | 檢查程序列表,終止殘留 java 進程後重啟 |
| HTTP 404 - /demo/servlet/demo.do | 請求 URL 不存在對應映射 | 檢查 struts.xml action name、namespace 設定 |
| There is no Action mapped for action name demo | 找不到對應 Action,命名空間不匹配 | 確認 namespace 設定、URL 路徑正確性 |
| No result defined for action ... and result success | Action 回傳結果碼無對應 <result> 設定 | 補全 struts.xml 中對應 result 配置 |
MyStruts2App/ ├── src/ │ ├── cn/example/action/HelloAction.java │ └── struts.xml ├── WebContent/ │ ├── WEB-INF/ │ │ ├── web.xml │ │ ├── lib/ (放入所有 JAR) │ │ └── classes/struts.xml │ └── page/hello.jsp └── lib/ (專案級共用 JAR)
Struts 2 以非侵入式設計、強大攔截器、靈活類型轉換為核心優勢。環境搭建關鍵在於:正確版本 JAR、struts.xml 規範配置、Filter 正確註冊。善用官方 struts2-blank 空白專案可大幅降低初始配置錯誤率。