实现以最快速度搭建springboot后台web项目并连通数据库实现控制层与服务层与dao层的select查询...
背景
Servlet的出現(xiàn)
上世紀(jì)90年代,隨著Internet和瀏覽器的飛速發(fā)展,基于瀏覽器的B/S模式隨之火爆發(fā)展起來。最初,用戶使用瀏覽器向WEB服務(wù)器發(fā)送的請求都是請求靜態(tài)的資源,比如html、css等。??但是可以想象:根據(jù)用戶請求的不同動態(tài)的處理并返回資源是理所當(dāng)然必須的要求。
servlet的定義
- Servlet is a technology which is used to create a web application. servlet是一項用來創(chuàng)建web application的技術(shù)。
- Servlet is an API that provides many interfaces and classes including documentation. servlet是一個提供很多接口和類api及其相關(guān)文檔。
- Servlet is an interface that must be implemented for creating any Servlet.servlet是一個接口,創(chuàng)建任何servlet都要實現(xiàn)的接口。
- Servlet is a class that extends the capabilities of the servers and responds to the incoming requests. It can respond to any requests. servlet是一個實現(xiàn)了服務(wù)器各種能力的類,對請求做出響應(yīng)。它可以對任何請求做出響應(yīng)。
- Servlet is a web component that is deployed on the server to create a dynamic web page.servlet是一個web組件,部署到一個web server上(如tomcat,jetty),用來產(chǎn)生一個動態(tài)web頁面
servlet的歷史
| 版本 | 日期 | JAVA EE/JDK版本 | 特性 |
| Servlet 4.0 | 2017年10月 | JavaEE 8 | HTTP2?[1]? |
| Servlet 3.1 | 2013年5月 | JavaEE 7 | Non-blocking I/O, HTTP protocol upgrade mechanism |
| Servlet 3.0 | 2009年12月 | JavaEE 6, JavaSE 6 | Pluggability, Ease of development, Async Servlet, Security, File Uploading |
| Servlet 2.5 | 2005年10月 | JavaEE 5, JavaSE 5 | Requires JavaSE 5, supports annotation |
| Servlet 2.4 | 2003年11月 | J2EE 1.4, J2SE 1.3 | web.xml uses XML Schema |
| Servlet 2.3 | 2001年8月 | J2EE 1.3, J2SE 1.2 | Addition of Filter |
| Servlet 2.2 | 1999年8月 | J2EE 1.2, J2SE 1.2 | Becomes part of J2EE, introduced independent web applications in .war files |
| Servlet 2.1 | 1998年11月 | 未指定 | First official specification, added RequestDispatcher, ServletContext |
| Servlet 2.0 | ? | JDK 1.1 | Part of Java Servlet Development Kit 2.0 |
| Servlet 1.0 | 1997年6月 | ? | ? |
普通servlet實現(xiàn)頁面訪問(https://www.cnblogs.com/davidwang456/p/10297476.html)
1.1 實例1:使用web.xml實現(xiàn)一個http服務(wù)
1.2 編程方式實現(xiàn)一個http服務(wù)請求
2.spring mvc實現(xiàn)頁面訪問
? 2.1 web.xml方式
? 2.2 編碼方式
3.spring boot
繼承了spring mvc的框架,實現(xiàn)SpringBootServletInitializer,然后controller
總結(jié):
1.servlet的本質(zhì)沒有變化,從web框架的發(fā)展來看,web框架只是簡化了開發(fā)servlet的工作,但還是遵循servlet規(guī)范的發(fā)展而發(fā)展的。
2.servlet的歷史發(fā)展,從配置方式向編程方式到自動配置方式發(fā)展
3.spring mvc框架的分組:root和child(可以有多個dispatcherservlet),多個child可以共享root,child直接不共享
Java 發(fā)展史
Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計語言和Java平臺的總稱。由James Gosling和同事們共同研發(fā),并在1995年正式推出。
Java分為三個體系:
JavaSE(J2SE)(Java2 Platform Standard Edition,java平臺標(biāo)準(zhǔn)版)
JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平臺企業(yè)版)
JavaME(J2ME)(Java 2 Platform Micro Edition,java平臺微型版)。
2005年6月,JavaOne大會召開,SUN公司公開Java SE 6。此時,Java的各種版本已經(jīng)更名以取消其中的數(shù)字”2”:J2EE更名為Java EE, J2SE更名為Java SE,J2ME更名為Java ME。
JAVA 語言歷史近二十年, 已發(fā)展成為人類計算機(jī)史上影響深遠(yuǎn)的編程語言.
JAVA 語言所崇尚的開源、自由等精神, 吸引了全世界無數(shù)優(yōu)秀的程序員.
事實是, 從人類有史以來, 從來沒有一門編程語言能吸引這么多的程序員, 也沒有一門編程語言能衍生出如此之多的開源框架.
JAVA 語言是一門非常純粹的面向?qū)ο缶幊陶Z言, 它吸收了 C++ 語言的各種優(yōu)點, 又摒棄了 C++ 里難以理解的多繼承、指針等概念, 因此 JAVA 語言具有功能強(qiáng)大和簡單易用兩個特征.
從某種程度上來看, 學(xué)精了 JAVA 語言的相關(guān)方面, 相當(dāng)于系統(tǒng)地學(xué)習(xí)了軟件開發(fā)相關(guān)知識, 而不是僅僅學(xué)完了一門編程語言.
JAVA 三個版本
J2SE: 整個 JAVA 技術(shù)的核心和基礎(chǔ), 它是 J2ME 和 J2EE 編程的基礎(chǔ).
J2ME: 主要用于控制移動設(shè)備和信息家電等有限存儲的設(shè)備.
J2EE: JAVA 技術(shù)中應(yīng)用最廣泛的部分, J2EE 提供了企業(yè)應(yīng)用開發(fā)相關(guān)的完整解決方案.
JAVA 三類API
核心API: 基本API, JAVA核心類庫.
可選API: Sun公司為JDK提供的擴(kuò)充API, 這些API因平臺的不同而不同.
特殊API: 用于滿足特殊要求的API. 如用于JCA和JCE的第三方加密類庫.
Jsp的出現(xiàn)
?servlet誕生后,sun公司很快發(fā)現(xiàn)servlet編程很繁瑣,1)servlet代碼有大量冗余代碼,out輸出就得寫上百遍;2)開發(fā)servlet必須精通網(wǎng)頁前端和美工,你得非常不直觀的在Servlet中寫前端代碼,這使得實現(xiàn)各種頁面效果和風(fēng)格非常困難。
?因此,sun公司借鑒 微軟的asp,正式推出了jsp(servlet1.1)。采用HTML語言直接生成界面,在界面中使用<% %>腳本標(biāo)識嵌入Java代碼
一個簡單的jsp例子
<html><head><title>測試</title></head><body>第一階段<% String str = “test” ; out.println(str); %></body> </html>倡導(dǎo)了MVC思想的servlet版本servlet1.2出現(xiàn)------------jsp+javabean+servlet
?jsp出現(xiàn)后,也存在問題,1)前端開發(fā)人員需要看大量他看不懂的后端代碼;2)同樣,servlet開發(fā)人員也在復(fù)雜的前端代碼中找到其能寫servlet代碼的地方
?所以,MVC思想的JSP+JavaBean+Servlet誕生了
?JSP(V):JSP完成輸入和輸出,主要使用HTML標(biāo)簽和JSP標(biāo)簽
?Servlet(C):主要完成控制,接收請求,調(diào)用業(yè)務(wù)處理(JavaBean),根據(jù)調(diào)用的結(jié)果找到一個JSP頁面對用戶進(jìn)行響應(yīng)
JavaBean(M):完成所有的處理過程
框架階段
?倡導(dǎo)了MVC思想的jsp+javabean+servlet出現(xiàn),也存在問題:1)jsp頁面中嵌入了很多java代碼,使得結(jié)構(gòu)很亂;2)對于大型項目,servlet過多,轉(zhuǎn)向頻繁,流程,配置等不易集中管理,因而出現(xiàn)了struts
Struts的出現(xiàn)
2001年6月,struts1.0出現(xiàn),struts針對jsp推出了一套struts標(biāo)簽,從而使得jsp中沒有了Java代碼,結(jié)構(gòu)清晰,功能強(qiáng)大。針對servlet,它提供了Action類來代替了servlet,這個Action類具有servlet的功能,并且能夠進(jìn)行一些請求過濾和自動轉(zhuǎn)碼的功能。
Spring的出現(xiàn)
原本已經(jīng)開起來很完美了,但是又有一個問題,就是我們在Action調(diào)用DAO、Java bean等對象的時候都需要在自身代碼中構(gòu)建它們的對象來使用,這樣增加了程序的耦合性,這與我們:“高內(nèi)聚、松耦合”的思想不符合,那么怎么解決這個問題呢?因而出現(xiàn)了Spring框架。
Spring框架有兩大功能:IOC(控制反轉(zhuǎn))和AOP(面向切面的編程),其中IOC就是說:當(dāng)一個類中想要調(diào)用另外一個類的對象時,不需要再通過new 關(guān)鍵字來創(chuàng)建,而是由Spring框架來負(fù)責(zé):創(chuàng)建、分配和管理,從而降低了程序中的耦合性。而AOP可以用來做一些日志的打印和輸出,用于提示程序執(zhí)行過程中的一些具體信息等。
注:Spring是一個開源框架,Spring是于2003 年興起的一個輕量級的Java 開發(fā)框架,由Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》。Spring是為了解決企業(yè)級應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的,使用Spring可以讓簡單的JavaBean實現(xiàn)之前只有EJB才能完成的事情。但是Spring不僅僅局限于服務(wù)器端開發(fā),任何Java應(yīng)用都能在簡單性、可測試性和松耦合性等方面從Spring中獲益。Spring是如何簡化Java開發(fā)的:為了降低Java開發(fā)的復(fù)雜性,Spring采用了以下4種關(guān)鍵策略:1、基于POJO的輕量級和最小侵入性編程;2、通過依賴注入(DI)和面向接口實現(xiàn)松耦合;3、基于切面(AOP)和慣例進(jìn)行聲明式編程;4、通過切面和模版減少樣式代碼;
SpringMVC的出現(xiàn)
最后struts和Spring的整合,由于每一個bean都要在Spring中注冊,每一個URL都要在struts配置文件中配置。當(dāng)bean很多和URL對應(yīng)的請求很多的時候,配置文件無疑會是很龐大的,這個就會使得配置起來很麻煩的費力。那么還有沒有更好的辦法使得能夠結(jié)合Spring的功能和struts的功能,但是又可以使配置文件不會批量的增加?因而SpringMVC出現(xiàn)了
SpringMVC通過“基于注解”的方式代替了struts,并且通過Controller類來代替和實現(xiàn)了Action的功能。由于是基于注解的,所以很多的配置信息放在了Controller類中配置,從而降低了.xml文件的配置復(fù)雜度。
java—三大框架
Spring Boot 出現(xiàn)之前,我們常說的三大框架是SpringMVC Spring Hibernate(SSH), SpringMVC Spring Mybatis(SSM)。
java常用的框架介紹
https://www.cnblogs.com/byqh/p/5595384.html
maven
Maven是Java平臺下的一款項目構(gòu)建和依賴管理的自動化管理工具,將我們的源代碼、配置文件變成可執(zhí)行的war包或者jar包。
maven的優(yōu)點
? 1.在平時我們開發(fā)項目時,一般都是一個項目就是一個工程。我們劃分模塊時,都是使用package來進(jìn)行劃分。但是,當(dāng)項目很大時,有很多子模塊時,即使是package來進(jìn)行劃分,也是讓人眼花繚亂,所以項目非常大時,可借助Maven將一個項目拆分成多個工程,最好是一個模塊對應(yīng)一個工程,利于分工協(xié)作。而且模塊之間還是可以發(fā)送消息的。
? 2.同一項目的jar包 復(fù)制和粘貼到WEB/INF/lib下。問題:同樣的jar包重復(fù)出現(xiàn)在不同的工程中,一方面浪費空間,同時也讓工程臃腫。但是借助Maven,可將jar包僅僅保存在“倉庫”中,有需要該文件時,就引用該文件接口,不需要復(fù)制文件過來占用空間。
? 3.如果jar包都到各個官網(wǎng)網(wǎng)站下載,會浪費很多時間,而且可能不全,但是借助Maven可以以規(guī)范的方式下載jar包,因為所有的知名框架或第三方工具的jar包已經(jīng)按照統(tǒng)一的規(guī)范存放到了Maven的中央倉庫中。
? 4.問題:一個jar包依賴的其他jar包可能沒導(dǎo)入到項目而導(dǎo)致項目跑不起來,但是Maven會自動將你要加入到項目中的jar包導(dǎo)入,不僅導(dǎo)入,而且還會將該jar包所依賴的jar包都自動導(dǎo)入進(jìn)來。
SpringBoot
- 簡化Spring應(yīng)用開發(fā)的一個框架
- 整個Spring技術(shù)棧等的一個大整合
- 將J2EE開發(fā)的一站式解決方案
-
特點:
- 創(chuàng)建獨立的Spring應(yīng)用程序
- 內(nèi)嵌Tomcat、Jetty或者Undertow(無需單獨部署war文件)
- 開箱即用,提供各種默認(rèn)配置來簡化項目配置
- 沒有冗余的代碼生成也不需要XML配置
- 盡可能的自動化配置Spring以及第三方庫
- 提供生產(chǎn)監(jiān)控功能,例如metrics(指標(biāo))、health checks(運行狀況檢查)和externalized configuration(外部配置)
什么是SpringBoot?
在使用傳統(tǒng)的Spring去做Java EE(Java Enterprise Edition)開發(fā)中,大量的 XML 文件存在于項目之中,導(dǎo)致JavaEE項目變得慢慢笨重起來,,繁瑣的配置和整合第三方框架的配置,導(dǎo)致了開發(fā)和部署效率的降低。
Spring Boot 并不是用來替代 Spring 的解決方案,而是和 Spring 框架緊密結(jié)合用于提升 Spring 開發(fā)者體驗的工具。同時它集成了大量常用的第三方庫配置,Spring Boot應(yīng)用中這些第三方庫幾乎可以是零配置的開箱即用(out-of-the-box),大部分的 Spring Boot 應(yīng)用都只需要非常少量的配置代碼(基于 Java 的配置),開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。
為什么學(xué)習(xí)SpringBoot
1.從官方來看
2.從Spring的優(yōu)點來看
https://blog.csdn.net/qq_32595453/article/details/81141643
①良好的基因?
因為SpringBoot是伴隨著Spring 4.0而生的,boot是引導(dǎo)的意思,也就是它的作用其實就是在于幫助開發(fā)者快速的搭建Spring框架,因此SpringBoot繼承了Spring優(yōu)秀的基因,在Spring中開發(fā)更為方便快捷。
②簡化編碼
比如我們要創(chuàng)建一個 web 項目,使用 Spring 的朋友都知道,在使用 Spring 的時候,需要在 pom 文件中添加多個依賴,而 Spring Boot 則會幫助開發(fā)著快速啟動一個 web 容器,在 Spring Boot 中,我們只需要在 pom 文件中添加如下一個 starter-web 依賴即可。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>③簡化配置
Spring 雖然使Java EE輕量級框架,但由于其繁瑣的配置,一度被人認(rèn)為是“配置地獄”。各種XML、Annotation配置會讓人眼花繚亂,而且配置多的話,如果出錯了也很難找出原因。Spring Boot更多的是采用 Java Config 的方式,對 Spring 進(jìn)行配置。
④簡化部署
在使用 Spring 時,項目部署時需要我們在服務(wù)器上部署 tomcat,然后把項目打成 war 包扔到 tomcat里,在使用 Spring Boot 后,我們不需要在服務(wù)器上去部署 tomcat,因為 Spring Boot 內(nèi)嵌了 tomcat,我們只需要將項目打成 jar 包,使用?java -jar xxx.jar一鍵式啟動項目。
另外,也降低對運行環(huán)境的基本要求,環(huán)境變量中有JDK即可。
⑤簡化監(jiān)控
我們可以引入 spring-boot-start-actuator 依賴,直接使用 REST 方式來獲取進(jìn)程的運行期性能參數(shù),從而達(dá)到監(jiān)控的目的,比較方便。但是 Spring Boot 只是個微框架,沒有提供相應(yīng)的服務(wù)發(fā)現(xiàn)與注冊的配套功能,沒有外圍監(jiān)控集成方案,沒有外圍安全管理方案,所以在微服務(wù)架構(gòu)中,還需要 Spring Cloud 來配合一起使用。
從未來發(fā)展趨勢看
微服務(wù)是未來發(fā)展的趨勢,項目會從傳統(tǒng)架構(gòu)慢慢轉(zhuǎn)向微服務(wù)架構(gòu),因為微服務(wù)可以使不同的團(tuán)隊專注于更小范圍的工作職責(zé)、使用獨立的技術(shù)、更安全更頻繁地部署。而 繼承了 Spring 的優(yōu)良特性,與 Spring 一脈相承,而且 支持各種REST API 的實現(xiàn)方式。Spring Boot 也是官方大力推薦的技術(shù),可以看出,Spring Boot 是未來發(fā)展的一個大趨勢。
?
JavaWeb
在Sun的Java Servlet規(guī)范中,對Java Web應(yīng)用作了這樣定義:“Java Web應(yīng)用由一組Servlet、HTML頁、類、以及其它可以被綁定的資源構(gòu)成。它可以在各種供應(yīng)商提供的實現(xiàn)Servlet規(guī)范的 Servlet容器 中運行。”
Java Web應(yīng)用中可以包含Servlet、JSP、實用類、靜態(tài)文檔如HTML、圖片等描述Web應(yīng)用的信息(web.xml)?https://www.cnblogs.com/albertrui/p/8427661.html
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?JavaWeb前景
Java開發(fā)的市場現(xiàn)狀
今天的“Java”作為所有編程語言中最熱門技術(shù),可以說它無處不在,目前全球有著數(shù)十億的設(shè)備正在運行著java,很多服務(wù)器程序都是用java編寫,用以處理每天超過數(shù)以千萬的數(shù)據(jù)。
無論是手機(jī)軟件、手機(jī)Java游戲還是電腦軟件,你的每一次購物到每一筆支付成功,都離不開Java,越來越多的企業(yè)也正采用Java語言開發(fā)網(wǎng)站,而在所有程序員中,Java開發(fā)工程師就占據(jù)20%的比例。
從國內(nèi)排名靠前網(wǎng)站的主要開發(fā)語言,也可以看出Java在各大開發(fā)語言中的地位。
從圖表中不難看出,大部分企業(yè)都用Java作為語言架構(gòu)
這也不難理解,為什么Java現(xiàn)在這么火爆,吸引越來越多的人學(xué)習(xí),根本原因,還是因為企業(yè)對Java的認(rèn)可和應(yīng)用。
Java應(yīng)用領(lǐng)域
網(wǎng)站:主要適用Java EE開發(fā)(java的企業(yè)級開發(fā)),阿里巴巴、淘寶、支付寶、一號店、網(wǎng)易、搜狐、大眾點評網(wǎng)、驢媽媽、人人網(wǎng)、去哪兒、網(wǎng)銀、電商、YY PC端、等等、、、
大型企業(yè)級應(yīng)用;主要食用JAVAEE,比如企業(yè)管理系統(tǒng)
移動互聯(lián)網(wǎng):AndroidAPP 開發(fā)應(yīng)用
最典型應(yīng)用: (1)有關(guān)通信及網(wǎng)絡(luò)的企業(yè):移動、聯(lián)通、電信、網(wǎng)通主要的信息化都是JAVA (2)有關(guān)金融行業(yè)的大型企業(yè),所有的銀行、證券公司,比如工商銀行、建設(shè)銀行(3)大型管理系統(tǒng),如:供應(yīng)鏈、客戶管理系統(tǒng)、、、 (4)電子政務(wù),主要使用JAVA EE,相關(guān)的政府部門絕大多數(shù)的信息化系統(tǒng)JAVA開發(fā)的 (5)游戲,很多手機(jī)游戲都是用java開發(fā)的 (6)嵌入式設(shè)備消費類電子產(chǎn)品,主要用JAVA ME,無線手持設(shè)備、通信終端、醫(yī)療設(shè)備、信息家電(如數(shù)字電視、機(jī)頂盒、電冰箱)、汽車電子設(shè)備等是比較熱門的java應(yīng)用領(lǐng)域,這方面的應(yīng)用例子有中國聯(lián)通CDMA 1X網(wǎng)絡(luò)中基于java技術(shù)的無線
人才需求量對比
Java市場人才需求量:
......
https://blog.csdn.net/weixin_38465623/article/details/80775799
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SpringBoot的web項目搭建
回到題目,如何以最快速度搭建springboot后臺項目并連通數(shù)據(jù)庫實現(xiàn)控制層與服務(wù)層與dao層的select查詢呢?
接下來會以圖文操作流程來一步步演示:
使用IntelliJ IDEA軟件工具(付費版Ultimate),如下圖所示
打開軟件,如下圖所示
創(chuàng)建新項目后,如下圖所示,于左側(cè)欄選擇Spring Initializr,再選擇jdk15,沒有先Download JDK,提前配好java環(huán)境變量哦
選擇下一步,如下圖所示輸入好maven的GroupID和ArtifactID,選擇Maven Project,language選擇java,packaging打包方式選擇jar,java版本選擇15,package寫com.project就好,desciption描述一下項目用途等等做下備注
輸入完之后,點擊下一步,下圖所示,于左側(cè)欄選擇web,然后我們將spring web勾上
下圖所示,于左側(cè)欄選擇Template Engines,然后我們將Thymeleaf勾上,然后點擊下一步
接著完成項目創(chuàng)建,下圖所示
下圖所示,進(jìn)入到了IntelliJ IDEA里,左側(cè)是剛剛我們創(chuàng)建的名稱為web的javaweb項目,右側(cè)是maven,中間是代碼區(qū)域,記得進(jìn)去時允許maven自動下載包
接著我展開web項目文件夾看到如下文件列表
此時我們展開src文件夾,雙擊test文件夾
直到打開到類,我們雙擊WebApplicationTests類,打開了類后我們看到測試的程序入口代碼,我們想要試試可不可以運行可以這樣做
鼠標(biāo)懸停在下圖所示這里,出現(xiàn)run test提示,然后我們單擊鼠標(biāo)左鍵,便可運行程序測試,可是contextLoads方法里面沒有代碼,我們總要寫些什么,一般就寫System.out.println("hello world"),然后我們跑起來
我們看到控制臺輸出了"hello world",說明測試程序跑了起來
同樣的,我們的預(yù)期目標(biāo)是運行javaweb項目,然后在瀏覽器端我們輸入一個地址訪問到一個網(wǎng)站,當(dāng)然這個網(wǎng)站是任意內(nèi)容,是由后臺傳來html,css,js,圖片等資源,我們可以在這個網(wǎng)頁中上傳數(shù)據(jù)到后臺服務(wù)器還可以獲取后臺的數(shù)據(jù),比如如果要獲取后臺服務(wù)器的數(shù)據(jù),那么服務(wù)器的數(shù)據(jù)其實來自于數(shù)據(jù)庫,也就是說服務(wù)器先從數(shù)據(jù)庫取出數(shù)據(jù)再將數(shù)據(jù)轉(zhuǎn)回來到前端,我們的網(wǎng)頁接收到之后便可以呈現(xiàn)出來。
這個網(wǎng)頁可以是任意網(wǎng)站,里面包含任意的內(nèi)容,這個服務(wù)器可以是我們的個人PC也可以是租的服務(wù)器,我們可以定義任何的數(shù)據(jù)(比如表單、圖片)上傳到服務(wù)器,也可以用向服務(wù)器發(fā)起任意允許的請求,甚至我們還可以實現(xiàn)內(nèi)網(wǎng)穿透,即不只限于局域網(wǎng),讓在互聯(lián)網(wǎng)上沖浪的任何人都可以輸入地址查找并進(jìn)入到我們的網(wǎng)站,是的,任何一個人只要連上了互聯(lián)網(wǎng)都可以訪問得到這個網(wǎng)站,也就是說到山區(qū)手機(jī)連個信號打開瀏覽器輸入個url地址便可以訪問得到我們的網(wǎng)站。
那我們要怎么實現(xiàn)呢,我說過了,這個是以最快的速度搭建的javaweb項目,非常的精簡有效率...
第一步,我們先找到web項目的主程序入口main函數(shù)
第二步,實現(xiàn)網(wǎng)頁訪問
提問我們?nèi)绾卧陔娔X瀏覽器上輸入一段url地址便可訪問到一個網(wǎng)站呢?這個網(wǎng)站是放到web項目之中的,那放到哪里呢?如何服務(wù)器跑起來的后臺程序接收到瀏覽器的請求之后,將這個網(wǎng)站首頁資源返回去到游客的瀏覽器端再由瀏覽器處理呈現(xiàn)出來,便可看到網(wǎng)站,具體網(wǎng)站寫了什么,自己可以隨意寫,首頁要掌握html的知識和語言編寫,css樣式和java腳本語言,當(dāng)然這里指的就是靜態(tài)頁面html5的。
文章一開始就提到了Servlet,為什么側(cè)重這個呢,因為瀏覽器發(fā)起的后臺請求,程序要接收到,首先交由Servlet處理,就類似個訪問入口的關(guān)卡一樣,并且是基于這個技術(shù)實現(xiàn)的,記得這篇文章之中有這句話:"servlet的本質(zhì)沒有變化,從web框架的發(fā)展來看,web框架只是簡化了開發(fā)servlet的工作,但還是遵循servlet規(guī)范的發(fā)展而發(fā)展的"。
那么在這個項目里面怎么實現(xiàn)Servlet呢,有javaweb編程技術(shù)和經(jīng)驗的會想到SpringMVC的@controller注解來快速實現(xiàn)(相關(guān)知識:https://www.iteye.com/blog/elim-1753271)
也就是瀏覽器的訪問會進(jìn)入到@controller所注解的類,再有相應(yīng)的方法來執(zhí)行返回網(wǎng)頁資源,然后我們就可以看到頁面了。
那么要怎么寫代碼呢?跟著
上圖所示,我們新建個java類,然后我們可以給class這樣起名,叫做controller.ComController,然后回車鍵enter確定
我們看到了ComController類,這個類屬于在javaweb中被稱為的控制層,接下來我們?yōu)g覽器的請求先進(jìn)過這個控制層,我們在ComController類上面加一個注解@Controller
如下圖,在輸入@Controller的一部分@Contro之后我們看到工具給的提示,默認(rèn)導(dǎo)入第一行的包我們按回車鍵
下圖,我們看到注解導(dǎo)入了進(jìn)來,ComController類上有了@Controller注解,接下來我們?yōu)榭刂破髦付ㄌ幚淼腢RL請求,我們先定義一個方法visitTheWebsite,再于visitTheWebsite方法上加一個注解@RequestMapping
之后我們看到下圖所示,這時我們需要定義一個瀏覽器請求的地址,這里我們寫個根路徑“/”就行
下圖,寫好之后我們就可以通過url請求進(jìn)入到方法體之中了,我們可以嘗試一下可不可以進(jìn)去,所以我們在方法里面寫個System.out.println("歡迎訪問網(wǎng)站")
下圖,寫好之后我們就來嘗試一下瀏覽器請求,看看控制臺有沒有輸出"歡迎訪問網(wǎng)站"
然后要怎么嘗試呢,首先我們先將java程序跑起來才行,怎么跑起來呢,找到入口函數(shù),即main函數(shù),如下圖我們在左側(cè)欄找到WebApplication類雙擊進(jìn)入代碼區(qū),點擊綠色按鈕運行
然后控制臺滑下去我們看到Tomcat started on port(s): 8080 (http) with context path ''的提示(下圖),表明Tomcat啟動部署并運行了javaweb項目程序,并且我們還知道port訪問端口為8080 ,然后我們可以打開瀏覽器嘗試可不可以訪問進(jìn)入到visitTheWebsite方法里面
打開瀏覽器(下圖),在瀏覽器地址欄我們輸入localhost:8080,按回車鍵,我們會看到Whitelabel Error Page的提示,回頭看看,我們是不是要訪問一個網(wǎng)站,但是我們只是指定了請求地址和執(zhí)行的方法,我們并沒有指定任何一個網(wǎng)站頁面資源。可是回到剛才的,這個瀏覽器的請求有沒有進(jìn)入到控制層ComController類下面的visitTheWebsite并執(zhí)行相應(yīng)的代碼呢,如果有說明請求進(jìn)入到了后臺程序,我們便可以自己寫相關(guān)的代碼功能去做事情啦!
所以我們驗證一下,看看IntelliJ IDEA的控制臺(下圖),我們會看到報錯信息,沒事,我們在控制臺用鼠標(biāo)滾輪滑上去
直到劃到這里,“歡迎訪問網(wǎng)站",所以說瀏覽器的請求已經(jīng)到了后臺程序的方法體里面了,因為程序是接著執(zhí)行的,想必就是因為return "";這里報的錯了
接下來大家可以猜到這里的return "",其實雙引號里面寫的是返回的網(wǎng)頁頁面的路徑,路徑有默認(rèn)起始的文件夾,也就是網(wǎng)頁資源存放的文件夾的路徑地址,那么能不能猜到網(wǎng)頁資源應(yīng)當(dāng)放在哪里呢,默認(rèn)文件夾是哪個?是的,沒錯我們看到下方有個resources的文件夾,resources顧名思義就是資源的意思,我們在templates文件夾下創(chuàng)建一個html文件,即我們的網(wǎng)頁資源。
起個名字叫”home“(下圖),按回車鍵
接下來我們進(jìn)入到html頁面代碼區(qū)了,熟悉前端的小伙伴可以任意寫自己的網(wǎng)站內(nèi)容,比如我們可以在body標(biāo)簽下寫上<h1>歡迎來到網(wǎng)站首頁</h1>,我們還可以在head標(biāo)簽里面引入我們常用的jquery資源
下圖這是我們寫好的網(wǎng)站,感興趣的小伙伴可以自由嘗試往里面寫自己想寫的代碼
接下來我們回到控制層的ComController類,我們將return "";改為return "home";(下圖)
然后我們停止并重新運行主程序
下圖我們看到程序已經(jīng)程序跑起來了,然后我在瀏覽器端嘗試請求一下,同樣輸入localhost:8080
猜猜這次我們看到什么了,是的,恭喜網(wǎng)站成功訪問了,如果是第一次玩應(yīng)該很欣喜啦!
我們打開瀏覽器的控制臺(F12),來到Console這里(下圖)
我們可以在控制臺輸入一個命令檢查一下剛才的jquery有沒有導(dǎo)入進(jìn)去,我們寫console.log($),然后回車,會看到(下圖)
沒錯,輸出的function函數(shù)就是jquery的$函數(shù),我們可以點擊這個函數(shù)瞧瞧,進(jìn)入到Sources欄,我們可以看到j(luò)query的源碼,其實這里面是存放前臺的文件資源目錄的地方(就是后臺傳給前臺的資源存放處),可以查看網(wǎng)站的資源,比如我們可以尋找一下該網(wǎng)站的html文件在哪里
我們找到了網(wǎng)頁的html文件,當(dāng)然如果網(wǎng)站有眾多資源比如圖片音樂字體html文件css文件js文件等等都可以在這里找(下圖)
這樣我就以簡潔明了和簡短的代碼帶大家以最快的速度構(gòu)建了一個javaweb的項目,實現(xiàn)了后臺網(wǎng)站資源傳輸?shù)角岸藶g覽器并被解析給游客瀏覽到網(wǎng)頁內(nèi)容的功能,至此我們成功搭建了一個web服務(wù)器,用的是個人PC。
但這個是只有局域網(wǎng)才可以看到。
好了,接下來大家還想聽什么呢,是的,我們還沒有操作到數(shù)據(jù)庫呢。其實剛才這個相當(dāng)于是個靜態(tài)網(wǎng)站,里面的內(nèi)容都是事先預(yù)定的,比如我已經(jīng)往里面寫了我想要的文章或者展示圖片等。
然后講講數(shù)據(jù)庫的操作吧,當(dāng)然這個也是最最快速的啦
我們?nèi)サ揭粋€網(wǎng)站
https://hutool.cn/docs/#/
百度會查到hutool的介紹(
Hutool是一個小而全的Java工具類庫,通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,使Java擁有函數(shù)式語言般的優(yōu)雅,讓Java語言也可以“甜甜的”。
Hutool中的工具方法來自每個用戶的精雕細(xì)琢,它涵蓋了Java開發(fā)底層代碼中的方方面面,它既是大型項目開發(fā)中解決小問題的利器,也是小型項目中的效率擔(dān)當(dāng);
Hutool是項目中“util”包友好的替代,它節(jié)省了開發(fā)人員對項目中公用類和公用工具方法的封裝時間,使開發(fā)專注于業(yè)務(wù),同時可以最大限度的避免封裝不完善帶來的bug。
)
在hutool的文檔里面我們找到入門和安裝下面的文檔并選中它(下圖),提示我們應(yīng)該粘貼一段配置到pom.xml文件里面,我們復(fù)制這一段配置
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.9</version> </dependency>回到IntelliJ IDEA工具,找到pom.xml文件,在某處插入剛才的一段配置信息(下圖)
插入好配置之后如下圖所示,但記得點擊第二步驟的maven更新導(dǎo)入Hutool包,導(dǎo)入好后我們就可以使用Hutool給我的許許多多的功能了,比如可以嘗試一下控制臺打印封裝-Console
hutool的使用嘗試,我們可以看到文檔的說明,然后在test程序里面測試看看
test測試環(huán)境下,我們在contextLoads方法里面寫Conso之后出現(xiàn)提示選擇第二個,導(dǎo)入hutool的cn.hutool.core.lang.Console包
然后我們可以嘗試輸出看看(下圖),一樣的,運行之后看控制臺
測試之后我們發(fā)現(xiàn)可以使用,如下圖所示
然后演示怎么操作數(shù)據(jù)庫
在hutool的文檔里面我們找到數(shù)據(jù)庫簡單操作-Db(下圖)
先在resources目錄下添加db.setting文件(下圖)
點擊確定后,會看到創(chuàng)建了該文件,然后我們粘貼這段配置進(jìn)去
## db.setting文件url = jdbc:mysql://localhost:3306/test user = root pass = 123456## 可選配置 # 是否在日志中顯示執(zhí)行的SQL showSql = true # 是否格式化顯示的SQL formatSql = false # 是否顯示SQL參數(shù) showParams = true # 打印SQL的日志等級,默認(rèn)debug,可以是info、warn、error sqlLevel = debug配置的信息寫對上,比如url = jdbc:mysql://localhost:3306/數(shù)據(jù)庫的名稱,user = 用戶名,pass = 密碼(下圖)
打開測試下數(shù)據(jù)庫連接
由上兩圖可知,正確的數(shù)據(jù)庫配置是
## db.setting文件url = jdbc:mysql://localhost:3306/all_user user = root pass = 123456## 可選配置 # 是否在日志中顯示執(zhí)行的SQL showSql = true # 是否格式化顯示的SQL formatSql = false # 是否顯示SQL參數(shù) showParams = true # 打印SQL的日志等級,默認(rèn)debug,可以是info、warn、error sqlLevel = debug再嘗試操作數(shù)據(jù)庫之前我們還要引入MySQL JDBC驅(qū)動jar(下圖)
如下圖所示,配置好mysql jdbc驅(qū)動,并且maven成功更新該驅(qū)動之后,我們就可以嘗試對數(shù)據(jù)庫進(jìn)行操作了
那么操作數(shù)據(jù)庫得代碼怎么寫呢,文檔滾輪往下滑動,找到查詢?nèi)孔侄?#xff08;下圖)
//user為表名 Db.use().findAll("user");那么這句代碼寫在哪里呢?在這之前我先新建service層和dao層(下圖)
建好之后,我們在服務(wù)層加上@Service注解,在dao層加上@Repository注解,如下兩圖所示
然后我先把dao層操作數(shù)據(jù)庫的代碼寫了,代碼是
package com.project.dao;import cn.hutool.db.Db; import cn.hutool.db.Entity; import org.springframework.stereotype.Repository;import java.sql.SQLException; import java.util.List;@Repository public class UserDao {public List<Entity> getUser() throws SQLException {//user為表名List<Entity> list = Db.use().findAll("user");return list;} }然后我再把服務(wù)層的代碼寫了,代碼是
package com.project.service;import com.project.dao.UserDao; import org.springframework.stereotype.Service;import javax.annotation.Resource; import java.sql.SQLException; import java.util.HashMap; import java.util.Map;@Service public class UserService {@Resourceprivate UserDao userDao;public Map getUserService() throws SQLException {Map<String, Object> map = new HashMap<>();map.put("data",userDao.getUser());map.put("state","請求成功");return map;} }最后我們再寫控制層,代碼是
package com.project.controller;import com.project.service.UserService; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource; import java.sql.SQLException; import java.util.Map;@Controller public class ComController {@Resourceprivate UserService userService;@RequestMapping("/")String visitTheWebsite(){System.out.println("歡迎訪問網(wǎng)站");return "home";}@RequestMapping("/getUser")@ResponseBodyMap getUser() throws SQLException {return userService.getUserService();} }?
寫好之后,我們現(xiàn)在可以用瀏覽器請求了,我們重新啟動程序。啟動成功(下圖)
然后我打開瀏覽器請求localhost:8080,會進(jìn)到剛才的網(wǎng)站(下圖)
這時如果我們要操作數(shù)據(jù)庫就要訪問控制層的另一個接口(下圖)
@RequestMapping("/getUser")@ResponseBodyMap getUser() throws SQLException {return userService.getUserService();}代碼中"/getUser"代表訪問的路徑后綴,所以我們在localhost:8080后面加上"/getUser"變?yōu)閘ocalhost:8080/getUser,注意這里要加上@ResponseBody表明是返回數(shù)據(jù)而不是返回網(wǎng)頁,不然指定的是網(wǎng)站地址。服務(wù)層的UserService類已經(jīng)注入進(jìn)來了,使用userService對象的getUserService方法調(diào)用服務(wù)層的這段代碼,我們可以看到UserDao也注入進(jìn)來了,userDao.getUser()調(diào)用dao層操作數(shù)據(jù)庫的代碼(下圖)
@Service public class UserService {@Resourceprivate UserDao userDao;public Map getUserService() throws SQLException {Map<String, Object> map = new HashMap<>();map.put("data",userDao.getUser());map.put("state","請求成功");return map;} }調(diào)用dao層操作數(shù)據(jù)庫的代碼,返回user表的List<Entity>集合,Entity已經(jīng)封裝好,是個對象,可以直接返回前端網(wǎng)頁(下圖)
public List<Entity> getUser() throws SQLException {//user為表名List<Entity> list = Db.use().findAll("user");return list;}所最后控制層的getUser方法返回的是服務(wù)層的map對象userService.getUserService()(下圖)
@RequestMapping("/getUser")@ResponseBodyMap getUser() throws SQLException {return userService.getUserService();}分析完控制層、服務(wù)層、dao層這些代碼后,我們可以嘗試看看有沒有請求到數(shù)據(jù)并傳回json格式的數(shù)據(jù)到前端網(wǎng)頁
在瀏覽器輸入http://localhost:8080/getUser(下圖),看到數(shù)據(jù)庫的user表數(shù)據(jù)已經(jīng)查出來了
對照下數(shù)據(jù)庫(下圖)
如果用ajax請求返回的數(shù)據(jù)進(jìn)到回調(diào)函數(shù)即可正常處理。
至此,我講了如果極快速的搭建一個javaweb后臺項目,使用個人PC作為服務(wù)器,成功訪問網(wǎng)站資源、連通并操作數(shù)據(jù)庫還有前面的Servlet、java、springboot等等的介紹
PS:從早上寫到晚上10點了,終于完成了,如果大家有什么寶貴的建議請留言!謝謝!
再說一下,文章中提到的不只限于局域網(wǎng),讓在互聯(lián)網(wǎng)上沖浪的任何人都可以輸入地址查找并進(jìn)入到我們的網(wǎng)站,是的,任何一個人只要連上了互聯(lián)網(wǎng)都可以訪問得到這個網(wǎng)站,也就是說到山區(qū)手機(jī)連個信號打開瀏覽器輸入個url地址便可以訪問得到我們的網(wǎng)站。這個確實可以做到,不過這里不寫,這里已經(jīng)完成了如何搭建一個java服務(wù)器后臺程序和網(wǎng)站的教程還有操作數(shù)據(jù)庫,估計可以算是比較有價值的了,這些是工作之余抽空摸索的,平時不做java開發(fā),好像也難有機(jī)會,先到這里了,希望能夠幫助到大家,互相學(xué)習(xí),祝各位工作順利,心想事成!!
項目源碼下載,云盤提取碼0sqw
總結(jié)
以上是生活随笔為你收集整理的实现以最快速度搭建springboot后台web项目并连通数据库实现控制层与服务层与dao层的select查询...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 次世代角色模型完整建模流程解析,这6款软
- 下一篇: mysql checksum用法_MyS