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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...