lib/ 下核心 JAR 複製至專案 WEB-INF/lib/:commons-logging-1.1.3.jar
freemarker-2.3.19.jar
ognl-3.0.6.jar
struts2-core-2.5.x.jar
xwork-core-2.3.x.jar
# 其餘 jar 視需求引入(json, spring, hibernate plugin 等)
注意:版本號以實際下載包為準,避免版本衝突。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Struts 2.5+ 採用 StrutsPrepareAndExecuteFilter,舊版為 FilterDispatcher。
放在 src/(類別路徑根目錄):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"https://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="true" /> <!-- 開發模式,熱載入配置 -->
<constant name="struts.ui.theme" value="simple" /> <!-- 簡潔主題 -->
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="com.example.action.LoginAction">
<result name="input">/login.jsp</result>
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
package com.example.action;
public class LoginAction {
private String username, password, message;
// getter/setter 省略
public String execute() {
if ("admin".equals(username) && "1234".equals(password)) {
return "success";
}
message = "帳號或密碼錯誤";
return "input"; // 回登入頁顯示錯誤
}
}
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
<s:form action="login">
<s:textfield name="username" label="帳號" />
<s:password name="password" label="密碼" />
<s:submit value="登入" />
<s:if test="message != null">
<div style="color:red"><s:property value="message" /></div>
</s:if>
</s:form>
</body>
</html>
struts.xml 的 namespace、action name、result 路徑是否與請求 URL 對應。getter/setter、型別匹配、struts.el.enable 未關閉。struts.xml 使用 <include file="struts-module-xxx.xml"/> 模組化管理。