基于Servlet實現的管理系統(包含服務器源碼+數據庫)

資料下載鏈接

介紹

基于Servlet框架的管理系統?簡潔版?;

實現?登錄?、?注冊?、??、??、??、??;

可繼續完善增加前端、校驗、其他功能等;

可作為?Servlet項目?開發練習基礎模型;

課程設計?、?畢業設計?開發基礎;

任何復雜的框架都是簡單的知識組合并延伸的,學好基礎知識才是最重要的;

此項目簡單,便于理解基本原理,為復雜的Servlet、SSH、SSM等復雜項目的開發打下基礎。

環境準備

開發平臺:Idea 2019

數據庫:MySQL 5.0.22

服務器:Tomcat 9.0.37

注意:需要安裝IDEA開發平臺、MySQL數據庫和Tomcat服務器,版本不一定完全一致,做好版本適應性配置即可。

項目結構

1.數據庫及Java代碼文件?

輸入圖片說明

2.Jsp等前端代碼?

輸入圖片說明

3.Tomcat服務器配置與運行

輸入圖片說明

4.MySQL數據庫?

輸入圖片說明

基本原理

1. 相關概念

Servlet是一門用于開發動態web網頁的技術,用于交互式地瀏覽和修改數據,生成動態Web內容。如今Java Web開發中已經很少單純用到Servlet去開發Web應用,更多是整合框架開發。實際上,大多框架都是基于基礎工具去封裝起來的,像Struts就是對servlet與filter的封裝,Hibernate對JDBC的封裝等等。所以,無論學習什么框架,首先深入理解基礎知識,從而對框架中出現的問題有一個理性的認識與解決。

2. 基本原理

2.1工作流程

  1. Web Client 向Servlet容器(Tomcat)發出Http請求

  2. Servlet容器接收Web Client的請求

  3. Servlet容器創建一個HttpRequest對象,將Web Client請求的信息封裝到這個對象中。

  4. Servlet容器創建一個HttpResponse對象

  5. Servlet容器調用HttpServlet對象的service方法,把HttpRequest對象與HttpResponse對象作為參數傳給 HttpServlet 對象。

  6. HttpServlet調用HttpRequest對象的有關方法,獲取Http請求信息。

  7. HttpServlet調用HttpResponse對象的有關方法,生成響應數據。

  8. Servlet容器把HttpServlet的響應結果傳給Web Client。

輸入圖片說明

輸入圖片說明

2.2處理請求流程

  1. 用戶點擊一個鏈接,指向了一個servlet而不是一個靜態頁面。

  2. 容器“看出”這個請求是一個Servlet,所以它創建了兩個對象HttpServletRequest和HttpServletResponse。

  3. 容器根據請求中的URL找到正確的Servlet,為這個請求創建或分配一個線程,并把請求和響應對象傳遞給這個Servlet線程。

  4. 容器調用Servlet的service()方法。根據請求的不同類型,service()方法會調用doGet()或doPost()方法。這里假設調用doGet()方法。

  5. doGet()方法生成動態頁面,并把這個頁面“塞到”響應對象里,需要注意的是,容器還有響應對象的一個引用!

  6. 線程結束,容器把響應對象轉換為一個HTTP響應,并把它發回給客戶,然后刪除請求和響應對象。

2.3工作原理

? 1. 首先簡單解釋一下Servlet接收和響應客戶請求的過程,首先客戶發送一個請求,Servlet是調用service()方法對請求進行響應的,通過源代碼可見,service()方法中對請求的方式進行了匹配,選擇調用doGet,doPost等這些方法,然后再進入對應的方法中調用邏輯層的方法,實現對客戶的響應。在Servlet接口和GenericServlet中是沒有doGet()、doPost()等等這些方法的,HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個Servlet的時候,都必須實現doGet或doPost等這些方法。

? 2. 每一個自定義的Servlet都必須實現Servlet的接口,Servlet接口中定義了五個方法,其中比較重要的三個方法涉及到Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。GenericServlet是一個通用的,不特定于任何協議的Servlet,它實現了Servlet接口。而HttpServlet繼承于GenericServlet,因此HttpServlet也實現了Servlet接口。所以我們定義Servlet的時候只需要繼承HttpServlet即可。

? 3. Servlet接口和GenericServlet是不特定于任何協議的,而HttpServlet是特定于HTTP協議的類,所以HttpServlet中實現了service()方法,并將請求ServletRequest、ServletResponse 強轉為HttpRequest 和 HttpResponse。

2.4Servlet生命周期

servlet程序是由web服務器調用,web服務器實現了對servlet生命周期的管理。當你的應用加載并使用一個Servlet時,從初始化到銷毀這個Servlet期間會發生一系列的事件,這些事件叫做Servlet的生命周期事件(或方法)。

Servlet 生命周期可以歸納為:

Servlet 加載--->實例化--->服務--->銷毀

Servlet生命周期定義了一個Servlet如何被加載、初始化,以及它怎樣接收請求、響應請求,提供服務。

輸入圖片說明

1. 創建Servlet實例web容器負責加載Servlet,當web容器啟動時或者是在第一次使用這個Servlet時,容器會負責創建Servlet實例,但是用戶必須通過部署描述符(web.xml)指定Servlet的位置,也就是Servlet所在的類名稱,成功加載后,web容器會通過反射的方式對Servlet進行實例化。2. WEB容器調用Servlet的init()方法,對Servlet進行初始化在Servlet實例化之后,Servlet容器會調用init()方法,來初始化該對象,主要是為了讓Servlet對象在處理客戶請求前可以完成一些初始化的工作,例如,建立數據庫的連接,獲取配置信息等。對于每一個Servlet實例,init()方法只能被調用一次。init()方法有一個類型為ServletConfig的參數,Servlet容器通過這個參數向Servlet傳遞配置信息。Servlet使用ServletConfig對象從Web應用程序的配置信息中獲取以名-值對形式提供的初始化參數。另外,在Servlet中,還可以通過ServletConfig對象獲取描述Servlet運行環境的ServletContext對象,使用該對象,Servlet可以和它的Servlet容器進行通信。無論有多少客戶機訪問Servlet,都不會重復執行init()。3. Servlet初始化之后,將一直存在于容器中,service()響應客戶端請求① 如果客戶端發送GET請求,容器調用Servlet的doGet方法處理并響應請求② 如果客戶端發送POST請求,容器調用Servlet的doPost方法處理并響應請求③ 或者統一用service()方法處理來響應用戶請求service()是Servlet的核心,負責響應客戶的請求。每當一個客戶請求一個HttpServlet對象,該對象的Service()方法就要調用,而且傳遞給這個方法一個“請求”(ServletRequest)對象和一個“響應”(ServletResponse)對象作為參數。在HttpServlet中已存在Service()方法。默認的服務功能是調用與HTTP請求的方法相應的do功能。要注意的是,在service()方法被容器調用之前,必須確保init()方法正確完成。容器會構造一個表示客戶端請求信息的請求對象(類型為ServletRequest)和一個用于對客戶端進行響應的響應對象(類型為ServletResponse)作為參數傳遞給service()方法。在service()方法中,Servlet對象通過ServletRequest對象得到客戶端的相關信息和請求信息,在對請求進行處理后,調用ServletResponse對象的方法設置響應信息。4. WEB容器決定銷毀Servlet時,先調用Servlet的destroy()方法,通常在關閉web應用之前銷毀Servletdestroy()僅執行一次,在服務器端停止且卸載Servlet時執行該方法。當容器檢測到一個Servlet對象應該從服務中被移除的時候,容器會調用該對象的destroy()方法,以便讓Servlet對象可以釋放它所使用的資源,保存數據到持久存儲設備中,例如,將內存中的數據保存到數據庫中,關閉數據庫的連接等。當需要釋放內存或者容器關閉時,容器就會調用Servlet對象的destroy()方法。在Servlet容器調用destroy()方法前,如果還有其他的線程正在service()方法中執行,容器會等待這些線程執行完畢或等待服務器設定的超時值到達。一旦Servlet對象的destroy()方法被調用,容器不會再把其他的請求發送給該對象。如果需要該Servlet再次為客戶端服務,容器將會重新產生一個Servlet對象來處理客戶端的請求。在destroy()方法調用之后,容器會釋放這個Servlet對象,在隨后的時間內,該對象會被Java的垃圾收集器所回收。注意①在正常情況下,Servlet只會初始化一次,而處理服務會調用多次,銷毀也只會調用一次;但是如果一個Servlet長時間不使用的話,也會被容器自動銷毀,而如果需要再次使用時會重新進行初始化的操作,即在特殊情況下初始化可能會進行多次,銷毀也可能進行多次。②在servlet實例創建之后,在servlet能為客戶請求提供服務之前,容器會在servlet實例上調用init()方法。如果你有初始化代碼,就應該覆蓋servlet類的init()方法,否則會調用GenericServlet的init()方法。而對應每個客戶請求(無論是誰,無論是不是同一個人,只針對請求),容器都會創建一對新的請求和響應對象,創建一個新的線程/棧。任何servlet類都不會有多個實例,除非一種特殊情況(SingleThreadModel)。③ servlet生命周期的4個周期總結如下:
a. 實例化以及加載servlet,new的過程b. 初始化init(ServletConfig)。c. 處理請求,調用servlet的service,doget,dopost方法將Request和Response,作為參數傳遞。d. 退出服務,調用destory方法釋放資源。

頁面展示

1.登錄頁面

輸入圖片說明

2.注冊頁面?

輸入圖片說明

3.主頁?

輸入圖片說明

4.展示頁面

輸入圖片說明

5.新增頁面?

輸入圖片說明

6.刪除頁面?

輸入圖片說明

7.修改頁面?

輸入圖片說明

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

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

相關文章

JVM---jvm里的內存溢出

目錄 堆溢出 虛擬機棧和本地方法棧溢出(棧溢出很少出現) 方法區和運行時常量池溢出 本機內存直接溢出(實際中很少出現、了解即可) 堆溢出 堆溢出:最常見的是大list,list里面有很多元素 堆溢出該怎么解決…

第7章:貝葉斯分類器

貝葉斯決策論 貝葉斯分類器:使用貝葉斯公式 貝葉斯學習:使用分布估計(不同于頻率主義的點估計) 極大似然估計 樸素貝葉斯分類 半樸素貝葉斯 條件獨立性假設,在現實生活中往往很難成立。 半樸素貝葉 斯的一個常用策略…

C++學習筆記4

什么是指針? 指針是存儲內存地址的變量。就像int變量用于存儲整數值一樣,指針變量用于存儲內存地址。指針是一種指向內存單元的特殊變量。 內存單元地址通常使用的是16進制表示(0~9和A~F)來表示數字。顯示…

React源碼解析18(6)------ 實現useState

摘要 在上一篇文章中,我們已經實現了函數組件。同時可以正常通過render進行渲染。 而通過之前的文章,beginWork和completeWork也已經有了基本的架子。現在我們可以去實現useState了。 實現之前,我們要先修改一下我們的index.js文件&#x…

DAY2,ARM(特殊功能寄存器,數據操作指令,跳轉指令)

1.cmp、sub、b指令的使用; 代碼: .text .global _start _start:mov r0,#9mov r1,#15loop:cmp r0,r1beq stopsubcc r1,r1,r0subhi r0,r0,r1b loopstop:b stop .end結果: 2.匯編指令計算1~100之間和; 代碼: .text .gl…

【從零學習python 】47. 面向對象編程中的繼承概念及基本使用

文章目錄 繼承的基本使用代碼逐行講解說明:進階案例 繼承的基本使用 在現實生活中,繼承一般指的是子女繼承父輩的財產,父輩有的財產,子女能夠直接使用。 程序里的繼承 繼承是面向對象軟件設計中的一個概念,與多態、封裝共為面向對…

Android 13 Launcher——屏蔽上拉到應用列表

背景 Launcher定制需要將原先的應用列表去掉,可以從根源去掉,就是將上拉出現應用列表的上拉手勢直接屏蔽,讓其不能上拉出現應用列表界面,在研究的過程中順便將下拉出現負一屏的邏輯也研究了下,如下就是具體實現。 目錄 背景 一.如何屏蔽上拉出現應用列表 一.如何屏蔽上拉…

培訓報名小程序-用戶注冊

目錄 1 創建數據源2 注冊用戶3 判斷用戶是否注冊4 完整代碼總結 我們的培訓報名小程序,用戶每次打開時都需要填寫個人信息才可以報名,如果用戶多次報名課程,每次都需要填寫個人信息,比較麻煩。 本篇我們就優化一下功能&#xff0c…

線上售樓vr全景看房成為企業數字化營銷工具

在房地產業中,VR全景拍攝為買家提供了虛擬看房的全新體驗。買家可以通過相關設備,遠程參觀各個樓盤的樣板間和實景,感受房屋的空間布局和環境氛圍,極大地提高了購房決策的準確性。對于房地產開發商和中介機構來說,VR全…

@Async用哪個線程池

一共可以分三種情況 第一種 未在手動在項目中配置任何線程池 spring boot 會默認添加一個coreSize8的 無界線程池,名稱為applicationTaskExecutor (源碼:org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration&…

如何搭建個人郵件服務hmailserver并實現遠程發送郵件

文章目錄 1. 安裝hMailServer2. 設置hMailServer3. 客戶端安裝添加賬號4. 測試發送郵件5. 安裝cpolar6. 創建公網地址7. 測試遠程發送郵件8. 固定連接公網地址9. 測試固定遠程地址發送郵件 hMailServer 是一個郵件服務器,通過它我們可以搭建自己的郵件服務,通過cpolar內網映射工…

計算機競賽 GRU的 電影評論情感分析 - python 深度學習 情感分類

1 前言 🔥學長分享優質競賽項目,今天要分享的是 🚩 GRU的 電影評論情感分析 - python 深度學習 情感分類 🥇學長這里給一個題目綜合評分(每項滿分5分) 難度系數:3分工作量:3分創新點:4分 這…

代碼隨想錄算法訓練營第三十八天 | 理論基礎,509. 斐波那契數,70. 爬樓梯,746. 使用最小花費爬樓梯

代碼隨想錄算法訓練營第三十八天 | 理論基礎,509. 斐波那契數,70. 爬樓梯,746. 使用最小花費爬樓梯 理論基礎什么是動態規劃動態規劃的解題步驟動態規劃應該如何debug 509. 斐波那契數遞歸解法 70. 爬樓梯746. 使用最小花費爬樓梯 理論基礎 視…

計蒜客T1170——人民幣支付

超級水&#xff0c;不解釋&#xff0c;代碼的處理方式減低了繁瑣程度&#xff0c; #include <iostream> using namespace std;int main(int argc, char** argv) {int num0;cin>>num;int money[6]{100,50,20,10,5,1};for(int i0;i<5;i){int count0;countnum/mone…

SkyWalking 部署(包含ES)

SkyWalking安裝 結構 首先SkyWalking主要需要oapService、webApp、Elasticsearch&#xff08;可選存儲&#xff09;三個&#xff0c;接下來講一下這三個的安裝步驟&#xff0c;安裝過程中出現了一些細小的配置錯誤&#xff0c;導致用了快兩天才弄好&#xff0c;麻木了&#x…

C++超基礎語法

&#x1f493;博主個人主頁:不是笨小孩&#x1f440; ?專欄分類:數據結構與算法&#x1f440; C&#x1f440; 刷題專欄&#x1f440; C語言&#x1f440; &#x1f69a;代碼倉庫:笨小孩的代碼庫&#x1f440; ?社區&#xff1a;不是笨小孩&#x1f440; &#x1f339;歡迎大…

IDEA常用工具配置

IDEA常用工具&配置 如果發現插件市場用不了&#xff0c;可以設置Http Proxy&#xff0c;在該界面上點擊”Check connection“并輸入的地址&#xff1a;https://plugins.jetbrains.com/ 。 一、常用插件 1、MybatisX Mybaits Plus插件&#xff0c;支持java與xml互轉 2、F…

Vue-10.集成.env

.env、.env.development 和 .env.preview .env、.env.development 和 .env.preview 文件是用于配置環境變量和應用程序設置的文件&#xff0c;它們在項目開發和部署過程中起到關鍵作用。這些文件用于在不同的環境中設置不同的變量值&#xff0c;以滿足不同環境下的配置需求。 …

日志系統——日志格式化模塊設計

一&#xff0c;模塊主要成員 該模塊的主要作用是對日志消息進行格式化&#xff0c;將日志消息組織成制定格式的字符串。 該模塊主要成員有兩個&#xff1a;1.格式化字符串。 2.格式化子項數組 1.1 格式化字符串 格式化字符串的主要功能是保存日志輸出的格式字符串。其格式化字…

WPF 界面結構化處理

文章目錄 概要一、xaml界面結構化處理二、邏輯樹與視覺樹 概要 WPF 框架是開源的&#xff0c;但是不能跨平臺&#xff0c;可以使用MAUI&#xff0c;這個框架可以跨平臺&#xff0c;WPF源碼可以在github上下載&#xff0c;下載地址&#xff1a;https://gitbub.com/dotnet/wpf。…