JavaWeb概述
JavaWeb可以分爲兩個單詞來理解:Java和Web。
Web:即網頁的意思。
Web分類
Web可以分爲靜態web和動態web。
靜態web
- 靜態的網頁,提供給所有人看的數據始終不會發生變化!
- 如html,css
動態web
- 動態的網頁,與靜態網頁相反,提供給所有人看的數據始終會發生變化!所有人在不同的時間、不同的地點看到的數據是不同的。
- 如淘寶、京東等。現在幾乎所有的網站都是動態web
- 技術棧:Servlet/JSP,ASP,PHP等
JavaWeb:在Java中,動態web資源開發的技術統稱爲JavaWeb。
Web應用程序
web應用程序:可以提供瀏覽器訪問的程序!
web應用程序如:index.html,a.html等。網站可以將這多個web資源整合起來,這些web資源可以被外界訪問。
我們能訪問到的任何一個頁面或者資源,都存在於這個世界的某一個角落的計算機上。它們對外提供了一個URL,通過URL來進行訪問。
統一的web資源會被放在同一個文件夾下,即web應用程序。我們需要服務器來啓動它。
一個web應用由多部分組成(靜態、動態):
-
html、css、js
-
jsp、servlet
-
java程序
-
jar包
-
配置文件(Properties)
web應用程序編寫完畢後,若想提供給外界使用,需要一個服務器來統一管理。
靜態web
靜態web是網頁發展最開始的階段。*.html就可以認爲是靜態網頁。
如果服務器一直存在靜態網頁,我們就可以直接進行讀取。
靜態web的獲取:
客戶端通過網絡向服務器發送請求,服務器接收到請求後,在自己的資源中找是否有對應的信息,若有服務器則響應給客戶端。
靜態頁面存在的缺點:
-
web頁面無法動態更新,所有的用戶看到的都是同一個頁面
所看到的動態是僞動態
- 使用輪播圖、點擊特效等實現
- 使用JavaScript實現
- 使用VBScript實現
-
無法和數據庫進行交互(數據無法持久化,用戶無法交互)
動態web
頁面會動態展示:Web頁面的展示效果因人而異。
web的獲取:
客戶端向服務器發送請求,若請求的是靜態資源,則在file system中找,找到後通過web server響應給客戶端;若請求的是動態資源,則通過jsp/servlet渲染之後在通過web server響應給客戶端。
缺點:
假如服務器的動態web資源出現了錯誤,我們需要編寫後臺程序,重新分佈
優點:
- web頁面可以動態更新,所有的用戶看到的都不是同一個頁面
- 可以和數據庫進行交互(數據持久化)
Web服務器
Web開發技術
web開發的技術有ASP、PHP、JSP等。
ASP:
- 微軟的,國內最早流行的是ASP
- 在HTML中嵌入了VB的腳本
- 在ASP開發中,一個頁面:會在html中嵌套java的代碼。頁面及其混亂。
- 維護成本高
- 使用C#
PHP:
- PHP開發速度很快,功能很強大,跨平臺,代碼簡單
- 無法承載大訪問量的情況
JSP/Servlet:
- SUN公司主推的B/S架構
- 基於Java語言
- 可以承載三高問題帶來的影響
- 語法像ASP
Web服務器-Tomcat
服務器是一種被動的操作,用來處理用戶的一些請求和給用戶一些響應。
在進行Web開發時,用到的服務器是Tomcat。
Tomcat
Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,最新的Servlet 和JSP 規範總是能在Tomcat 中得到體現,因爲Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛並得到了部分軟件開發商的認可,成爲目前比較流行的Web 應用服務器。
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。對於一個Java初學web的人來說,它是最佳的選擇
Tomcat 實際上運行JSP 頁面和Servlet。Tomcat最新版本爲9.0。
使用Tomcat發佈網站:
初學Tomcat時,可以模仿着寫一個網站:
將自己寫的網站放到服務器(Tomcat)指定的web應用的文件夾webapps中,就可以訪問了。
除此之外,一個網站應該由的結構如下:
-- webapps : Tomcat服務器的web目錄
-- ROOT
-- xxx :網站的目錄名
-- WEB-INF
-- classes:java程序
-- lib:web應用所依賴的jar包
-- web.xml:網站配置文件
-- index.html : 默認的首頁
-- static :靜態資源
-- css
-- js
-- img
-- ...
HTTP
HTTP:即超文本傳輸協議,是一個簡單的請求-響應協議,它通常運行在TCP之上。
HTTP的端口是80
HTTP經歷了兩個時期:
-
HTTP1.0:客戶端可以與服務器連接後,只能獲得一個web資源
-
HTTP2.0:客戶端可以與web服務器連接後,可以後的多個web資源
HTTP請求:
客戶端向服務器發請求(Request)
以百度爲例:
Request URL:https://www.baidu.com/ 請求地址
Request Method:GET get方法/post方法
Status Code:200 OK 狀態碼:200
Remote(遠程) Address:14.215.177.39:443
Accept:text/html
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9 語言
Cache-Control:max-age=0
Connection:keep-alive
請求行
請求方式有:GET,POST,HEAD,DELETE,PUT,TRACT等
- GET:請求能夠攜帶的參數比較少,大小有限制,會在瀏覽器的URL地址欄顯示數據內容、不安全,但高效。
- POST:請求能夠攜帶的參數沒有限制,大小沒有限制,不會在瀏覽器的URL地址欄中顯示數據內容。安全,但不高效。
請求行中的請求方式爲GET。
消息頭
Accept:告訴瀏覽器,它所支持的數據類型
Accept-Encoding:支持哪種編碼格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language:告訴瀏覽器,它的語言環境
Cache-Control:緩存控制
Connection:告訴瀏覽器,請求完成是斷開還是保持連接
HOST:主機....
HTTP響應:
服務器給客戶端進行響應
Cache-Control:private 緩存控制
Connection:Keep-Alive 連接
Content-Encoding:gzip 編碼
Content-Type:text/html 類型
響應體
Accept:告訴瀏覽器,它所支持的數據類型
Accept-Encoding:支持哪種編碼格式 GBK UTF-8 GB2312 ISO8859-1
Accept-Language:告訴瀏覽器,它的語言環境
Cache-Control:緩存控制
Connection:告訴瀏覽器,請求完成是斷開還是保持連接
HOST:主機....
Refresh:告訴客戶端,多久刷新一次;
Location:讓網頁重新定位;
響應狀態碼
- 200:請求響應成功
- 3XX:請求重定向
- 4XX:找不到資源(資源不存在)404
- 5XX:服務器代碼錯誤
- 500:服務器內部錯誤
- 502:網關錯誤
HTTPS(全稱:Hyper Text Transfer Protocol over SecureSocket Layer):是以安全爲目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性。
HTTPS的端口是443。
Maven
在JavaWeb開發中,需要使用大量的jar包,手動導入jar是比較麻煩且繁瑣的。可以使用Maven自動導入和配置jar。
Maven:可以通過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具軟件。
Maven的核心思想是:約定大於配置。有約束就不要去違反。Maven會規定好該如何去編寫代碼,必須要按照這個規範來執行。
在IDEA中使用Maven
1、啓動IDEA
2、創建一個MavenWeb項目
3、等待項目初始化完畢
4、觀察maven倉庫
項目初始化完畢後,會發現在Maven倉庫中多了一些東西
5、IDEA中Maven的設置
在IDEA項目創建成功後,需要看一眼Maven的配置。
6、至此,Maven在IDEA中的配置和使用就可以了。
創建一個普通的項目
在IDEA中創建一個普通的JavaWeb項目。
不用勾選 Create from archetype。
對比普通的項目和使用Maven模板的項目:
使用Maven模板的項目:
普通的項目:
可以發現:
-
Maven模板創建的項目中main下面沒有java和resources。
-
普通項目中沒有webapp。webapp是只有在web應用下纔會有的。
標記文件夾的功能
在maven模板創建的項目中,在main下創建兩個目錄:java和resources。
將這兩個目錄的屬性進行修改:
修改方式一
將java目錄改爲Sources Root,將resources改爲Resources Root。修改後如下:
修改方式二
在IDEA中配置Tomcat
1、點擊IDEA中的Edit Configurations
解決警告問題:
我們訪問一個網站的時候,需要指定一個文件夾名字,不然會出現這樣的問題。所以創建一個文件夾是必要的配置。
2、啓動Tomcat
3、測試
在瀏覽器的地址欄中輸入 http://localhost:8080/
4、關閉Tomcat
pom文件
pom.xml是Maven的核心配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<!--Maven的版本和頭文件-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--這裏是配置的GAV-->
<groupId>javaweb</groupId>
<artifactId>javaweb-maven</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!--packaging:項目打包的方式。
jar:java項目
war:JavaWeb項目
-->
<name>javaweb-maven Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!--配置-->
<properties>
<!--項目的默認構建編碼-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--編碼版本-->
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--項目依賴-->
<dependencies>
<!--具體依賴的jar包配置文件-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!--項目構建用的東西-->
<build>
<finalName>javaweb-maven</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Maven的一個高級之處在於,它會自動導入一個jar包所依賴的其他jar包,如:
由於Maven的核心思想是 約定大於配置,我們之後可能會遇到寫的配置文件無法被導出或者生效的問題,解決方案:在pom.xml中的build中配置resources,來防止我們資源導出失敗的問題
<!--在build中配置resources,來防止我們資源導出失敗的問題-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
可以通過IDEA查看目錄樹(jar包的關聯聯繫圖):
IDEA中Maven的全局設置
在創建項目的時候,避免每次去設置路徑,可以在IDEA的全局設置中進行配置。