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

Struts 2 入門實戰:從 HelloWorld 到學生查詢系統完整教程

     編輯:Java 相關知識

前言

Struts 2 是經典的 MVC 框架,通過攔截器機制實現請求處理。本文以 Eclipse + Tomcat 為環境,手把手構建從零配置到完整 CRUD 的 Struts 2 應用,涵蓋核心組件、配置文件、標籤庫及實戰案例。

一、項目搭建與依賴配置

1. 創建 Dynamic Web Project

  • Eclipse → File → New → Dynamic Web Project
  • Project name: HelloWorldStruts2
  • 勾選 Generate web.xml deployment descriptor

2. 導入核心 JAR(放入 WEB-INF/lib)

commons-fileupload-x.y.z.jar
commons-io-x.y.z.jar
commons-lang-x.y.jar
commons-logging-x.y.z.jar
commons-logging-api-x.y.jar
freemarker-x.y.z.jar
javassist-x.y.z.GA.jar
ognl-x.y.z.jar
struts2-core-x.y.z.jar
xwork-core-x.y.z.jar

二、核心組件開發

1. Action 類(控制器)

package com.example.struts2;

public class HelloWorldAction {
    private String name; // 對應表單字段

    public String execute() {
        // 業務邏輯
        return "success"; // 邏輯視圖名
    }

    // getter/setter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

2. 視圖頁面(JSP + Struts 標籤)

index.jsp(入口)

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
<h1>Hello World From Struts2</h1>
<s:form action="hello">
    <s:textfield name="name" label="Please enter your name"/>
    <s:submit value="Say Hello"/>
</s:form>
</body>
</html>

helloWorld.jsp(結果頁)

<%@ taglib prefix="s" uri="/struts-tags" %>
<html><body>
Hello World, <s:property value="name"/>
</body></html>

3. 核心配置 struts.xml(放在 src/ 根目錄)

<?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="helloworld" extends="struts-default">
        <action name="hello" class="com.example.struts2.HelloWorldAction" method="execute">
            <result name="success">/helloWorld.jsp</result>
        </action>
    </package>
</struts>

4. Web 容器整合 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>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

三、部署運行驗證

  1. 右鍵項目 → Export → WAR File
  2. 將 WAR 放入 Tomcat webapps/
  3. 啟動 Tomcat,訪問 https://localhost:8080/HelloWorldStruts2/index.jsp
  4. 輸入名稱提交,應跳轉顯示 Hello World, [名稱]

四、實戰案例:學生模糊查詢系統

1. 領域模型

// com.bean.StudentBean
private String stuId, stuName, stuSex, stuBir, stuAdd; // getter/setter

// com.dao.StudentDao
public ArrayList<StudentBean> queryStuByName(String sname) {
    String sql = "SELECT 學號,姓名,性別,出生年月,家庭住址 FROM 學籍表 WHERE 姓名 LIKE '%" + sname + "%'";
    // JDBC 執行查詢,封裝 List 返回
}

2. Struts 1.x 風格 ActionForm + Action(兼容舊項目)

// QueryForm extends ActionForm
private String sname; // getter/setter

// QueryAction extends Action
public ActionForward execute(ActionMapping mapping, ActionForm form, 
        HttpServletRequest request, HttpServletResponse response) {
    QueryForm qf = (QueryForm) form;
    String sname = new String(qf.getSname().getBytes("ISO-8859-1"), "GB2312"); // 編碼轉換
    ArrayList<StudentBean> stus = new StudentDao().queryStuByName(sname);
    request.setAttribute("stus", stus);
    return new ActionForward("/result.jsp");
}

3. Struts 1.x 配置 struts-config.xml

<form-beans>
    <form-bean name="queryForm" type="project02.QueryForm"/>
</form-beans>
<action-mappings>
    <action name="queryForm" path="/query" type="project02.QueryAction"/>
</action-mappings>
<global-forwards>
    <forward name="RESULT" path="/result.jsp"/>
</global-forwards>

4. JSP 頁面

queryform.jsp

<form action="/Project02/query.do" method="post">
    請輸入學生姓名:<input name="sname">
    <input type="submit" value="模糊查詢">
</form>

result.jsp

<%@page import="com.bean.StudentBean,java.util.ArrayList"%>
<table>
    <tr><td>學號</td><td>姓名</td><td>性別</td><td>出生年月</td><td>家庭住址</td></tr>
    <%
        ArrayList<StudentBean> stus = (ArrayList<StudentBean>) request.getAttribute("stus");
        for (StudentBean stu : stus) {
    %>
    <tr>
        <td><%=stu.getStuId()%></td>
        <td><%=stu.getStuName()%></td>
        <td><%=stu.getStuSex()%></td>
        <td><%=stu.getStuBir()%></td>
        <td><%=stu.getStuAdd()%></td>
    </tr>
    <% } %>
</table>

五、Struts 2 進階:結果類型與攔截器

1. 多結果類型配置

<action name="hello" class="...HelloWorldAction">
    <result name="success" type="dispatcher">/success.jsp</result>
    <result name="input" type="dispatcher">/input.jsp</result>
    <result name="json" type="json">
        <param name="root">data</param>
    </result>
    <result name="redirect" type="redirect">/otherAction.action</result>
</action>

2. 常用攔截器

  • params:自動注入請求參數到 Action 屬性
  • validation:配合 validate() 方法做服務端校驗
  • fileUpload:處理文件上傳
  • i18n:國際化語言切換

六、常見問題排查

現象原因解決
404 無法訪問 .actionstruts.xml 未放在 classpath 根目錄確保 src/struts.xml 編譯到 classes/
標籤庫報錯缺少 struts2-core JAR 或 taglib uri 錯誤檢查 WEB-INF/lib 及 <%@ taglib uri="/struts-tags" %>
中文亂碼請求/響應編碼不一致web.xml 配置 CharacterEncodingFilter UTF-8
OGNL 表達式報錯屬性名不匹配或類型轉換失敗檢查 Action getter/setter 與表單 name 一致

結語

Struts 2 以「約定優於配置」、強大的 OGNL 表達式、靈活的攔截器鏈著稱。掌握 Action → struts.xml → Result → View 核心流程,配合標籤庫開發效率極高。雖然新項目多選 Spring MVC,但維護舊系統、理解 MVC 演進歷史仍具價值。

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