For investors
股價:
5.36 美元 %For investors
股價:
5.36 美元 %認(rèn)真做教育 專心促就業(yè)
參賽學(xué)員:常彥博
所獲獎項:二等獎
內(nèi)容:
4個月的堅持!530個小時的整理!15本筆記!496頁的A4紙!22萬8千字的純手打!全部完成!
說明:(又一重量級系列九Servlet的word版筆記發(fā)布!看目錄就知道知識點很多!筆記內(nèi)容真實,都是課上及TTS上內(nèi)容,不是從網(wǎng)上復(fù)制粘貼來的! 同時也不會去刷點擊率!不想評分的按F5刷新頁面即可!不用選擇分?jǐn)?shù),一旦選擇就不能改了!也可以拿到電子版后再來評分!Q群在下。畢業(yè)了!不知道 TTS帳號能保留多久?大家抓緊進(jìn)群下載~最近人數(shù)暴漲!目前15本筆記都已完成,可搜索查看此15本筆記。對于新學(xué)員,建議進(jìn)群下載系列一!包括:Java基礎(chǔ)、面向?qū)ο蟆avaSE核心)
1)此筆記為本人系列筆記之一:Java(1)、Oracle(2)、PL/SQL(3)、JDBC(4)、XML(5)、HTML(6)、 CSS(7)、JavaScript(8)、Servlet(9)、JSP(10)、Ajax(11)、jQuery(12)、Struts2(13)、 Hibernate(14)、Spring(15)……
2)筆記內(nèi)容整理了:Servlet(程祖紅老師主講,占筆記內(nèi)容100%)。
3)此筆記已打印出成品,一共56頁!(不包括目錄)。排版格式大部分按照畢業(yè)論文做的!有目錄、章節(jié)、頁眉、頁腳、縮進(jìn)、一二三級標(biāo)題等。同時排版格式也照顧到了雙面打印,所以電子版可直接雙面打印,不需要調(diào)格式。
因此,本人的系列筆記平均花費20個小時以上(筆記純手工輸入)!每天的總結(jié)、排版很辛苦!之前有很多朋友拿到了我分享的筆記,因此還望各位尊重他人勞動成果(你懂得~~)。
4)評選系統(tǒng)由于不能上傳word版,所以格式、布局上不太好看,如文中的注意事項有特殊項目符號,這里顯示的是字母u和字母v,有的圖片也不能顯示!內(nèi)容太長,老是提交失敗!只能一點一點發(fā)!
5)各位加此Q群:227252731,后面的筆記會發(fā)到群共享里。
一、Servlet概述
1.1 B/S架構(gòu)(了解)
1)什么是B/S架構(gòu)
客戶端使用瀏覽器,服務(wù)端使用web瀏覽器,客戶端跟服務(wù)器之間使用HTTP協(xié)議進(jìn)行通訊。
2)優(yōu)點
①客戶端不需要單獨安裝(因為使用瀏覽器);C/S架構(gòu)比較麻煩的是需要單獨安裝每個客戶端,并且一旦客戶端版本發(fā)生改變,就需要再次安裝。
②開發(fā)相對簡單;C/S架構(gòu)需要我們分別在,客戶端和服務(wù)器端編寫相應(yīng)的通信處理模塊和自定義協(xié)議,而B/S架構(gòu)使用標(biāo)準(zhǔn)的HTTP協(xié)議(即不再需要自定義協(xié)議),而且瀏覽器與Web服務(wù)器已經(jīng)包含了相應(yīng)的通信模塊了。
1.2 什么是Servlet
Sun公司制訂的一種用來擴(kuò)展Web服務(wù)器功能的組件規(guī)范。
1)擴(kuò)展web服務(wù)器功能
早期(2000年左右)的Web服務(wù)器:apache的web server、微軟的iis。只能夠處理靜態(tài)資源(即需要事先將html文件寫好),不能夠處理動態(tài)資源的請求(即需要依據(jù)請求參數(shù)然后進(jìn)行計算,生成相應(yīng)的頁面)。
為了讓這些web服務(wù)器能夠處理動態(tài)資源的請求,需要擴(kuò)展他們的功能。
早期使用的是CGI技術(shù)(Common Gateway Interface通用網(wǎng)關(guān)接口),可以使用很多語言編寫,如perl,C/C++等來開發(fā)CGI程序。但是CGI程序有幾個問題,比如開發(fā)比較復(fù)雜(因為需要程序員自己去分析請求參數(shù))、性能不佳(因為當(dāng)Web服務(wù)器收到請求之后,會啟動一個CGI進(jìn)程來處理請求)、CGI程序依賴平臺(可移植性不好)。
現(xiàn)在,可以使用Servlet來擴(kuò)展。
當(dāng)瀏覽器將請求發(fā)送給Web服務(wù)器(比如:apcahe的web server),Web服務(wù)器會向Servlet容器發(fā)送請求,Servlet容器負(fù)責(zé)解析請求數(shù)據(jù)包。當(dāng)然,也包括網(wǎng)絡(luò)通訊相關(guān)的一些處理,然后將解析之后的數(shù)據(jù)交給Servlet來處理(Servlet只需要關(guān)注具體的業(yè)務(wù)處理,不用關(guān)心網(wǎng)絡(luò)通訊相關(guān)的問題)。
u 注意事項:可以不使用服務(wù)器,而直接向Servlet容器發(fā)送請求,因為Servlet容器里面也有個通信模塊,所以也可直接把Servlet容器當(dāng)作簡單的Web服務(wù)器來使用。
2)組件規(guī)范
①組件:是符合一定規(guī)范,并且實現(xiàn)部分功能的可以單獨部署的軟件模塊。組建必須要部署到容器里面才能運行。
②容器:也是符合一定規(guī)范,并且提供組件的運行環(huán)境的程序。
u 注意事項:單個的組件、單個的容器都是沒意義的,都不能單獨運行,需要放在一起才能運行。
1.3什么是Tomcat
Tomcat本身是一個Servlet容器,即可以提供Servlet運行環(huán)境的一個程序,但是Tomcat還提供了Web服務(wù)器所具有的所有功能,所以我們也稱Tomcat是一個Web服務(wù)器。Tomcat的默認(rèn)端口是8080。
1)安裝Tomcat(#下載)
①Linux系統(tǒng)下安裝和配置的步驟
step1:解壓到/home/soft01下
step2:配置環(huán)境變量
cd /home/soft01
vi .bash_profile
JAVA_HOME:jdk的主目錄
CATALINA_HOME:tomcat的主目錄
PATH:CATALINA_HOME/bin
step3:啟動Tomcat
cd /home/soft01/tomcat主目錄/bin
sh startup.sh或者sh catalina.sh run
接下來,可以打開瀏覽器,輸入 http://localhost:8080,驗證是否配置成功。
step4:關(guān)閉Tomcat
cd /home/soft01/tomcat主目錄/bin
sh shutdown.sh
②Windows系統(tǒng)下安裝和配置的步驟
step1:解壓到某個盤下
step2:配置環(huán)境變量
JAVA_HOME(JDK的主目錄) 必須配置
CATALINA_HOME(Tomcat的主目錄)可以不配置
PATH(Tomcat的bin目錄)可以不配置
“我的電腦”右鍵“屬性”,打開“系統(tǒng)屬性”的“高級”選項卡,找到“環(huán)境變量。
新建“用戶變量”。
新建JAVA_HOME。
u 注意事項:新建系統(tǒng)變量或新建用戶變量均可,建議新建用戶變量。
新建CATALINA_HOME (可以不配置)。
新建PATH(可以不配置)。
u 注意事項:
v 如果環(huán)境變量中已經(jīng)有PATH,修改該PATH即可,使用“;”分號作分隔,如下所示:
PATH C:\Program Files\Java\jdk1.6.0_06\bin ;
D:\apache-tomcat-5.5.23\bin
v Windows操作系統(tǒng)下以“;”分號為分隔符;linux系統(tǒng)下以“:”冒號為分隔符。
step3:啟動Tomcat
進(jìn)入啟動Tomcat的bin目錄下,雙擊“startup.bat”。
接下來,可以打開瀏覽器,輸入 http://localhost:8080,驗證是否配置成功。
step4:關(guān)閉Tomcat
進(jìn)入啟動Tomcat的bin目錄下,雙擊“shutdown.bat”。
2)Tomcat目錄結(jié)構(gòu)簡介
①bin目錄:存放啟動和關(guān)閉服務(wù)器的一些腳本(命令)。
②common目錄:共享(部署在該服務(wù)器上的所有程序都可以使用)的一些jar包。
③conf目錄:存放服務(wù)器的一些配置文件。
④webapps目錄:部署目錄。
⑤work目錄:服務(wù)器運行時,生成的一些臨時文件。
1.4如何寫一個Servlet(不使用開發(fā)工具)
step1:先寫一個Java類,實現(xiàn)Servlet接口或者繼承HttpServlet抽象類。
public class HelloWorldServlet extends HttpServlet {
//Tomcat會自動調(diào)用service,自己不用再去寫方法調(diào)用了,所以必須把名字寫對!
public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
//異常必須寫兩個,不能寫成Exception,也不能再多個異常
//設(shè)置一個消息頭content-type,告訴瀏覽器返回的數(shù)據(jù)類型是一個html文檔,以及編碼格式。此外,還可以告訴服務(wù)器,在使用out輸出時,使用指定的編碼格式進(jìn)行編碼
response.setContentType("text/html;charset=utf-8"");
//通過響應(yīng)對象,獲得一個輸出流
PrintWriter out=response.getWriter();
//調(diào)用流的方法進(jìn)行輸出,其實質(zhì)是將處理結(jié)果寫到了response對象上
out.println("Hello World");
/** out.close()不調(diào)用也可以,因為Servlet方法執(zhí)行完畢,容器會自動調(diào)用out.close方法*/
out.close(); } }
step2:執(zhí)行編譯操作:javac -d . HelloWorldServlet.java
但是會報錯,找不到某些類!其中 -d . 代表把編譯后的文件放在當(dāng)前文件夾下。
把Tomcat安裝目錄中common中l(wèi)ib中的servlet-api.jar和剛編寫類放一起(是編譯時需要用的jar)。
再次編譯:javac -cp servlet-api.jar -d . HelloWorldServlet.java,其中 -cp servlet-api.jar表示告訴Java編譯器去哪里找需要的class文件(到servlet-api.jar的jar包中找)。
step3:打包,即創(chuàng)建一個具有如下結(jié)構(gòu)的文件夾:
appname(文件夾名起應(yīng)用名)
|--WEB-INF(必須大寫)
|--classes(文件夾,放.class文件)
|--lib(文件夾,放.jar文件,可沒有)
|--web.xml(部署描述文件 url-pattern)
將編譯好的.class文件放入classes文件夾中(如有包,則一起放入)。
web.xml文件內(nèi)容:
xmlns="#/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="#/xml/ns/j2ee
#/xml/ns/j2ee/web-app_2_4.xsd">
helloWorld
Servletday01.HelloWorldServlet
helloWorld
/hello
step4:部署,將step3創(chuàng)建的文件夾拷貝到Servlet容器特定的文件夾下面(拷貝到Tomcat的webapps目錄下)。
u 注意事項:也可以將step3創(chuàng)建的文件夾使用jar命令進(jìn)行壓縮,生成.war為后綴的文件,然后拷貝。
step5:啟動Servlet容器,訪問Servlet。
訪問格式:http://ip:port/appname/url-pattern
比如在瀏覽器地址欄輸入:http://localhost:8080/web01/hello
1.5使用MyEclipse開發(fā)Servlet
step1:配置MyEclipse,使得MyEclipse能夠管理Tomcat。
1)點擊工具欄上的“Run/Stop/Restart MyEclipse Servers”圖標(biāo)旁邊的下拉箭頭,選擇“Configure Server”。
2)在彈出的對話框“Preferences”中展開“MyEclipse”--“Servers”--“Tomcat”--“Tomcat5.X”
u 注意事項:選擇你目前電腦上Tomcat的版本,此處以Tomcat5為例。
3)將Tomat server選項置為“Enable”(默認(rèn)為“Disable”)。
4)點擊“Tomcat home directory”之后的“Browse”按鈕,選擇Tomcat主目錄,確定,然后“Tomcat base directory”和“Tomcat temp directory”自動生成,點擊“OK”。
u 注意事項:兩項可改可不改的:
v Tomcat下的JDK--“Tomcat JDK name”是自己已安裝的JDK(Tomcat也是java寫的也得依賴JDK)。
v 建議Tomcat下的Launch--“Tomcat launch mode”設(shè)置為Run model,默認(rèn)為Debug mode而該模式在有些時候會顯示不正常。
5)回到工具欄上的“Run/Stop/Restart MyEclipse Servers”圖標(biāo)旁邊的下拉箭頭,選擇Tomcat 5.x,點擊“Start”。
6)當(dāng)在控制臺顯示“Server startup in XXX ms“,則Tomcat啟動成功。
u 注意事項:如果出現(xiàn)“Address already in use:JVM_Bind”異常,則說明已經(jīng)啟動了一個Tomcat。解決辦法:運行shutdown命令,關(guān)閉之前開啟的Tomcat。
step2:建立一個Web Project(Web工程),填寫“Project ame”,JDK最好選5.0,其他選項默認(rèn),點擊“Finish”。
step3:編寫Java類和web.xml文件。
step4:部署項目到Tomcat服務(wù)器。
1)點擊工具欄“Deploy MyEclipse J2EE Project to Server”按鈕。
2)彈出對話框“Project Deployments”,點擊“Add”按鈕。
3)彈出“New Deployment”對話框,選擇“Tomcat 5.x”,點擊“Finish”,最后點擊"OK"。
u 注意事項:在對話框“Project Deployments”對話框有4個按鈕,常用的為
①“Add”按鈕:在Tomcat服務(wù)器上增加新應(yīng)用。
②“Remove”按鈕:刪除Tomcat服務(wù)器上的新應(yīng)用。
③“Redeploy”按鈕:重新部署該應(yīng)用,一般每次修改后都需要重新部署一下。
step5:訪問Tomcat服務(wù)器上的Servlet實例。
訪問格式:http://ip:port/appname/url-pattern
比如在瀏覽器地址欄輸入:http://localhost:8080/web01/hello
u 注意事項:
v 在IDE工具(集成開發(fā)環(huán)境)中啟動Tomcat部署項目后,不需要重新啟動服務(wù)器,系統(tǒng)會自動部署。
v IDE工具簡化了Servlet的開發(fā)步驟:
第1步 寫一個java類 手動
第2步 編譯 自動
第3步 打包 自動
第4步 部署 不用手動拷貝,點一下
第5步 啟動服務(wù)器,訪問servlet 手動
默認(rèn)情況下,應(yīng)用名和工程名相同。
v 工程--屬性--MyEclipse--Web--Web Context可修改部署后的應(yīng)用名。
v 新建Web工程時也可以手動在Context root RUL中更改應(yīng)用名。
1.6 Servlet是如何運行的
比如,在瀏覽器地址欄輸入:http://ip:port/web01/hello(web01/hello為請求資源路徑)。
step1:瀏覽器依據(jù)ip和port建立與Servlet容器之間的連接。
step2:瀏覽器將請求數(shù)據(jù)打包(即按照http協(xié)議的要求,將相關(guān)數(shù)據(jù)封裝成一個數(shù)據(jù)包,一般稱之為請求數(shù)據(jù)包)并發(fā)送給Servlet容器。
step3:Servlet容器解析請求數(shù)據(jù)包,并將解析之后得到的數(shù)據(jù)放到已創(chuàng)建的request對象上,同時,容器也已經(jīng)創(chuàng)建好了一個response對象。
step4:Servlet容器依據(jù)請求資源路徑(即/web01/hello)找到Servlet的配置,然后創(chuàng)建Servlet對象(根據(jù)xml文件里配置的類而創(chuàng)建)。
step5:Servlet容器接下來調(diào)用Servlet對象的service方法,并且會將事先創(chuàng)建好的request對象和response對象作為service方法的參數(shù)傳遞給Servlet對象。
step6:Servlet可以通過request對象獲得請求參數(shù),進(jìn)行相應(yīng)的處理,然后將處理結(jié)果寫到response對象上。
step7:Servlet容器讀取response對象上的數(shù)據(jù),然后將處理結(jié)果打包(響應(yīng)數(shù)據(jù)包)并發(fā)送給瀏覽器。
step8:瀏覽器解析響應(yīng)數(shù)據(jù)包,將返回的數(shù)據(jù)展現(xiàn)給用戶。
1.7常見錯誤及解決方式
1)404:是一個狀態(tài)碼(是一個三位數(shù)字,由服務(wù)器發(fā)送給瀏覽器,告訴瀏覽器是否正確處理了請求),404的意思是說:服務(wù)器依據(jù)請求資源路徑,找不到對應(yīng)的資源。
解決:①依據(jù)http://ip:port/appname/url-pattern檢查你的請求地址是否正確。
②仔細(xì)檢查web.xml,特別要注意servlet-name是否一致。
2)500:服務(wù)器處理出錯,一般是因為程序運行出錯。
解決:①檢查程序的代碼,比如:是否繼承。
②檢查web.xml,類名要填寫正確。
3)405:服務(wù)器找不到對應(yīng)的service方法。
解決:檢查service方法的簽名(方法名、參數(shù)類型、返回類型、異常類型)。
1.8案例:根據(jù)請求次數(shù)顯示結(jié)果和顯示當(dāng)前時間
十、請求轉(zhuǎn)發(fā)
10.1什么是轉(zhuǎn)發(fā)
一個Web組件(Servlet/JSP)將未完成的處理通過容器轉(zhuǎn)交給另外一個Web組件繼續(xù)完成。常見的情況是:一個Servlet將數(shù)據(jù)處理完畢之后,轉(zhuǎn)交給一個JSP去展現(xiàn)。
10.2如何轉(zhuǎn)發(fā)
step1:綁定數(shù)據(jù)到requset:request里有個HashMap。
request.setAttribute(String name,Object obj);//name:綁定名。obj:綁定值。
另一個方法獲取綁定值:
Object request.getAttribute(String name);//如果綁定對象的值不存在,會返回null
step2:獲得一個轉(zhuǎn)發(fā)器:url:要轉(zhuǎn)發(fā)給哪一個Web組件
RequestDispatcher rd=request.getRequsetDispatcher(String url);
step3:轉(zhuǎn)發(fā)
rd.forward(request,response);//JSP和Servlet會共享相同的請求和響應(yīng)對象
step4:在轉(zhuǎn)發(fā)的目的地,可以使用request.getAttribute方法獲得綁定的數(shù)據(jù),然后進(jìn)行處理。
10.3編程需要注意的兩個問題
1)轉(zhuǎn)發(fā)之前,先清空response對象中緩存的數(shù)據(jù)。
out.println("hello");//看不到結(jié)果
rd.forward(request, response);//能看到結(jié)果
2)轉(zhuǎn)發(fā)之前,不能調(diào)用out.close()或著out.flush只能同時處理一個響應(yīng)
out.println("hello");//看到結(jié)果
out.close();
rd.forward(request, response);//看不到結(jié)果
10.4轉(zhuǎn)發(fā)原理圖
10.5轉(zhuǎn)發(fā)的特點
1)轉(zhuǎn)發(fā)的目的地只能夠是同一個應(yīng)用內(nèi)部的某個組件的地址。
2)轉(zhuǎn)發(fā)之后,瀏覽器地址欄的地址不變。
3)轉(zhuǎn)發(fā)所涉及的各個Web組件可以共享同一個request對象和response對象
10.6轉(zhuǎn)發(fā)和重定向的區(qū)別
1)轉(zhuǎn)發(fā)的目的地只能是同一個應(yīng)用內(nèi)部某個組件的地址,而重定向的目的地是任意的。
2)轉(zhuǎn)發(fā)之后,瀏覽器地址欄的地址不變,而重定向會變。
3)轉(zhuǎn)發(fā)所涉及的各個Web組件可以共享request對象,而重定向不可以。
4)轉(zhuǎn)發(fā)是一件事情未做完,而重定向是一件事情已經(jīng)做完。
10.7何時用重定向
1)比如用戶作刪除操作時,刪除操作已做完,重定向訪問list.do
10.8何時用轉(zhuǎn)發(fā)
1)用戶調(diào)用list.do
2)有ListServlet到數(shù)據(jù)庫查詢數(shù)據(jù)
3)ListServlet將查詢到的結(jié)果通過Servlet引擎(通信模塊)轉(zhuǎn)發(fā)給負(fù)責(zé)顯示的empList.jsp
4)empList.jsp將數(shù)據(jù)通過友好的界面顯示給用戶,比如用戶作刪除操作時,刪除操作已做完,重定向訪問list.do
10.9案例:修改6.4案例中step7中的ListEmpServlet.java
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請在30日內(nèi)與聯(lián)系我們,我們會予以更改或刪除相關(guān)文章,以保證您的權(quán)益!