第一章 JavaEE應用和開發環境
1.1 java EE應用概述
1、java EE的分層模型
數據庫--【提供持久化服務】--》Domain Object層 --【封裝】--〉DAO層--【提供數據訪問服務】--》業務邏輯層--【提供業務邏輯實現】--〉MVC的控制器層--【顯示】--》前端
優點:松耦合
2、Java EE應用的組件
- 1)前端組件:主要負責收集用戶輸入數據,或者向客戶顯示系統狀態。JSP、FreeMarker、JQuery、Angular、JSON、HTML5+CSS
- 2)控制器組件:對于java EE 的MVC框架而言,框架負責提供一個核心控制器,而核心控制器負責攔截用戶請求,并將請求轉發給用戶實現的控制器組件。而這些用戶實現的控制器則負責處理調用業務邏輯方法,處理用戶請求。
- 3)業務邏輯組件:核心組件,實現系統的業務邏輯。通常,一個業務邏輯方法對應一次用戶操作。一個業務邏輯方法應該是一個整體。因此要求對業務邏輯方法增加事務性。業務邏輯方法僅僅負責實現業務邏輯,不應該進行數據庫訪問。因此業務邏輯組件中不應該出現原始的MyBatis、JDBC等API。
- 4)DAO組件:Data Access Object,也被稱為數據訪問對象,這種類型的對象比較缺乏變化,每個DAO組件都提供Domain Object基本的創建、查詢、更新、刪除等操作,這些操作對應于數據表的CRUD等原子操作。當然,如果采用不同的持久層訪問技術,DAO組件的實現會完全不同,為了分離業務邏輯組件的實現與DAO組件的實現,程序應該為每個DAO組件都提供接口,業務邏輯層組件面向DAO接口編程,這樣才能提供更好的解耦。
- 5)領域對象組件:Domain Object 抽象了系統的對象模型,通常而言,這些領域對象的狀態都必須保存在數據庫里,因此,每個領域對象通常對應一個或多個數據表,領域對象需要提供對數據記錄訪問的方式。
3、Java EE 應用的結構和優勢
系統后期維護、擴展需要成本,軟件系統需要很好的伸縮性。
優勢:松耦合,讓應用之間的耦合停留在接口層次,而不是代碼層次。
4、常用的Java EE 服務器
輕量級java EE 架構:Spring MVC+Spring+MyBatis,只需要簡單的web服務器就可以運行,不需要專業的java EE服務器支持
常見的Web服務器:
1)Tomcat
2)Jetty:可做嵌入式服務器
3)Resin
常見的Java EE服務器:
1)JBoss
2)GlassFish
3)WebLogic和WebSphere
1.2 輕量級Java EE應用相關技術
1、JSP、Servlet 4.x、Java Bean及替代技術
JSP:最早的Java EE規范之一,充當Java EE的表現層,簡單易用,只負責簡單的顯示邏輯,無法直接訪問數據的底層狀態。
Servlet:和JSP完全統一,JSP必須被Web服務器編譯為Servlet,真正在Web服務器內運行的是Servlet。JSP相當于草稿,真正提供HTTP服務的是Servlet。Servlet包含JSP。
Java Bean:傳輸數據,中間層的組件會將應用底層的狀態信息封裝成JavaBean集,這些JavaBean也被稱為DTO(Data Transfer Object,數據傳輸對象),并將DTO集傳到JSP頁面,從而讓JSP可以顯示應用的底層狀態。
替代:FreeMarker、Velocity充當表現層技術,可以替代JSP
2、Spring MVC及替代技術
Spring 3以前:簡單的對傳統MVC框架進行模仿。
Spring3之后:Spring MVC 一個脫胎換骨重生的MVC框架:
功能豐富而強大的注解;簡單而強大的請求映射和參數綁定;基于AOP的異常處理機制;以ConversionService為中心的類型轉換;基于JSR 303的聲明式數據校驗。
替代:目前Spring MVC是最優秀的Java Web MVC框架。
3、MyBatis及替代技術
傳統的java應用訪問數據庫:JDBC,JDBC采用的是一種基于SQL的操作方式,這種操作方式和java語言的面向對象特征不太一致,所以java EE需要一種技術(ORM,Object Relation Mapping,對象關系映射)讓java以面向對象的方式操作關系數據庫。
兩種開源、輕量級的ORM框架:MyBatis、Hibernate。
MyBatis:半自動框架,將SQL語言映射為對象集,也被稱為SQL Mapping工具,SQL需要手動編寫。出于性能考慮選擇。
Hibernate:全自動框架,將普通的java對象(POJO)映射成持久化類,允許應用程序以面向對象的方式操作POJO,該框架負責將這種操作轉換成底層的SQL操作。不需要手動編寫SQL。
替代:TopLink、OJB替代Hibernate,資料少文檔少,需要勇氣。
4、Spring及替代技術
Spring沒有太多新東西
1)抽象大量的java EE常用代碼,將它們抽象成一個框架,通過使用Spring可以大幅度提高開發效率。
2)充滿了各種設計模式的應用,如單例模式、工廠模式、抽象工廠模式、命令模式、職責鏈模式、代理模式等。
3)提供了一個設計優良的MVC框架:Spring MVC,使用Spring 可以直接使用Spring MVC框架;但是沒有持久層框架,所以可以和各種持久層框架無縫貼合。
目前無較好的替代解決方案。
5、使用框架的好處
1)可維護性、復用
1.3 Tomcat的下載和安裝
1、下載安裝Tomcat
參考博客:
https://blog.csdn.net/weixin_39149333/article/details/124623579
tomcat 9
tar.gz
安裝目錄:/Users/huqiqi/Library/tomcat/bin
2、配置Tomcat環境變量:
修改文件:
huqiqi@hqqMAC ~ % vim ~/.bash_profile
在文件中增加一行
PATH=$PATH:/Users/huqiqi/Library/tomcat/bin
生效環境變量:
huqiqi@hqqMAC ~ % source ~/.bash_profile
3、啟動Tomcat:
cd /Users/huqiqi/Library/tomcat/bin
huqiqi@hqqMAC bin % startup.sh
Using CATALINA_BASE: /Users/huqiqi/Library/tomcat
Using CATALINA_HOME: /Users/huqiqi/Library/tomcat
Using CATALINA_TMPDIR: /Users/huqiqi/Library/tomcat/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
Using CLASSPATH: /Users/huqiqi/Library/tomcat/bin/bootstrap.jar:/Users/huqiqi/Library/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
huqiqi@hqqMAC bin %
啟動成功會提示如上圖:Tomcat started。
打開網頁輸入:http://localhost:8080/

出現上圖說明啟動成功。
4、停止tomcat
shutdown.sh
5、Tomcat配置服務端口
/Users/huqiqi/Library/tomcat/conf/server.xml
修改端口為:8888
<!--Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
-->
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
再次啟動:
報錯:zsh:command not found
解決:
最新系統的macbook把zsh作為默認shell,而環境變量添加到了bash中,把 bash shell 中.bash_profile 全部環境變量加入zsh shell里就可以了。
1)復制
cat ~/.bash_profile
2)放到.zshrc
vim ~/.zshrc
:wq // 保存
source ~/.zshrc // 使生效
關閉terminal后,重啟tomcat

再次訪問:
http://localhost:8888/
6、列出web應用根目錄下的所有頁面
/Users/huqiqi/Library/tomcat/conf/web.xml
修改:listings參數的值為true
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
7、進入控制臺
Manager App:點擊后需要輸入密碼
配置文件增加角色、用戶名和密碼:
/Users/huqiqi/Library/tomcat/conf/tomcat-users.xml
<tomcat-users>
<!-- 增加一個角色,指定角色名-->
<role rolename="manager-gui"/>
<!-- 增加一個用戶,指定用戶名、密碼、角色-->
<user username="manager" password="manager" roles="manager-gui"/>
</tomcat-users>
Manager App按照新增的用戶名和密碼登錄后:

說明:
webapps路徑是Web應用的存放位置,而Manager App控制臺對應的web應用也放在該位置。
/Users/huqiqi/Library/tomcat/webapps/manager/WEB-INF/web.xml 放的是Manager應用的配置文件
普通開發者需要訪問匹配:/html/、/status/的資源,所以為該用戶分配一個manager-gui角色即可。
8、部署web應用
四種方式:
-
方式1:利用Tomcat的自動部署
將web應用復制到Tomcat的webapps目錄下,系統會把該應用部署到Tomcat中。 -
方式2:利用控制臺部署
輸入后點擊部署,Tomcat的webapps目錄下會多一個【Context路徑】中寫的文件夾,和【WAR文件或文件夾路徑】中寫的文件夾完全相同。本質還是方式1,利用tomcat的自動部署。
- 方式3:增加自定義的web部署文件
1)在conf下新建 Catalina/localhost 目錄
2)該目錄下新建一個名字任意的XML文件(該文件就是部署web應用的配置文件,作為web應用的虛擬路徑)
舉例:conf/Catalina/localhost/dd.xml,文件內容如下:
啟動Tomcat,tomcat將會把 G:/publish/codes/01/aa 路徑下的WebDome文件夾部署成Web應用。http://<server_address>:
- 方式4:修改server.xml 文件部署web應用
修改conf下的server.xml 文件,會破壞tomcat的系統文件,不建議采用。
9、配置tomcat數據源
兩種:
1)全局數據源:所有web應用都能訪問,需要修改server.xml 文件,會破壞tomcat的系統文件,不建議采用。
2)局部數據源:只能在單個的web應用中訪問
兩種方式都需要提供特定數據庫的JDBC驅動,需要將MySql的JDBC驅動程序復制到Tomcat的lib路徑下。
操作:
i:查看mysql的版本:
huqiqi@hqqMAC ~ % mysqladmin -V
mysqladmin Ver 8.0.23 for macos10.15 on x86_64 (MySQL Community Server - GPL)
huqiqi@hqqMAC ~ %
版本為:8.0.23
ii:下載相同版本的mysql數據庫的jdbc驅動jar包
iii:解壓后將jar包復制到tomcat的lib路徑下
/Users/huqiqi/Library/tomcat/lib/mysql-connector-java-8.0.23.jar
iv:給web應用增加局部數據源
修改 conf/Catalina/localhost/dd.xml文件:
以上就是數據源的各種信息。
1.6 Maven的安裝與使用
Maven 是 Apache 軟件基金會的一個開源項目,是一個優秀的項目構建工具,它用來幫助開發者管理項目中的 jar,以及 jar 之間的依賴關系、完成項目的編譯、測試、打包和發布等工作。
1、maven的settings.xml文件
mac 電腦settings文件的位置并不在顯示的地方:
/Users/huqiqi/.m2/settings.xml
打開.m2/對應的文件夾是沒有settings.xml文件的
正確的路徑
/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf/settings.xml
2、settings.xml文件配置
1)mirror -- 阿里云鏡像,解決優化鏡像下載地址問題
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
2)jdk 版本及工程編碼,解決默認用jdk1.5 亂碼問題
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</profile>
3)localRepository -- 本地倉庫地址,maven包管理地址
<localRepository>/Users/huqiqi/.m2/repository</localRepository>
3、maven的優點
1)原來的項目中需要的jar包必須手動“復制”、”粘貼” 到WEB-INF/lib 項目下,而借Maven,可以將jar包僅僅保存在“倉庫”中,有需要使用的工程只需要“引用”這個文件,并不需要重復復制到工程中。
2)原來的項目中所需要的jar包都是提前下載好的,而Maven在聯網狀態下會自動下載所需要的jar包。首先在本地倉庫中找,找不到就在網上進行下載。
3)原來的項目中一個jar包所依賴的其他jar包必須手動導進來,而Maven會自動將被依賴的jar包導進來。
4)原來的項目一個項目就是一個工程,而借助Maven可以將一個項目拆分成多個工程。
4、maven工程倉庫官網
http://mvnrepository.com/
可以下載自己所需開發jar包
5、maven pom
POM(Project Object Model,項目對象模型)是 Maven 的基本組件,它是以 xml 文件的形式存放在項目的根目錄下,名稱為 pom.xml。
POM 中定義了項目的基本信息,用于描述項目如何構建、聲明項目依賴等等。
當 Maven 執行一個任務時,它會先查找當前項目的 POM 文件,讀取所需的配置信息,然后執行任務。在 POM 中可以設置如下配置:
- 項目依賴
- 插件
- 目標
- 構建時的配置文件
- 版本
- 開發者
- 郵件列表
在創建 POM 之前,首先要確定工程組(groupId),及其名稱(artifactId)和版本,在倉庫中這些屬性是項目的唯一標識。一旦在 pom.xml 文件中配置了所依賴的 jar,Maven 會自動從構件倉庫中下載相應的構件。
6、maven坐標
Maven 坐標一套規則,它規定:世界上任何一個構件都可以使用 Maven 坐標并作為其唯一標識,Maven 坐標包括 groupId、artifactId、version、packaging 等元素,只要用戶提供了正確的坐標元素,Maven 就能找到對應的構件。
任何一個構件都必須明確定義自己的坐標,這是 Maven 的強制要求,任何構件都不能例外。我們在開發 Maven 項目時,也需要為其定義合適的坐標,只有定義了坐標,其他項目才能引用該項目生成的構件。
Maven 坐標主要由以下元素組成:
- groupId: 項目組 ID,定義當前 Maven 項目隸屬的組織或公司,通常是唯一的。它的取值一般是項目所屬公司或組織的網址或 URL 的反寫,例如 net.biancheng.www。
- artifactId: 項目 ID,通常是項目的名稱。
- version:版本。
- packaging:項目的打包方式,默認值為 jar。
以上 4 個元素中 groupId、artifactId 和 version 是必須定義的,packaging 是可選的。
7、maven倉庫
本地倉庫+遠程倉庫
當 Maven 根據坐標尋找構件時,它會首先查看本地倉庫,若本地倉庫存在此構件,則直接使用;若本地倉庫不存在此構件,Maven 就會去遠程倉庫查找,若發現所需的構件后,則下載到本地倉庫使用。如果本地倉庫和遠程倉庫都沒有所需的構件,則 Maven 就會報錯。
浙公網安備 33010602011771號