本系列教程將帶您從零開始搭建 Struts 2.1.6 開發環境,並通過一個極簡的 HelloWorld 範例,體驗 Convention Plugin 帶來的「零 XML 配置」開發模式。
jstl.jar、standard.jar 放入專案 lib在 Eclipse 中新建 Dynamic Web Project,命名為 SimpleWeb。將 Struts 解壓後 lib 目錄下的核心 JAR 複製至專案 WebContent/WEB-INF/lib:
xwork-2.1.2.jar
struts2-core-2.1.6.jar
struts2-convention-plugin-2.1.6.jar
ognl-2.6.11.jar
freemarker-2.3.13.jar
commons-logging-1.0.4.jar
commons-fileupload-1.2.1.jar
jstl.jar / standard.jar (JSTL)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>SimpleWeb</display-name>
<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>
</web-app>
在 WEB-INF 下建立 content 目錄(固定命名),專門存放 JSP。新建 hello.jsp:
<%@ page contentType="text/html;charset=UTF-8" %>
<html><body>Hello Simple</body></html>
啟動 Tomcat,嘗試訪問:
https://localhost:8080/SimpleWeb/hello.jsp → 404 錯誤(受保護資源)https://localhost:8080/SimpleWeb/hello.action 或 /hello → 成功顯示 hello.jsp這正是 Struts 2.1.6 Convention Plugin 的威力:預設將 WEB-INF/content/ 下的 JSP 映射為同名 Action。
在 cn.simple.action 建立 HelloAction:
package cn.simple.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("HelloAction execute ...");
return SUCCESS;
}
}
再次訪問 /hello.action,控制台輸出確認 Action 被調用,頁面轉發至 hello.jsp。
上述行為等價於以下顯式註解配置:
@Results({
@Result(name = "success", location = "hello.jsp", type = "dispatcher")
})
public class HelloAction extends ActionSupport { ... }
name="success" 對應 execute() 返回 SUCCESSlocation="hello.jsp" 目標視圖type="dispatcher" 請求轉發(保留 Request 屬性)對比 type="redirect" 重定向(不保留 Request,地址欄變更),兩者差異同 Servlet 的 forward vs sendRedirect。
核心啟示:
struts2-convention-plugin-2.1.6.jar依據「類名/方法名/返回值」自動推導映射,實現真正的零配置。詳細規則請見官方文檔。
環境搭建與首個範例完成,下一篇將深入註解驅動的表單處理與驗證機制,敬請期待!