發展歷程
1、最早的web服務器-NCSA(美國國家超級計算應用中心的縮寫),由於主要開發者的離開,讓其前景變得不明朗。所以一些開發者聚集在一起,對其進行了缺陷修復和增強代碼,發佈了新的版本Apache,即:“打補丁後的Web服務器(A Patchy Web Server)”。
2、Apache軟件基金會(ASF),1999年成立。
主要職責:
1、通過供給 硬件、通信和商業基礎設施的形式 爲 開放、協作式軟件開發項目 提供基礎。
2、用公司和個人捐贈的資源創建一個獨立法定企業,保證這些資源都用於公益事業。
3、爲個人志願者提供法律保護手段以避免受ASF項目相關的法律糾紛的影響。
4、保護Apache商標,以防止其被其他組織濫用。
3、Tomcat工程起源於早期的Java Servlet技術。Servlet是一種可以嵌入特定Web服務器中的Java應用程序(從此擺脫JavaSE基礎,開始走向web應用),毫無疑問,第一個Servlet容器,即Java Web服務器是由Sun公司創建的。
於是在1999年的時候,Sun公司把Servlet容器的代碼贈與ASF,於是 Servlet引擎+Apache Web服務器=Tomcat服務器。
4、Tomcat服務器第一版本3.x系列,支持Servlet2.2和JSP1.1(所以JSP的出現晚於Servlet)規範。
Tomcat4.0(代號Catalina)發佈,Catalina對Tomcat的體系結構進行了完成的重構,並建立了新的代碼庫,支持Servlet2.3和JSP1.2規範。
5、作爲Servlet容器,Tomcat是龐大的一組標準的主要組成部分,這組標準被整體稱爲Java企業版(Java EE)平臺。JavaEE標準定義了一組基於Java的API(應用程序接口),適合爲企業創建Web程序~
6、
Java EE API | 描述 |
---|---|
企業版JavaBeans(EJB) | 提供機制以使Java開發者易於使用組建中的擴展特性 |
Java Message(JMS) | 提供高性能異步信息系統 |
網絡服務API | 網絡服務的API套件和XML進程 |
Java 管理擴展(JMX) | 標準化一個運行時交互式引導和管理應用程序 |
Java 事務處理API(JTA) | 提供高性能異步信息系統 |
網絡服務API | 網絡服務的API套件和XML進程 |
打好基礎
1、web服務軟件作用:把本地資源共享給外部訪問
2、Tomcat服務器基本操作:
啓動: %tomcat%/bin/startup.bat
關閉: %tomcat%/bin/shutdown.bat
訪問tomcat主頁:
http://localhost:8080
3、web應用目錄結構
|- WebRoot 根目錄
|-靜態資源(html+css+javascript+images+xml) 可以直接被瀏覽器訪問到的
|-WEB-INF 不可以直接被瀏覽器訪問到
|-classes 存放class字節碼文件
|-lib 存放jar包文件
web.xml web應用的配置文件,配置servlet
4、Servlet技術: 用java語言開發動態資源的技術
5、HTTP:超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。
1)http協議:對瀏覽器客戶端和服務器端之間數據傳輸的格式規範。
2)http請求:瀏覽器->服務器端
格式:
請求行(請求方式(GET/POST) 請求資源(URI) http協議版本(http1.1))
請求頭(鍵值對形式存在。 host、user-agent、referer)
一個空行
實體內容(POST提交的參數)
HttpServletRequest對象: 請求對象。獲取請求信息。
請求行:request.getMethod() request.getRequestURI/getRequestURL() request.getProtocol();
請求頭: request.getHeader("name") request.getHeaderNames()
實體內容: request.getInputStream()
獲取參數數據:(GET或POST)
request.getParameter("name") 一個值的參數
request.getParameterValues("name"); 多個值的參數
request.getParameterNames() 所有參數
3)http響應: 服務器->瀏覽器端
格式:
響應行(http協議版本 狀態碼 描述)
常用的狀態碼: 200 302 404 500
響應頭( location(結合302狀態碼完成請求重定向功能)、 refresh(定時刷新)、content-type、 content-disiposition(以下載方式打開))
一個空行
實體內容
HttpServletResponse對象: 響應對象。設置響應信息。
響應行: response.setStatus();
響應頭: response.setHeader("name","value")
實體內容:
(PrintWriter) response.getWriter().writer(); 字符內容
(OutputStream)response.getOutputStream().writer(); 字節內容
Web開發入門
1、軟件的結構
C/S(Client - Server 客戶端-服務器端)
**典型應用:**QQ,LOL等
特點:
1)必須下載特定的客戶端程序。
2)服務器端升級、客戶端升級。
B/S(Browser-Server 瀏覽器-服務器端)
典型應用:微博網頁版,4399小遊戲(俗稱:網站)
特點:
1)不需要安裝特定的客戶端(只需要安裝瀏覽器即可)
2)服務器端升級,瀏覽器不需要升級!
例如:就業簽約系統和招聘通~
2、服務器
從物理上來說,服務器就是一臺PC機器。8核,8G以上,T來計算,帶寬100M
(這個去查下,詳細講講~)
web服務器:PC機器安裝一個具有web服務的軟件,成爲web服務器。
數據庫服務器:PC機器安裝一個具有數據管理服務的軟件,稱之爲數據庫服務器。
郵件服務器:PC機器安裝一個具有發送郵件服務的軟件,稱之爲郵件服務器。
3、web服務軟件
web服務軟件的作用:把本地的資源共享給外部訪問。
4、常見的市面上的web服務軟件
WebLogic:BEA公司的產品。收費的。支持JavaEE規範。
WebSphere:IBM公司的產品。收費的。支持JavaEE規範。
JBoss:Redhat公司的產品。收費的。支持JavaEE規範。
Tomcat:開源組織Apache的產品。免費的。支持部分的JavaEE規範。(Servlet、jsp、jdbc,但ejb,rmi不支持)
EJB:http://blog.csdn.net/jojo52013145/article/details/5783677
RMI:http://haolloyin.blog.51cto.com/1177454/332426/
Tomcat基本使用
2.1 下載並安裝
1)到apache官網。www.apache.org http://jakarta.apache.org(產品的主頁)
2)安裝版:window (exe、msi) linux(rmp)
壓縮版:window(rar,zip) linux(tar,tar.gz)學習時候使用
3)運行和關閉tomcat
3.1 啓動軟件
a)找到%tomcat%/bin/startup.bat ,雙擊這個文件
b)彈出窗口,顯示信息(不要關閉次窗口)
c)打開瀏覽器,輸出以下地址
http://localhost:8080
d)看到一隻貓畫面,證明軟件啓動成功!
3.2 關閉軟件
a)找到%tomcat%/bin/shutdown.bat,雙擊這個文件即可!
c)打開瀏覽器,輸出以下地址。看到“無法連接”(最好先清空瀏覽器緩存)
2.2 tomcat軟件使用的常見問題
1)閃退問題
原因:tomcat軟件是java語言開發的。 tomcat軟件啓動時,會默認到系統的環境變量中查找一個名稱叫JAVA_HOME的變量。這個變量的作用找到tomcat啓動所需的jvm。
解決辦法; 到環境變量中設置JAVA_HOME的變量
JAVA_HOME= C:\Program Files\Java\jdk1.6.0_30 (注意別配置到bin目錄下)
2)端口占用的錯誤
原因: tomcat啓動所需的端口被其他軟件佔用了!
解決辦法:
a)關閉其他軟件程序,釋放所需端口
b)修改tomcat軟件所需端口
找到並修改%tomcat%/conf/server.xml文件
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
3)CATALINA環境變量問題
原因: tomcat軟件啓動後,除了查找JAVA_HOME後,還會再查找一個叫CATALINA_HOME變量,這個變量的作用是設置tomcat的根目錄。
解決辦法:建議不要設置CATALINA_HOME變量。檢查如果有的話,清除掉!!!
2.3 體驗tomcat軟件作用
webapps目錄: tomcat共享目錄。需要共享的本地資源放到此目錄中。
2.4 URL
URL全名叫統一資源定位符,用於定位互聯網的資源。
問題: http://localhost:8081/myweb/test.html
http:// 協議。http協議。
localhost 域名。爲了找到IP地址。
本地域名: localhost
外部域名:www.baidu.com
8081 端口。軟件監聽的
8080: tomcat默認的端口
3306:mysql數據庫的端口
1521: orace數據庫的端口。
/myweb: web應用的名稱。默認情況下,在webapps目錄下找
/test.html :資源名稱。
3、Tomcat目錄結構
文件夾名 | 作用 |
---|---|
bin | 存放各種平臺下,啓動和關閉Tomcat的腳本文件 |
conf | 存放各種配置文件,最重要的是server.xml和web.xml |
lib | 存放Tomcat服務器和web應用都能訪問的jar包 |
logs | Tomcat運行時的日誌文件,Tomcat未正常啓動,可以在這裏找到問題 |
temp | 存放Tomcat的臨時文件,接觸不是很多 |
webapps | web發佈目錄,存放web的應用文件【特別是裏面的Root是Tomcat運行的根目錄文件】 |
work | 存放各種jsp生成的servlet文件 |
4、手動開發動態資源
/*
5.1 靜態資源和動態資源的區別
靜態資源: 當用戶多次訪問這個資源,資源的源代碼永遠不會改變的資源。
動態資源: 當用戶多次訪問這個資源,資源的源代碼可能會發生改變
5.2 動態資源的開發技術
Servlet : 用java語言來編寫動態資源的開發技術。
Servlet特點:
1)普通的java類,繼承HttpServlet類,覆蓋doGet方法
2)Servlet類只能交給tomcat服務器運行!!!!(開發者自己不能運行!!!)
Servlet手動編寫步驟:
1)編寫一個servlet程序,繼承HttpServlet(導入tomcat服務器lib包下的servlet架包)
public class HelloServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//解決中文亂碼問題
resp.setContentType("text/html;charset=utf-8");
//向瀏覽器輸出內容
resp.getWriter().write("這是第一個servlet程序。當前時間爲:"+new Date());
}
}
2)找到HelloServlet類的bin目錄下的class字節碼,然後把拷貝到tomcat的一個web應用中WEB-INF/classes目錄下。
3)在當前web應用下的web.xml文件配置Servlet。
<!-- 配置一個servlet程序 -->
<servlet>
<!-- servlet的內部名稱 ,可以自定義-->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet類名: 包名+簡單類名-->
<servlet-class>gz.itcast.d_servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- servlet的內部名稱,和上面的名稱保持一致!!!-->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet的訪問名稱: /名稱 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
4)啓動tomcat服務器,運行訪問
訪問servlet: http://localhost:8080/myweb/
*/
6、Http協議入門
/*
6.1 什麼是http協議
http協議: 對瀏覽器客戶端和服務器端之間數據傳輸的格式規範
tcp/ip協議:關注的是客戶端與服務器之間數據是否傳輸成功
http協議:是在tcp/ip協議之上封裝的一層協議,關注的是數據傳輸的格式是否規範
6.2 查看http協議的工具
1)使用火狐的firebug插件(右鍵->firebug->網絡)
2)使用谷歌的“審查元素”
3)使用系統自帶的telnet工具(遠程訪問工具)
a)telnet localhost 8080 訪問tomcat服務器
b)ctrl+] 回車 可以看到回顯
c)輸入請求內容
GET /myweb/hello HTTP/1.1
Host: localhost:8080
Connection: keep-alive
d)回車,即可查看到服務器響應信息。
6.3 http協議內容
請求(瀏覽器-->服務器)
GET /day09/hello HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
響應(服務器-->瀏覽器)
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Length: 24
Date: Fri, 30 Jan 2015 01:54:57 GMT
this is hello servlet!!!
*/
7、http請求
/*
GET /day09/hello HTTP/1.1 --請求行
Host: localhost:8080 --請求頭(多個key-value對象)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
--一個空行
name=eric&password=123456 --(可選)實體內容
7.1 請求行
GET /day09/hello HTTP/1.1
#http協議版本
http1.0:當前瀏覽器客戶端與服務器端建立連接之後,只能發送一次請求,一次請求之後連接關閉。
http1.1:當前瀏覽器客戶端與服務器端建立連接之後,可以在一次連接中發送多次請求。(基本都使用1.1)(尋找資源等圖片也是一次請求)
#請求資源
URL: 統一資源定位符。http://localhost:8080/day09/testImg.html。只能定位互聯網資源。是URI 的子集。
URI: 統一資源標記符。/day09/hello。用於標記任何資源。可以是本地文件系統,局域網的資源(//192.168.14.10/myweb/index.html), 可以是互聯網。
#請求方式
常見的請求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE
常用的請求方式: GET 和 POST
表單提交:
<form action="提交地址" method="GET/POST">
<form>
GET vs POST 區別
1)GET方式提交
a)地址欄(URI)會跟上參數數據。以?開頭,多個參數之間以&分割。
GET /day09/testMethod.html?name=eric&password=123456 HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/day09/testMethod.html
Connection: keep-alive
b)GET提交參數數據有限制,不超過1KB。
c)GET方式不適合提交敏感密碼。
d)注意: 瀏覽器直接訪問的請求,默認提交方式是GET方式
2)POST方式提交
a)參數不會跟着URI後面。參數而是跟在請求的實體內容中。沒有?開頭,多個參數之間以&分割。
POST /day09/testMethod.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8
Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/day09/testMethod.html
Connection: keep-alive
name=eric&password=123456
b)POST提交的參數數據沒有限制。
c)POST方式提交敏感數據。
7.2 請求頭
Accept: text/html,image/* -- 瀏覽器接受的數據類型
Accept-Charset: ISO-8859-1 -- 瀏覽器接受的編碼格式
Accept-Encoding: gzip,compress --瀏覽器接受的數據壓縮格式
Accept-Language: en-us,zh- --瀏覽器接受的語言
Host: www.it315.org:80 --(必須的)當前請求訪問的目標地址(主機:端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --瀏覽器最後的緩存時間
Referer: http://www.it315.org/index.jsp -- 當前請求來自於哪裏
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --瀏覽器類型
Cookie:name=eric -- 瀏覽器保存的cookie信息
Connection: close/Keep-Alive -- 瀏覽器跟服務器連接狀態。close: 連接關閉 keep-alive:保存連接。
Date: Tue, 11 Jul 2000 18:23:51 GMT -- 請求發出的時間
7.3 實體內容
只有POST提交的參數會放到實體內容中
7.4 HttpServletRequest對象
HttpServletRequest對象作用是用於獲取請求數據。
核心的API:
請求行:
request.getMethod(); 請求方式
request.getRequetURI() / request.getRequetURL() 請求資源
request.getProtocol() 請求http協議版本
請求頭:
request.getHeader("名稱") 根據請求頭獲取請求值
request.getHeaderNames() 獲取所有的請求頭名稱
實體內容:
request.getInputStream() 獲取實體內容數據
7.5 service 和 doXX方法區別
7.6 案例-獲取瀏覽器的類型(user-agent)
7.7 案例- 防止非法鏈接(referer)
第1次 CSDN/51CTO -> 頁面(點擊下載) -> 彈出廣告頁面(點擊此處下載) -> 開始下載
第2次 直接點擊此處下載 -> 轉回廣告頁面 -> 開始下載
非法鏈接:
1)直接訪問下載的資源
2)不是從廣告頁面過來的鏈接
referer: 當前請求來自於哪裏。
7.8 傳遞的請求參數如何獲取
GET方式: 參數放在URI後面
POST方式: 參數放在實體內容中
獲取GET方式參數:
request.getQueryString();
獲取POST方式參數:
request.getInputStream();
問題:但是以上兩種不通用,而且獲取到的參數還需要進一步地解析。
所以可以使用統一方便的獲取參數的方式:
核心的API:
request.getParameter("參數名"); 根據參數名獲取參數值(注意,只能獲取一個值的參數)
request.getParameterValue("參數名“);根據參數名獲取參數值(可以獲取多個值的參數)
request.getParameterNames(); 獲取所有參數名稱列表
7.9 請求參數編碼問題
修改POST方式參數編碼:
request.setCharacterEncoding("utf-8");
修改GET方式參數編碼:
手動解碼:String name = new String(name.getBytes("iso-8859-1"),"utf-8");
指定服務器編碼:
server.xml文件Connector標籤—>URIEncoding="utf-8"
*/