軟件結構的發展史
掌握了語言基礎以及標准庫后,就像學習了英文單詞和語法,接下來就是要利用這些知識來編寫完整的文章,那么問題時,文章是什么樣的文體呢,是短文還是小說,還是詩歌,這也是我們接下來要說的軟件結構
單機程序-桌面應用
-
單機程序-桌面軟件:
特點:所有數據都保存在本地硬盤中
優點:易於使用,結構簡單
缺點:數據難以共享,安全性差,更新升級麻煩且不及時
-
聯機程序-C/S(Client/Server)結構:
特點:程序分為客戶端和服務器端,重要數據存儲在服務器
優點:數據共享方便,安全性高
缺點:必須先安裝客戶端軟件,升級維護困難
-
聯機程序-B/S(Browser/Server)結構:
特點:程序分為瀏覽器和服務器端,數據全部存儲與服務器
優點:開發簡單(跨平台),數據共享方便,安全性高,無需安裝客戶端
缺點:相比C/S結構,執行速度慢,用戶體驗較弱
強調:B/S本質上也屬於C/S
后端服務形式:
-
單體服務:所有組件部署在同一台機器上
-
服務集群:相同的服務部署到多個機器上(側重數量大,計算量不大)
-
分布式服務:不同的服務部署到不同機器上(側重計算量大,數量不大)
web概述
B/S與web程序很大程度上是可以划等號的,web屬於B/S,B/S一定是web程序
什么是web
web(World Wide Web)即全球廣域網,也稱為萬維網,它是一種基於超文本和HTTP的、全球性的、動態交互的、跨平台的分布式圖形信息系統。是建立在Internet上的一種網絡服務,為瀏覽者在Internet上查找和瀏覽信息提供了圖形化的、易於訪問的直觀界面,其中的文檔及超級鏈接將Internet上的信息節點組織成一-個互為關聯的網狀結構,稱為萬維網;
web與互聯網的區別:
internet作為網絡服務的基礎,web則是建立在internet之上以HTML文檔為載體,以超鏈接作為鏈接紐帶的另一張網
舉個例子:
我們可以依托於公路(internet)上,在某個位置(ip)建立一個工廠(web站點),生成的產品(html文檔)就順着高速公路(internet)進行運輸;
而文檔中可能指向另一個站點的超鏈接所以你可以從當前站點跳轉到另一個站點,許多的超鏈接連接着不同的站點形成的網絡就是萬維網
什么是網頁
網頁是web應用程序最重要的元素
- 網頁本質是html格式的文本文件,是承載各種內容的載體,
- 網站由網頁組成,頁面是必須的,(只有域名和服務器,而沒有制作任何網頁的話,客戶仍舊無法訪問網站。)
- 每個網頁對應一個全球唯一的URL(統一資源定位符),用於在互聯網中識別與存取該網頁
當我們在瀏覽器輸入網址后,經過一段復雜而又快速的程序,網頁文件會被傳送到你的計算機,然后再通過瀏覽器解釋網頁的內容,再展示到你的眼前
Java與web
Web的主流技術少不了 socket,http協議,數據庫,並發等關鍵技術;無論是什么語言都需要解決這些技術問題,也有很多語言實現了上述技術,那為什么選擇Java呢?
Java向來以嚴謹,穩定,標准化著稱,這些特性對於企業開發環境下尤其的重要,盡管出現了一些語法非常簡單靈活的語言,例如python,php等,但是靈活帶來的就是不嚴格,不標准,這些風險是企業所不希望承受的;所以JavaEE至今任然占領了絕大多數的企業Web開發環境;
小結:
web指的是萬維網,是基於internet之上的網絡信息服務,以html文件做為信息的載體,在軟件結構上屬於BS結構,其擁有如下優點:
-
安全性: 數據存儲在服務器端
-
便捷性:無需安裝客戶端,跨平台
-
易維護性:更新升級只需要修改服務器端即可
HTTP協議
-
超文本傳輸協議(HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種協議,所有web都必須遵守的標准; (屬於應用層協議)
-
HTTP協議是無狀態無連接的
-
HTTP采用請求(Request)響應(Response)的模型。
-
- 請求指的是客戶端發送給服務器的數據
-
- 響應指的是服務器返回給客戶端的數據
思考一下:服務器是否可以不返回響應數據?
請求與相應必須是對稱的,一次請求對應一次響應
HTTP工作流程
(1)客戶端socket連接到Web服務器
(2)利用TCP發送HTTP請求數據
(3)服務器接受請求並返回HTTP響應
(4)客戶端收到數據后請求斷開
(5)服務器斷開-客戶端斷開
(6)客戶端瀏覽器解析HTML內容
案例分析
當客戶輸入:www.baidu.com之后,
1.客戶端會先向DNS服務器發送解析請求(采用UDP協議)DNS服務器最終會返回域名對應的主機IP地址給客戶端
2.與服務器建立TCP鏈接,默認使用80端口
3.組織HTTP請求數據發送給服務器
4.服務器接收HTTP請求數據
5.服務器對請求數據進行處理
6.將處理完的數據組織成HTTP格式返回給客戶端
7.客戶端收到數據,發送斷開請求,服務器斷開,客戶端斷開
8.客戶端解析HTTP響應數據,根據文檔類型渲染內容到窗口中
JavaEE與web
目前大多數web開發采用的都是JavaEE,那么JavaEE與web到底是什么關系呢
JavaEE是一套完整的企業應用程序解決方案,而web應用程序相關的技術也包含在內,也就是說:JavaEE平台包括了web技術規范
並且很多廠商根據JavaEE規范開發出了很多流行的web產品,所以JavaEE稱為了開發web程序的首選
JAVAEE 是什么?
JAVAEE 是Java的企業版本
相對於SE擴展了更多企業所需要的服務和接口
需要強調的是JAVAEE僅僅是制定了一套協議規范,並不是真正的實現,其指導其他廠商應當如何實現企業服務和API
詳細可分為13個技術規范:
分布式系統(C/S)相關:
- JNDI 命名目錄接口,把資源從程序中剝離,使得程序與資源耦合降低,可以把他當做配置文件,最大的區別是,你可以通過JNDI獲取一個完整的對象而不是基礎類型的數據
- IDL 不同系統平台不同語言之間的系統集成協議
- EJB 可以進行遠程調用的JavaBean協議
- RMI Java對象遠程調用協議
- JMS Java消息中間件協議,ActiveMQ是其中一個實現,后被AMQP(高級隊列協議侵蝕),如RabbitMQ
數據庫相關:
- JDBC 數據庫連接協議
- JTA 事務管理體系結構協議,(主要規范進行事務管理必須的角色以及之間的關系)
- JTS 事務管理服務協議(是JTA更具體化的協議,規范各種角色之間的具體交互方法)
web相關:
- JSP JavaServePage,可在html中嵌入java的協議
- Servelet 服務連接器協議
郵件處理:
- Maill 郵件服務協議
- JAF 郵件MIME數據處理框架
公共的:
- XML 可擴展標記語言,多用於配置文件
JNDI的例子
使用JNDI前:
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver", true, Thread.currentThread().getContextClassLoader());
conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=xxx&password=xxx");
......
conn.close();
} catch(Exception e) {
......
} finally {
......
}
JNDI配置數據源:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/DB1</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>rootpassword</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
使用JNDI后:
Connection conn=null;
try {
Context ctx = new InitialContext();
Object datasourceRef = ctx.lookup("java:MySqlDS");
//引用數據源
DataSource ds = (Datasource) datasourceRef;
conn = ds.getConnection();
......
c.close();
} catch(Exception e) {
......
} finally {
......
}
web服務器Tomcat
什么是web服務器
- 在Web應用程序中提數據的一方,駐留(不下線)於因特網上某個應用程序(當然廣義上服務器也包括,運行服務器程序的計算機)
- 可以向瀏覽器等Web客戶端提供文檔,說白點:為客戶提供網絡資源,方便管理和下載。
相關概念:
Web服務器:JavaEE下web服務器也包括了解析servlet和jsp的能力其他語言下名稱不同例如VB中的ASP
應用服務器:JavaEE下指實現了EJB相關協議的 如Jboos,weblogic
中間件: 不直接面向客戶,而是提供中間服務,如 redis,ActiveMQ
常見服務器
-
Tomcat
開源免費,輕量級的純Web服務器
-
WebLogic
Oracle下用於開發、集成、部署和管理大型分布式Web應用,網絡應用和,數據庫應用的Java應用服務器,收費
-
IIS
Microsoft旗下僅用於Windows平台
-
JBoss
免費開源的應用服務器,實現了EJB,JMS等分步式相關協議的應用服務器,無法直接用於web應用程序,需搭配Tomcat
Tomcat簡介
Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。 Tomcat 服務器是一個免費的開放源代碼的Web應用容器,屬於輕量級應用服務器。對於一個初學者來說,可以這樣認為,當在一台機器上配置好tomcat服務器,可利用它響應HTML頁面的訪問請求。
嚴格地說Tomcat是一個web應用容器,因為其不僅僅包含了最基礎的web服務能力,同時包含了Servelet與jsp的實現,所以你看會聽到本人用web容器來描述tomcat
下載安裝:
官網地址:http://tomcat.apache.org,根據系統版本選擇即可
其實綠色軟件,下載解壓即可使用
tomcat的目錄結構
啟動與停止
在bin文件夾中有以下文件:
-
startup.bat 用於啟動tomcat
-
shutdown.bat 用於關閉tomcat
注意:需要在CMD中執行,linux系統中執行文件后綴為sh並且需要執行權限
配置文件
應用程序的發布
-
利用jar 打包為war 后放置webapps下
可利用eclipse直接打包war,省去了手動編譯的麻煩,
項目名稱右鍵->export->War File
即可 -
直接復制項目所有web資源到webapps下
-
在server.xml的Host標簽中添加context
<Host> <Context docBase="/Users/jerry/Downloads/apache-tomcat-9.0.29/webapps/TEST2" path="/TEST2" reloadable="true"></Context> </Host>
需要強調的時,發布前必須先編譯所有java原文件
手動編譯:
javac -cp /Users/jerry/Downloads/apache-tomcat-9-2/lib/servlet-api.jar MyServlet.java
#多個文件可以使用通配符 ./*.java
eclipse中編譯(推薦):
默認情況下eclipse會自動編譯項目,可以在項目根目錄下找到classes文件夾把他訪問WEB-INF下即可運行
在eclipse中配置tomcat
Eclipse下創建並啟動WEB項目
圖片太占篇幅放到另一篇中了
Eclipse和IDEA配置tomcat
- 創建web項目
-
- 點擊new 選擇Dynamic web project(可能隱藏在other中)
- 輸入項目名稱
- target runtime,選擇已存在的tomcat服務器
- 點擊Finish完成創建
- 啟動web項目
-
- 在WebContent中提供index.html
- 在項目名稱上點擊右鍵選擇run as -> Run on server
Eclipse導出war包
web應用的目錄結構
![image-20191203233222312](
...............
轉載請注明出處