WEB后端復習——MVC、SSM【含登錄頁面代碼】

MVC(Model-View-Controller)是一種軟件設計模式,用于將應用程序分解為三個相互關聯的組件:模型(Model)、視圖(View)和控制器(Controller)。這種模式在構建用戶界面和圖形界面應用程序時特別有用,它促進了代碼的模塊化和可維護性。
以下是MVC模式中每個組件的簡要描述:
1. **模型(Model)**:
? ?- 模型是應用程序的核心,代表應用程序的數據和業務邏輯
? ?- 它管理應用程序的狀態和數據,并實現所有的業務規則。
? ?- 模型不直接與用戶界面交互,它通過控制器接收用戶的輸入和數據請求。
2. **視圖(View)**:
? ?- 視圖是用戶界面的一部分,負責展示數據(模型)給用戶,并接收用戶的輸入。
? ?- 它從模型中獲取數據,并定義數據的呈現方式。
? ?- 視圖應該盡可能簡單,不包含任何業務邏輯。
3. **控制器(Controller)**:
? ?- 控制器是模型和視圖之間的中介,它接收用戶的輸入并調用模型進行相應的更新。
? ?- 它還負責選擇視圖來顯示模型的數據,并處理用戶的交互。
? ?- 控制器解釋用戶的輸入,并轉換這些輸入為對模型的操作或對視圖的更新。
MVC模式的工作流程通常如下:
1. 用戶與視圖交互,發送請求。
2. 控制器接收請求,并決定調用哪個模型來處理請求。
3. 模型根據請求執行業務邏輯,并可能更新其狀態。
4. 控制器選擇合適的視圖來顯示模型的數據。
5. 視圖呈現數據給用戶。
MVC模式的主要優點包括:
- **代碼分離**:業務邏輯、數據和用戶界面被分離,使得代碼更易于管理和維護。
- **可擴展性**:由于組件之間的低耦合,可以獨立地修改或替換模型、視圖和控制器。
- **可復用性**:模型和控制器可以在不同的視圖上復用,視圖可以在不同的模型上復用。
- **測試友好**:由于業務邏輯和數據與用戶界面分離,可以更容易地進行單元測試。
MVC模式被廣泛用于Web應用程序開發,特別是在Java的Spring框架、ASP.NET MVC、Ruby on Rails等Web開發框架中。


SSM框架是指Spring、SpringMVC和MyBatis這三個開源框架的集合,它們通常一起使用來構建復雜的Java Web應用程序。每個框架都承擔著不同的角色:
1. **Spring**:Spring是一個輕量級的Java企業級應用開發框架,主要提供IoC(控制反轉)和AOP(面向切面編程)的支持。Spring框架的核心功能是提供依賴注入(DI),這使得應用程序的組件更加模塊化,易于測試和重用。Spring還提供了對事務管理、數據訪問、消息傳遞、安全性等企業服務的支持。
2. **SpringMVC**:SpringMVC是Spring框架的一部分,專門用于構建Web應用程序的MVC(模型-視圖-控制器)模式實現。它分離了應用程序的輸入、處理和輸出,使得代碼更加清晰和易于維護。SpringMVC處理HTTP請求并將它們映射到特定的處理器方法,這些方法通常返回模型和視圖,以呈現給用戶。
3. **MyBatis**:MyBatis是一個持久層框架,它提供了對數據庫的操作支持。MyBatis使用簡單的XML或注解用于配置和映射原生信息,將接口和Java的POJOs(Plain Old Java Objects)映射成數據庫中的記錄。MyBatis的主要特點是靈活,它允許開發者自己編寫SQL,從而提供了更好的性能和可定制性。
SSM框架的結合使用,可以提供一種分層架構,其中:
- Spring負責管理應用程序的業務邏輯和依賴注入。
- SpringMVC負責處理Web層的請求和響應。
- MyBatis負責數據訪問層的操作,即與數據庫的交互。
這種分層架構有助于提高代碼的可讀性、可維護性和可擴展性。SSM框架是構建大型Java Web應用程序的流行選擇,因為它結合了三個框架的最佳特性,提供了一個強大、靈活且易于使用的開發環境。
?


Spring框架的三個核心技術是IoC(控制反轉)、DI(依賴注入)和AOP(面向切面編程)。下面是這三個技術的簡述:
1. **IoC(控制反轉)**:
? ?- 控制反轉是一種設計原則,它將對象創建和依賴管理的控制權從程序代碼轉移到外部容器(在Spring中是Spring容器)。
? ?- 通過IoC,開發者不再直接在代碼中創建對象和配置依賴,而是通過配置文件或注解來描述這些關系,由Spring容器負責對象的創建和依賴的注入。
? ?- IoC有助于減少代碼的耦合度,提高代碼的可測試性和可維護性。
2. **DI(依賴注入)**:
? ?- 依賴注入是IoC的一種實現方式,它允許將依賴的對象通過構造函數、工廠方法或屬性設置注入到另一個對象中。
? ?- Spring通過DI來管理應用程序中的對象依賴關系,使得開發者可以專注于業務邏輯,而不必擔心對象的創建和依賴問題。
? ?- DI有助于實現模塊化和可重用的組件,同時也使得單元測試更加容易。
3. **AOP(面向切面編程)**:
? ?- 面向切面編程是一種編程范式,它允許開發者將橫切關注點(如日志、事務、安全等)與業務邏輯分離。
? ?- AOP通過切面(Aspect)來定義橫切關注點,并通過通知(Advice)將這些關注點織入到程序的指定位置(連接點,Join Point)。
? ?- Spring AOP提供了一種聲明式的方式來管理橫切關注點,從而減少了代碼的重復性和復雜性,提高了代碼的可維護性。
總結來說,IoC和DI使得依賴管理更加靈活和可配置,而AOP則提供了在不修改核心業務邏輯的情況下,將橫切關注點織入到應用程序中的能力。這三個核心技術共同構成了Spring框架的核心優勢,使得它成為開發企業級Java應用程序的流行選擇。
?


【登錄操作】

①業務邏輯層(模型)建立 JavaBean類 User【GET SET方法 無參構造方法】

public class User {private String username;private String password;public User() {}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;}

②接口類 UserDao?

public interface UserDao {void saveUser(User user);ArrayList<User> selectUser();
}

③接口實現 UserDaoimpl

3.1實現數據庫鏈接

public class UserDaoimpl  implements UserDao{//先接入JDBCprivate static String driver = "com.mysql.jdbc.Driver";private static String dbUrl = "jdbc:mysql://localhost:3306/db";private static String dbUser = "root";private static String dbpsw="123456";//無參構造法public UserDaoimpl(){}//獲取Connectionpublic Connection getConnection(){Connection con = null;try {Class.forName(driver);con = DriverManager.getConnection(dbUrl,dbUser,dbpsw);}catch (Exception e){e.printStackTrace();}return con;}
}

3.2實現保存用戶信息功能(在impl類中繼續添加方法)

    @Overridepublic void saveUser(User user) {Connection con =null;PreparedStatement stmt =null;try {con.setAutoCommit(false);con = getConnection();String sql = "insert into user (username,password) values (?,?)";stmt = con.prepareStatement(sql);stmt.setString(1,user.getUsername());stmt.setString(2,user.getPassword());stmt.execute();con.commit();} catch (Exception e){try {con.rollback();}catch (SQLException s){s.printStackTrace();}finally {try {stmt.close();con.close();}catch (Exception e){e.printStackTrace();}}}}

3.3查詢所有用戶信息

    @Overridepublic ArrayList<User> selectUser() {Connection con= null;PreparedStatement pstm =null;ResultSet rs = null;ArrayList<User> users =new ArrayList<>();try {con = getConnection();String sql = "select * from User";pstm = con.prepareStatement(sql);rs = pstm.executeQuery();User user =new User();while (rs.next()){user.setUsername(rs.getString(1));user.setPassword(rs.getString(2));users.add(user);}rs.close();pstm.close();con.close();} catch (SQLException e) {throw new RuntimeException(e);}return users;}
}

④Servlet類

@WebServlet("/login")
public class Http extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String name = req.getParameter("username");String psw = req.getParameter("password");User user = new User();UserDao userDao =new UserDaoimpl();ArrayList<User> users = userDao.selectUser();//實現登錄功能//實現條件查詢方法 與查詢類似只需更改sql語句//用getParameter接受到的name psw與數據庫中的一致if (name.equals(users.get(0).getUsername())&&psw.equals(users.get(0).getPassword())){req.setAttribute("username",name);//攜帶name返回req.getRequestDispatcher("/welcome.jsp").forward(req,resp);//跳轉至welcome頁 請求轉發攜帶信息return;}else {resp.sendRedirect("/login.jsp");//重定向不攜帶信息}}
}

⑤表單提交

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="login" name="1" ><input type="text" placeholder="name" name="username"><br><input type="password" name="password" placeholder="psw"><br><button type="submit" value="login">denglu</button></form></body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11593.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11593.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11593.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器人學導論實驗1—CoppeliaSim 平臺介紹及初步使用BJTU

1. 實驗內容分析 對實驗內容的理解及關鍵點&#xff1a; 理解這個實驗的關鍵點在于理解如何使用CoppeliaSim和MATLAB來控制和操作機器人。需要熟悉這兩個工具的基本操作&#xff0c;例如如何加載場景、如何修改機器人參數、如何使用MATLAB客戶端程序來控制機器人等。此外&#…

Docker 部署 Prometheus 實現一個極簡的 QPS 監控

背景 : Prometheus 是近年來最流行的開源監控框架, 其功能強大且易于使用, 擁有各種主流后端語言(Java/Go/Python/Node.js等)與各種場景(如web handler/ k8s/Nginx/MySQL等)的客戶端, 并自帶圖形化顯示頁面。分享一個快速入門Prometheus 的教程, 實現一個極簡的, 后端開發需要特…

Nginx-基礎-基礎配置-Location

Location 參數匹配模式 參數匹配方式匹配模式說明注意事項精準匹配普通字符串匹配用于標準uri前&#xff0c;要求請求字符串與uri精準匹配&#xff0c;成功則立即處理&#xff0c;nginx停止搜索其他匹配。~正則匹配正則表達式匹配用于正則uri&#xff0c;表示uri包含正則表達…

使用 Docker 輕松部署 Spring Boot 應用

當今軟件開發領域&#xff0c;Docker 和 Spring Boot 的組合已成為開發和部署應用程序的黃金標準。在這篇博客中&#xff0c;我們將詳細探討如何將 Spring Boot 應用容器化并使用 Docker 進行部署&#xff0c;確保你的部署過程既高效又可靠。 引言 Docker 提供了一個標準化的…

基于SSM的理發店會員管理系統的設計和實現(有報告)。Javaee項目。ssm項目。

演示視頻&#xff1a; 基于SSM的理發店會員管理系統的設計和實現&#xff08;有報告&#xff09;。Javaee項目。ssm項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系結構&#xff0…

Docker安裝達夢數據庫

1.確保已安裝Docker 可參考&#xff1a;Linux安裝Docker-CSDN博客 2.上傳dm鏡像并導入安裝包 可以從&#xff1a;產品下載 | 達夢數據庫下載dm鏡像&#xff0c;如下圖&#xff1a; docker load -i dm8_20230808.tar 3.導入后查看鏡像 docker images 4.啟動容器 docker run …

圖的概念、性質和存儲與簡單遍歷

前置知識&#xff1a;樹的基本概念及性質 為了保證學習效果&#xff0c;請保證已經掌握前置知識之后&#xff0c;再來學習本章節&#xff01;如果在閱讀中遇到困難&#xff0c;也可以回到前面章節查閱。 學習目標 掌握圖的基本概念掌握圖的一些性質 圖的概念 基本概念 圖 (…

Pytorch如何計算網絡參數

方法一. 利用pytorch自身 PyTorch是一個流行的深度學習框架&#xff0c;它允許研究人員和開發者快速構建和訓練神經網絡。計算一個PyTorch網絡的參數量通常涉及兩個步驟&#xff1a;確定網絡中每個層的參數數量&#xff0c;并將它們加起來得到總數。 以下是在PyTorch中計算網…

如何在 CloudFlare 里屏蔽/攔截某個 IP 或者 IP 地址段

最近除了接的 CloudFlare 代配置訂單基本很少折騰自己的 CloudFlare 配置了,今天給大家簡單的講解一下如何在 CloudFlare 里屏蔽/攔截 IP 地址和 IP 地址段,雖然明月一直都很反感針對 IP 的屏蔽攔截,但不得不說有時候還是很有必要的。并且,既然可以攔截屏蔽 IP 自然也可以但…

鴻蒙內核源碼分析(VFS篇) | 文件系統和諧共處的基礎

基本概念 | 官方定義 VFS&#xff08;Virtual File System&#xff09;是文件系統的虛擬層&#xff0c;它不是一個實際的文件系統&#xff0c;而是一個異構文件系統之上的軟件粘合層&#xff0c;為用戶提供統一的類Unix文件操作接口。由于不同類型的文件系統接口不統一&#x…

Flink HA模式下JobManager切換時發送告警

資源&版本信息 Flink版本1.14.6 運行平臺&#xff1a;K8s HA使用ZK&#xff08;使用K8s的ETC應該是一個道理&#xff09; 詳解Flink HA原理 Flink啟動時會創建HighAvailabilityServices提供HA和相關基礎服務&#xff0c;其中包括leaderRetrievalService和LeaderElecti…

搜索引擎的設計與實現(二)

目錄 3 搜索引擎的基本原理 3.1搜索引擎的基本組成及其功能 l.搜索器 (Crawler) 2.索引器(Indexer) 3.檢索器(Searcher) 4.用戶接口(UserInterface) 3.2搜索引擎的詳細工作流程 4 系統分析與設計 4.1系統分析 4.2系統概要設計 4.2系統實現目標 前面內容請移步 搜索引…

Rust 語言不支持 goto 語句

一、Rust 不提供 goto 語句 Rust 語言并沒有提供 goto 語句。goto 語句在很多現代編程語言中已經不再被推薦使用&#xff0c;因為它可能導致代碼的流程變得難以跟蹤和理解&#xff0c;特別是在復雜的程序中。Rust 語言設計者選擇了更加結構化和可預測的控制流語句&#xff0c;…

關于C++多態的復習總結

多態 簡介: 面向對象的三大特性之一&#xff0c;多態顧名思義即具有多種形態&#xff0c;即去執行某個行為時&#xff0c;當不同的對象去執行時會產生不同的狀態 構成多態的條件 條件一 必須通過基類&#xff08;父類&#xff09;的指針或者引用調用虛函數&#xff08;函數…

寧夏銀川市起名專家的老師顏廷利:死神(死亡)并不可怕,可怕的是...

在中國優秀傳統文化之中&#xff0c;漢語‘巳’字與‘四’同音&#xff0c;在阿拉伯數字里面&#xff0c;通常用‘4’來表示&#xff1b; 湖南長沙、四川成都、重慶、寧夏銀川最靠譜最厲害的起名大師的老師顏廷利教授指出&#xff0c;作為漢語‘九’字&#xff0c;倘若是換一個…

FreeRTOS中斷管理

FreeRTOS中斷管理 基于STM32_stm32 freertos 按鍵中斷-CSDN博客 更加詳情請看以上鏈接↑ 中斷優先級 任何中斷的優先級都大于任務! 在我們的操作系統,中斷同樣是具有優先級的,并且我們也可以設置它的優先級,但是他的優先 級并不是從 0~15 ,默認情況下它是從 5~15 ,…

[ACTF新生賽2020]SoulLike

沒見過的錯誤&#xff1a; ida /ctg目錄下的hexrays.cfg文件中的MAX_FUNCSIZE64 改為 MAX_FUNCSIZE1024 然后就是一堆數據 反正就是12個字符 from pwn import * flag"actf{" k0 for n in range(12):for i in range(33,127):pprocess("./SoulLike")_flag…

94.二叉樹的中序遍歷

刷算法題&#xff1a; 第一遍&#xff1a;1.看5分鐘&#xff0c;沒思路看題解 2.通過題解改進自己的解法&#xff0c;并且要寫每行的注釋以及自己的思路。 3.思考自己做到了題解的哪一步&#xff0c;下次怎么才能做對(總結方法) 4.整理到自己的自媒體平臺。 5.再刷重復的類…

Python爬蟲入門:網絡世界的寶藏獵人

今天阿佑將帶你踏上Python的肩膀&#xff0c;成為一名網絡世界的寶藏獵人&#xff01; 文章目錄 1. 引言1.1 簡述Python在爬蟲領域的地位1.2 闡明學習網絡基礎對爬蟲的重要性 2. 背景介紹2.1 Python語言的流行與適用場景2.2 網絡通信基礎概念及其在數據抓取中的角色 3. Python基…

今日總結2024/5/13

今日學習了01背包求具體方案的方法 Acwing.12 背包問題求具體方案 由于背包是從小到大枚舉物品&#xff0c;只能從后往前判斷是從哪個狀態遞推過來的&#xff0c;而該題要求按字典序順序輸出字典序最小的最優方案 因此要將物品從大到小枚舉&#xff0c;判斷時從小到大判斷是…