JavaWeb框架SSH_Struts2_(一)

来源:http://www.cnblogs.com/Mairr/archive/2017/11/18/7846747.html
-Advertisement-
Play Games

Struts2 框架入門及結合Intellj idea完成登陸demo測試 ...


1. Struts2 框架入門及結合Intellj idea完成登陸demo測試

 

1.1  本章目錄:

 

  • 框架入門
    1. Struts2簡介
    2. Struts2入門案例
    3. Struts2執行流程分析

 

2. 具體內容

 

2.1  框架入門


2.1.1  Struts2簡介

 

(1). Struts2是一種基於MVC模式的的輕量級Web開發框架。

  MVC模式:MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。

  • Model(模型):是應用程式中用於處理應用程式數據邏輯的部,通常模型對象負責在資料庫中存取數據;
  • View(視圖):是應用程式中處理數據顯示的部分,通常視圖是依據模型數據創建的;
  • Controller(控制器):是應用程式中處理用戶交互的部分,通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。

(2). Struts2是以WebWork為核心的,它採用攔截器的機制來處理用戶的請求。這樣的設計也會使得業務邏輯控制器能夠與Servlet API完全脫離開,所以Struts2可以理解為webwork的產品。

(3). 區別Struts2和Struts1:

  在技術方面,Stuts1有個核心控制器,但是只提供了一個介面,也就是execute,還要配置actionform之類的,所以依賴性比較強;而Struts2是基於webwork,針對攔截器開發的,也就是所謂的AOP思想,可以配置多個action,用起來比較方便,但是因為請求之前的攔截器有一些註入的操作,速度相對Struts1來說慢一點。

(4). Struts2的優點:

  • 項目開源,使用及拓展方便
  • 提供Exception處理機制
  • Result方式的頁面導航,通過Result標簽很方便地實現重定向和頁面跳轉
  • 提供強大的、可以減少頁面代碼的標簽
  • 提供良好的Ajax支持

 

2.1.2  Struts2入門案例

 

   筆者利用Intellj idea寫了個簡單的案例。希望通過這個簡單的案例,能夠幫助初步認識struts2的運行流程。當然,還有IntelliJ idea的相關配置操作。筆者使用的是ubuntu的系統,不再講述idea的安裝以及JDK配置,tomcat的配置等等問題,相關教程很多,自己動手找找就好啦。

  (1)到官網上面,下載Struts2的最新版本,推薦下載Struts-xxx-min-lib.zip。下載完成之後,lib目錄下應該有如下所示的jar包:

  (2)打開IntellJ idea,創建項目create new Project

  (2)選擇Java Enterprises--->Web Application(...)--->Struts2(...)--->Use Library

   (3)選擇use library,不要選擇Download,因為idea配置的Struts2版本不一定一致,我們直接選擇自己下好的Struts2中的jar;選擇Create-->(找到步驟(1)中的jar包路徑)用Ctrl全部選中加進來。

  (4)接著next---->命名(我這裡命名是Struts2_TestDemo_Project)完成後,項目欄如下所示:

  (5)完成的項目中,包括了Struts.xml, web.xml, index.jsp。接下來進行簡單的配置工作;

  • 打開File--->Project Structure--->Problem--->如果有問題提示,則單擊fix,選擇add Struts2 to the artifact--->OK;
  • 修改web.xml的filter-class中內容為org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  • 將滑鼠點到StrutsPrepareAndExecuteFilter上面出現如下所示提示:

(這個時候直接刪掉該行中的"ng."即可,完成後不再有提示)

 

  (6)基本的配置到這裡也就完成了,接下來寫一個登陸Demo;

  • 後端部分,在src中建一個java包(test_login)---->包中建一個java類(LoginAction)代碼如下:

    LoginAction:

package test_login;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

    private String username;
    private String password;

    @Override
    public String execute() throws Exception {
        if (username.equals("admin") && password.equals("123")) {
            return SUCCESS;
        } else {
            return LOGIN;
        }
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

 

  • Struts.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="Login" class="test_login.LoginAction">
            <result name="success">/success.jsp</result>
            <result name="login">/index.jsp</result>
        </action>
    </package>
</struts>

 

  • 登錄界面index.jsp
<%--
  Created by IntelliJ IDEA.
  User: mairr
  Date: 17-11-17
  Time: 下午6:41
  To change this template use File | Settings | File Templates.
--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>用戶登陸界面</title> </head> <body> <h1>這是一個用戶登陸的地方</h1> <form action="Login.action" method="post"> <table> <tr> <td>用戶名:</td> <td><input type="text" name="username"></td> </tr> <tr> <td>密碼:</td> <td><input type="password" name="password"></td> </tr> <tr> <td colspan="2" style="text-align: center"><input type="submit" value="登錄"></td> </tr> </table> </form> </body> </html>

 

  • 登陸成功跳轉頁面success.jsp
<%--
  Created by IntelliJ IDEA.
  User: mairr
  Date: 17-11-17
  Time: 下午7:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陸成功</title>
</head>
<body>
<h1>恭喜你,登陸成功啦~~~</h1>
</body>
</html>

 

  • 完成之後,進行項目的發佈,File--->Project Structure--->Artifacts--->將struts2項目加到OutputLayer--->OK---->最後Run--->index.jsp,打開google瀏覽器(http://localhost:8080/index.jsp),登陸登陸界面如下:

  • 輸入用戶名:admin,密碼:123;登陸成功後瀏覽器界面如下:

 

2.1.1  Struts2執行流程分析

 

  Struts2的執行流程圖如下所示:

 

(1)客戶端瀏覽器發送一個請求,(HttpServletRequest);

(2)程式會調用StrutsPrepareAndExecuteFilter,然後詢問ActionMapper這個請求是否需要調用某個Action;

(3)如果ActionMapper決定需要調用某個Action,StrutsPrepareAndExecuteFilter會把這個請求處理給ActionProxy(Action代理);

(4)ActionProxy通過配置管理器(Configuration Manager)從配置文件(Struts.xml)中,讀取框架配置信息,從而找到需要調用的Action類;

(5)ActionProxy會創建一個ActionInvocation的實例;

(6)ActionInvocation使用命名模式來調用Action,在調用Action前,會依次調用所有配置的攔截器(Intercepter1、Intercepter2、Intercepter3..);

(7)一旦Action執行完成,返回結果字元串,ActionInvocation就會負責查找結果字元串對應的Result,然後執行這個Result。通常情況下Result會調用一些模板(JSP等)來呈現頁面。

(8)產生的Result信息返回ActionInvocation,此過程中攔截器會被再次執行(順序與Action執行之前相反);

(9)產生一個HttpServletResponse的響應行為,通過StructsPrepareAndExecuteFilter反饋給客戶端;

 

 

 

 

參考書籍:《SSH框架整合教程》

參考文章:http://blog.csdn.net/rcnjtech/article/details/77914381

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Step1.情景概要 Hello,小伙伴們,好久不見,之前跟大家分享了三層架構與MVC思想,相信大家對於這兩塊內容有了相對清晰的個人認識了,既然我們講到了MVC,這裡我們接著這塊內容繼續往下深入,今天我們來看看MVC 中的V-VIEW 即我們所說的視圖層。 Step2.視圖技術 對於我們WEB開發人 ...
  • static修飾的成員變數和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的實例,被類的所有實例共用。 只要這個類被載入,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們。因此,static對象可以在它的任何對象創建之前訪問,無需引用任何對象。 1、static變數 按照是否靜態 ...
  • 題目描述: Reverse a singly linked list. 解題思路: 可用遞歸的方法對鏈表進行反轉。 代碼: 解題收穫: 溫習了基本的遞歸思想和鏈表的使用。但做的時候還是迷茫了很久,說明對鏈表的使用還是不太熟悉。 ...
  • 本文重點介紹使用Eclipse+pydev插件來寫Python代碼, 以及在Mac上配置Eclipse+Pydev 和Windows配置Eclipse+Pydev 轉載:https://www.cnblogs.com/Bonker/p/3584707.html 編輯器:Python 自帶的 IDLE ...
  • 1.前言 上次我們認識了java責任鏈模式的設計,那麼接下來將給大家展示責任鏈模式項目中的實際運用。如何快速搭建責任鏈模式的項目中運用。 2.簡單技術準備 我們要在項目中使用藉助這樣的幾個知識的組合運用,才能更好的詮釋。必備技能:簡單註解的定義;Spring攔截器的使用;簡答的責任鏈模式的定義;擁有 ...
  • 參考鏈接: - https://www.zhihu.com/question/64414628 php fpm 進程數和併發數是什麼關係? - https://segmentfault.com/q/1010000005942449/a-1020000012063637 php不支持多線程所以不用考慮 ...
  • http://blog.chinaunix.net/uid-28458801-id-4200573.html 一、typeof詳解: 前言: typeof關鍵字是C語言中的一個新擴展,這個特性在linux內核中應用非常廣泛。(其實這和C++的auto關鍵字和可以推斷decltype關鍵字相當類似) ...
  • 一、單系統登錄機制1、http無狀態協議 web應用採用browser/server架構,http作為通信協議。http是無狀態協議,瀏覽器的每一次請求,伺服器會獨立處理,不與之前或之後的請求產生關聯,這個過程用下圖說明,三次請求/響應對之間沒有任何聯繫 但這也同時意味著,任何用戶都能通過瀏覽器訪問 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...