Servlet 遠航 預備篇

趁着現在項目不是很緊,我打算抽出一些時間寫個Servlet和JSP的一個專題, 算是對自己這麼多年來的一個技術總結吧!
我們會從最基礎的開始包括HTTP協議的講解,逐漸深入到最後的java主流框架都會進行深入的源碼解析.Let’s get to work…

一.超文本轉移協議(HTTP)

HTTP協議使得Web服務器與瀏覽器之間可以通過互聯網(Internet)或者企業內部網(Intranet)來交換數據.萬維網聯盟(W3C)是一個開發標準的國際化社區,它負責修訂和維護這個協議.HTTP的第一個版本是HTTP0.9,之後是HTTP1.0 最後又被HTTP1.1取代.HTTP1.1是在W3C的RFC2616中定義的.

Web服務器每天24小時運行,隨時等待HTTP客戶端的連接和資源請求.在HTTP中,總是由客戶端發起連接,服務端從不主動連接客戶端.在查找某個資源時,用戶是通過點擊一個包含URL(Uniform Resource Locator,統一資源定位器)的鏈接,或在他的瀏覽器地址欄中輸入一個URL進行的.

  • 下面舉URL的兩個例子:

http://google.com/index.html
http://facebook.com/index.html

URL的第一部分是http,它是協議的標識.並非所有的URL都用HTTP.例如下面兩個例子,雖然沒用HTTP,但它們是有效的:

mailto:[email protected]
ftp://[email protected]

一般來說,URL的格式是這樣的:

protocol://[host.]domain[:port][/context][/resource][?query string]

或者如下所示:

protocol://IP address[:port][/context][/resource][?query string]

  • 方括號中的內容都是可選的,因此URL可以像http://yahoo.ca或者http://192.168.1.9這麼簡單.另外,IP地址其實就是分配給某一臺計算機或者另一種設備的一個數字簽名.一臺計算機可以有多個域名,因此,幾個域名也可以同時共用一個IP地址.例如可以不用http://google.com,也可以用http:/209.85.143.99 爲查詢某個域名的IP地址可以在控制檯使用ping命令,如:

ping google.com

  • IP地址很難記住,人民都喜歡使用域名,但是有些域名是無法買到的,如example.com和example.org,因爲它們是留着備用的,如編寫文檔時作爲示例用.

  • 主機名host部分可以有也可以,它們表示的則是互聯網或者內部網中另一個完全不同的位置.如http://yahoo.com(沒有主機名)與http://mail.yahoo.com(有主機名,爲mail)表示的是兩個完全不同的位置,www是最盛行的主機名,因此它常常省略.

  • 80是HTTP默認端口號,如果WEB服務器在80端口上就不需要端口號也能到達主機,否則每次訪問WEB服務器就需要輸入端口號.例如:Tomcat默認端口爲8080上允許,因此需要輸入端口號:

    http:localhost:8080

  • localhost是一個保留名稱,用來表示主機,即正在運行WEB瀏覽器的這臺計算機.

  • URL中的context部分指應用程序的名稱,可以省略.Web服務器可以運行多個context或多個應用程序.其中一個可以設置爲默認context,如果請求的是默認中的context資源,則URL中的context部分可以省略.

  • 一個context可以有一個或多個默認資源(一般爲index.html index.htm或者default.htm).一個沒有資源名稱的URL,通常作爲默認資源.如歌context中包含多個資源,當客戶端沒有指定默認資源時,將總是返回優先級最高的那一個.

  • 在資源名稱之後,一般是一個或者多個查詢字符串.查詢字符串是指可以傳到服務器進行處理的一個鍵/值對.

1.1HTTP請求

這裏寫圖片描述
一個HTTP請求中包含三個部分:

  • 方法/統一資源標識符(URI)/協議/版本
  • 請求標頭
  • 實體主體

方法/URL協議版本號,放在請求的第一行.
HTTP1.1支持7種請求類型:GET POST HEAD OPTIONS PUT DELETE以及TRACE
URI用於指定一個互聯網資源,是相對於服務器的根目錄.以正斜線(/)開頭.統一資源定位器(URL)實際上也是一種URI.

請求標頭中包含關於客戶端環境和請求實體主體的有用信息.各標頭之間用一個回車換行序列符隔開

在標頭和實體主體之間是一個空行(CRLF),對於HTTP請求格式很重要,CRLF告訴服務器,實體主體從這裏開始.

1.2HTTP響應

一個HTTP響應中也包含三個部分:

  • 協議/狀態碼/描述
  • 響應標頭
  • 實體主體
    響應標頭的第一行告訴我們所使用的協議版本是HTTP1.1,並且請求成功(200)
    響應標頭包含與HTTP請求中類似的游泳信息.響應實體主體是響應本身的HTML內容.標頭和實體主體之間用一系列的回車換行符(CRLF)隔開.
    WEB服務器響應成功時返回狀態碼200,未授權訪問狀態碼是401,未經允許的HTTP方法是405;

二.Tomcat

2.1下載和配置Tomcat

從http:tomcat.apache.org下載最新版本Tomcat,並且應該是zip或gz格式的最新版二進制發行包. 解壓完在安裝目錄下看到幾個目錄: - bin目錄看到幾個用來起點和停止Tomcat的程序. - webapps在這裏部署應用程序. - conf目錄包含了配置文件,包括server.xml和tomcat-users.xml文件. - lib目錄,包含了編譯Servlet和定製標籤所需要的Servlet和JSP的API.

2.2Tomcat環境變量

1.===> 進入bin目錄下,雙擊startup.bat看是否報錯。一般肯定會報。
2.===> 右鍵我的電腦===>高級===>環境變量 新建一個 變量名爲 JAVA_HOME 然後變量值是 你的JDK的bin目錄的上一層。 再新建一個 變量名爲CATALINA_HOME 變量值是你的Tomcat的bin的目錄的上一層。

3.===> 進入Tomcat bin目錄下 雙擊shutdown.bat 然後重複1 的操作。看是否報錯。應該不報了。

4.===> 進入apache-tomcat-5.5.12\conf 目錄下 找到tomcat-users.xml 然後創建一個用戶名密碼。

5.===>然後進入Tomcat主目錄中conf目錄下的server.xml文件,找到其中的Connector port=”8080”,並將其更改爲Connector port=”8088”

jdk+tomcat環境變量配置在blog裏記錄一下,以備後用。

JDK環境變量配置:

如果你的JDK安裝在C盤裏,如:C:\j2sdk1.4.2_05,那麼就在系統變量裏(當然也可以在用戶變量裏)點新建:

變量名:JAVA_HOME

變量值:C:\j2sdk1.4.2_05

再次點新建:

變量名:classpath

變量值:.;%JAVA_HOME%\lib\dt.jar;

並在path里加入 .;%JAVA_HOME%\bin;

那麼你的JDK就配置成功了,當然最好是再試驗一下是否配置成功,那麼就寫一個簡單的程序驗證一下:

Public class Test{

public static void main{

   System.out.println("successful")

}

}

運行代碼,如果沒問題,那一切OK,有問題,請檢查一下上邊所寫的是否有錯。

Tomcat環境變量配置:

如果你的Tomcat安裝在C盤裏,如:F:\Tomcat50(在這裏切記一下,安裝Tomcat時,在其字母周圍一定不要存在空格,否則最後可能導致配置不成功)

同樣,在系統變量裏點新建:

變量名:CATALINA_BASE

變量值:F:\Tomcat50;

再次新建:

變量名:CATALINA_HOME

變量值:F:\Tomcat50;

點擊確定後在classpath中加入%CATALINA_HOME%\common\lib\servlet-api.jar;

在path中加入%CATALINA_HOME%\bin;

  確定後你的Tomcat就配置好了,同樣要驗證是否配置成功,那就運行Tomcat,點擊啓動(或Start service)後,打開瀏覽器,敲入http://localhost:8080,如果出現頁面,那麼配置成功。

經常看到許多人問如何配置JDK和JSP,現在我把方法總結下,希望對大家有所幫助。

第一步:下載jdk和tomcat

第二步:安裝和配置你的jdk和tomcat:執行jdk和tomcat的安裝程序,然後設置按照路徑進行安裝即可。

1.安裝j2sdk以後,需要配置一下環境變量,在我的電腦->屬性->高級->環境變量->系統變量中添加以下環境變量(假定你的jdk安裝在c:\jdk1.6):

JAVA_HOME=c:\jdk1.6

classpath=. ;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\ lib\tools.jar;(.;一定不能少,因爲它代表當前路徑)

path=%JAVA_HOME%\bin

接着可以寫一個簡單的java程序來測試JDK是否已安裝成功:

public class Test{

public static void main(String args[]){

System.out.println(“This is a test program.”);

}

}

將上面的這段程序保存爲文件名爲Test.java的文件。

然後打開命令提示符窗口,cd到你的Test.java所在目錄,然後鍵入下面的命令

javac Test.java

java Test

此時如果看到打印出來This is a test program.的話說明安裝成功了,如果沒有打印出這句話,你需要仔細檢查一下你的配置情況。

2.安裝Tomcat後,在我的電腦->屬性->高級->環境變量->系統變量中添加以下環境變量(假定你的tomcat安裝在c: \Tomcat):

CATALINA_HOME: C: \Tomcat

CATALINA_BASE: C: \Tomcat

TOMCAT_HOME: C:\Tomcat

然後修改環境變量中的classpath,把tomat安裝目錄下的common\lib下的servlet.jar追加到classpath中去,修改後的classpath如下:

classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;

接着可以啓動tomcat,在IE中訪問http://localhost:8080,如果看到tomcat的歡迎頁面的話說明安裝成功了。

第三步:建立自己的jsp app目錄

1.到Tomcat的安裝目錄的webapps目錄,可以看到ROOT,examples, tomcat-docs之類Tomcat自帶的的目錄;

2.在webapps目錄下新建一個目錄,起名叫myapp;

3.myapp下新建一個目錄WEB-INF,注意,目錄名稱是區分大小寫的;

4.WEB-INF下新建一個文件web.xml,內容如下:

2.3啓動和停止Tomcat

可以使用bin目錄下startup.bat(Windows)或startup.sh文件(Unix/Linux/Mac Os)來啓動Tomcat. 在瀏覽器中輸入以下地址來測試Tomcat:

http://localhost:8080

運行bin目錄下的shutdown.bat(Windows)或shutdown.sh()(Unix/Linux/Mac Os)文件來停止Tomcat.

2.4定義Context

爲了將一個Servlet/JSP應用程序部署到Tomcat中,需要顯示或隱式地定義一個Tomcat context,每個Tomcat context都表示Tomcat中的一個web應用程序. 顯示定義Tomcat context有幾種方式:
  • 在Tomcat的conf/Catalina/localhost目錄下創建一個XML文件.

    context文件中必須包含一個Context元素作爲其根元素.沒有子元素,並且是文件中的唯一元素.例如:

Context docBase=”C:/apps/commerce” reloadable=”true”/>

它唯一必要屬性是docBase,用來指定應用程序的位置.reloadable屬性是可選的,如果reloadable存在並且爲true,Tomcat會對應用程序進行監測,每當發現這種變更時,Tomcat就會重新載入應用程序.

  • 在Tomcat的conf/server.xml文件中添加一個Context元素.
    定義context的另一種做法是在conf/server.xml文件中添加一個Context元素.在server.xml的Host標籤下添加Context標籤,並指定path屬性.例如:
<Host name"localhost" appBase="webapps" unpackWARs="true"
        autoDeploy="true">
    <Context path="/commerce"
                docBase="C:/apps/commerce"
                reloadable="true"
    />
</Host

不建議通過server.xml來管理context,因爲只有重啓Tomcat,更新纔會生效.

  • 通過將一個war文件或者整個應用程序複製到Tomcat的webapps目錄下,來隱式地部署應用程序.

2.5定義資源

定義一個JNDI資源,供應用程序在Tomcat context定義中使用,資源用Context元素下的Resource元素表示.
例如:爲了添加一個打開MySQL數據庫連接的DataSource資源,需添加這個Resource元素:

<Context [path="/appName"] docBase="...">
    <Resource name="jdbc/dataSourceName"
        auth="Container"
        type="javax.sql.DataSource"
        username="..."
        password="..."
        driverClassName="com.mysql.jdbc.Driver"
        url="..."
        />
</Context>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章