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

SSH 整合筆記(四):整合 Struts 2 構建 Web 控制層

     編輯:Java 相關知識

繼前幾篇完成 Maven 專案建立、Hibernate 與 Spring 整合後,本篇將著手整合 Struts 2,構建 Web 應用的控制層。Struts 2 作為基於 WebWork 的 MVC 框架,通過攔截器機制、OGNL 表達式語言及靈活的結果類型,極大簡化了 Web 開發。整合完成後,專案將具備完整的請求處理流程:從用戶登錄請求進入 Action,經 Service 層驗證,最終跳轉至歡迎頁。

1. 添加 Struts 2 核心與 Spring 整合依賴

在 pom.xml 的 <dependencies> 區塊中加入以下兩個核心依賴(版本號與 Spring、Hibernate 版本協調一致):

<!-- struts2依賴 -->
<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-core</artifactId>
  <version>2.1.6</version>
</dependency>
<dependency>
  <groupId>org.apache.struts</groupId>
  <artifactId>struts2-spring-plugin</artifactId>
  <version>2.1.6</version>
</dependency>

完整的 pom.xml 還包含 JUnit、Spring(JDBC、ORM、DAO)、Log4j、MySQL 驅動、Hibernate 核心及其傳遞依賴(CGLIB、Dom4j、Antlr 等),確保專案編譯與運行時所需所有類庫齊全。

2. 配置 web.xml 註冊 Struts 2 過濾器

在 web.xml 中聲明 FilterDispatcher(Struts 2 核心控制器),攔截 *.action 後綴的請求;同時配置 Spring 的 ContextLoaderListener 載入應用上下文,並設定歡迎頁為 login.jsp:

<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>*.action</url-pattern>
</filter-mapping>

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<welcome-file-list>
  <welcome-file>login.jsp</welcome-file>
</welcome-file-list>

3. 編寫 Struts 核心配置文件

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>
  <constant name="struts.enable.DynamicMethodInvocation" value="false" />
  <constant name="struts.devMode" value="false" />
  <constant name="struts.objectFactory" value="spring" />

  <include file="struts/user.xml"></include>
</struts>

關鍵常量說明:struts.objectFactory=spring 將 Action 實例化交由 Spring 容器管理,實現 IoC;struts.devMode 開發階段建議設為 true 以利調試。

user.xml(用戶模組業務配置)

<package name="user" namespace="/user" extends="struts-default">
  <action name="login" class="userAction" method="login">
    <result name="input">/login.jsp</result>
    <result name="success" type="redirect">/welcome.jsp</result>
  </action>
</package>

此處暫使用 redirect 方式跳轉,後續整合 Tiles 2 時將改為 tiles 結果類型。

4. 實現 Action 與 Service 業務類

UserAction(控制層)

繼承 ActionSupport,注入 UserManager,處理登錄邏輯:校驗用戶憑證、更新登錄次數、將用戶信息存入 Session。提供靜態工具方法 getSession()/setSession() 便於操作 Session Map。

public class UserAction extends ActionSupport {
    private SsimUser user;
    private UserManager userManager;

    public String login() {
        if (getSession("loginedUser") != null) return SUCCESS;

        try {
            if (getUserManager().checkLogin(user.getUserEmail(), user.getUserPassword())) {
                user = getUserManager().findByEmail(user.getUserEmail());
                setSession("username", user.getUserRealname());
                setSession("loginedUser", user);
                return SUCCESS;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return INPUT;
    }
    // getter/setter 及 Session 工具方法省略...
}

UserManager(業務邏輯層)

封裝用戶驗證與查詢邏輯,依賴 SsimUserDAO 進行數據訪問:

public class UserManager {
    private SsimUserDAO ssimUserDAO;

    public boolean checkLogin(String userEmail, String password) throws Exception {
        SsimUser user = findByEmail(userEmail);
        if (user == null) return false;
        return user.getUserPassword() != null && user.getUserPassword().equals(password);
    }

    @SuppressWarnings("unchecked")
    public SsimUser findByEmail(String userEmail) {
        List<SsimUser> users = ssimUserDAO.findByUserEmail(userEmail);
        return (users != null && !users.isEmpty()) ? users.get(0) : null;
    }
    // getter/setter 省略...
}

5. Spring 容器裝配 Action 與 Manager

在 application-context.xml 中導入各模組 Bean 定義文件,並在 ssim-user.xml 中聲明 userManager 與 userAction,實現依賴注入:

<bean id="userManager" class="net.selitech.ssim.user.UserManager">
  <property name="ssimUserDAO" ref="SsimUserDAO" />
</bean>
<bean id="userAction" class="net.selitech.ssim.web.user.UserAction">
  <property name="userManager" ref="userManager" />
</bean>

6. 前端頁面:登錄與歡迎頁

login.jsp 使用表單提交至 /user/login.action,包含前端 JS 校驗;welcome.jsp 簡單顯示「登錄成功」。運行專案,輸入正確郵箱與密碼點擊登錄,若見到歡迎頁即表示整合成功。

本篇完成了 Struts 2 與 Spring 的無縫整合,奠定了 Web 層基礎。下一篇將引入 Tiles 2 優化視圖佈局。

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