04-Servlet入门+http协议
一、 Servlet
1. javaweb 學什么
用 java 語言開發動態的web資源,接下來就是介紹如何開發動態的web資源
對于java程序員而言,所謂動態web資源就是可以運行在服務器上的java程序
2. 實現服務器管理java程序
??? 開發人員寫好一個java類,到底有哪些方法tomcat服務器是不可能知道的
??? tomcat服務器需要執行我們編寫的java類就需要知道我們的java類有哪些方法,然后在適當的時間調用這些方法, 所以我們在寫的java程序要想運行在服務器上就必須要實現一個特殊的接口 Servlet.java
?
interface Servlet { ... }
??? Servlet 接口中就定義了可以被tomcat服務器調用的java方法
??? 通常來講,我們將實現了Servlet接口的java類稱之為 Servlet
???
??? 編寫好的Servlet需要web.xml文件中做配置才能供外界訪問
???
3. 實現第一個Servlet程序
3.1? 寫一個java類實現Servlet接口
package cn.itcast.servlet;
?
import java.io.*;
import javax.servlet.*;
?
public class HelloWorldServlet extends GenericServlet
{
???
??? // 實現 service 方法
??? public void service(ServletRequest request,ServletResponse response)
????????????? throws ServletException,java.io.IOException? {
??????
?????? // 向瀏覽器輸出一句話
?????? PrintWriter out = response.getWriter();
?????? out.write("hello world!!!");
?
??? }
?
??? public void init()throws ServletException {
?????? // 初始化 servlet 時被調用
?????? System.out.println("init()");
??? }
?
??? public void destroy() {
?????? // 摧毀 servlet 時被調用
?????? System.out.println("destroy()");
??? }
}
?
?
3.2.? 導入 servlet jar包
set classpath=%classpath%;D:\apache-tomcat-6.0.20\lib\servlet-api.jar
3.3. 編譯帶包的類
javac -d . HelloWorldServlet.java
3.4. 將包拷貝至 day05/WEB-INF/classes 目錄下? --> 發布 web 工程
?
3.5. 在 web.xml 文件中做映射
<!-- 做servlet映射 -->
??? <!-- servlet元素用于給一個類起別名 -->
??? <servlet>
?????? <servlet-name>HelloWorldServlet</servlet-name>
?????? <servlet-class>cn.itcast.servlet.HelloWorldServlet</servlet-class>
??? </servlet>
??? <!-- servlet-mapping元素用于將一個Servlet映射到url -->
??? <!—url必須以/開頭,/ 表示當前web應用即上下文路徑 -->
??? <servlet-mapping>
?????? <servlet-name>HelloWorldServlet</servlet-name>
?????? <url-pattern>/HelloWorldServlet</url-pattern>
??? </servlet-mapping>??
?
注意: servlet 對象一旦創建就會駐留在內存中,為所有的請求服務,什么時候銷毀
直到服務器關閉時或web應用被移除才銷毀
?
?
?
3.6. Servlet 執行流程圖
4. 用 eclipse 工具開發 Servlet
?4.1. 建一個 web project
?4.2. 在src下建包,創建一個java類實現Servlet接口
?4.3? 在 Webroot\WEB-INF\web.xml 做 servlet 映射
4.4? 配置 tomcat 服務器
????? window--> preferences --> tomcat6.x
4.5? 將web工程發布至tomcat 服務器
????? 發布的web應用名稱可以配置: web工程右鍵 選properties-->myeclipse-->web
????? 默認情況使用工程名作為發布后的web應用名
?
4.6 啟動tomcat服務器運行程序
?
5. HttpServlet對象
一般來講我們開發一個Servlet會去繼承 HttpServlet
在 eclipse 下開發Servlet 可以直接新建一個Servlet, 覆寫 HttpServlet 的 doGet和doPost方法
繼承 HttpServlet 的原因是: HttpServlet實現了service方法,將ServletRequst和ServletResponse
強轉為子類 HttpServletRequest和HttpServletResponse,讓我們用起來更加方便,同時,在service方法中,它判斷了請求方式,根據請求方式來調用 doGet 和 doPost
?
二、 Servlet 細節
1. * 號統配符
一個Servlet可以映射為多個路徑
在映射 Servlet 路徑時可以使用‘/*’ 或 ‘*.擴展名’ 的形式
注意: 兩者不能同時使用
????? /* 具有較高的優先級
?
2. load-on-startup 元素
<servlet>元素下可以配置< load-on-startup>子元素,
配置方式如下:
<load-on-startup>1</load-on-startup>
如果一個Servlet配置了該項,web容器會在web應用被加載時就初始化該Servlet,數字越小則越先初始化
?
3. tomcat\conf\web.xml
服務器下所有web 應用中的web.xml 都會自動繼承該文件中所有的配置
http://localhost:8080/day05/a.html???? a.html是資源名
上面的url訪問的url在web.xml文件中并沒有配置
此時會去訪問缺省的Servlet,在tomcat\conf\web.xml文件中就配置了一個缺省的DefaultServlet
?DefaultServlet幫我們去web應用下讀取 a.html 文件,并打給瀏覽器,如果沒有發送 404 頁面
也就說,我們通過ie訪問服務器訪問的都是 Servlet
?
4. Servlet線程安全問題
解決Servlet線程安全問題: 加上同步的鎖(lock)
?
?實現SingleThreadModel接口的Servlet
服務器會做判斷,當有請求過來,如果Servlet對象忙著呢,服務器會再創建一個Servlet對象為用戶
提供服務,如果Servlet閑置,就直接提供服務
這樣的方式實際上是回避了線程安全問題, 單線程訪問Servlet, 這樣的方式不可取
?
三、http協議
1.? tcp/ip 協議: 網絡通信協議(連接)
ip 協議 : 127.0.0.1 ip地址對應一臺計算機? (互聯網層)
tcp 高級協議: 三次握手, 發送請求、返回響應、傳輸數據 (傳輸層)
2. http 協議是建立在 tcp協議的基礎之上??? (應用層)
3. Http協議的版本 (w3c)
Http1.0 : 建立連接,發送一次請求就斷開
Http1.1? :建立連接,可以無限次發送請求
四、 http請求消息
內容包括一個請求行、若干消息頭、以及實體內容,其中的一些消息頭和實體內容都是可選的,消息頭和實體內容之間要用空行隔開。
?
請求行
POST /itcast/ HTTP/1.1?????
消息頭
Accept: image/gif, image/x-xbitmap, */*
Referer: http://localhost:8080/itcast/
Accept-Language: zh-CN,en-GB;q=0.8,ar-YE;q=0.7,ja-JP;q=0.5,de-CH;q=0.3,en-US;q=0.2
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6.5; CIBA)
Host: localhost:8080
Content-Length: 33
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=B0B3FB4FFB0315B3D3C620548DD4E1EB
空一行
消息體
username=zhangsan&password=123456
?
?
1. 請求行 GET /itcast/a.html HTTP/1.1
GET 為請求方式 : get方式請求參數跟在url后面/itcast/a.html?username=aaa&password=111
Post方式: 請求參數放在消息體中傳輸,相對安全,get大小限制1K,post 無數據量限制
?
2. 請求消息頭 : IE瀏覽器用于向服務器說明情況的(瀏覽器使用環境)
Accept: text/html,image/*??? ?????? 說明瀏覽器接受的數據類型
Accept-Charset: ISO-8859-1???????? 說明瀏覽器使用的字符編碼
Accept-Encoding: gzip,compress??? 說明瀏覽器支持的壓縮格式
Accept-Language: en-us,zh-cn ??????說明瀏覽器的語言環境
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???????????????????????????? 向服務器發送Cookie
Connection: close/Keep-Alive?? 說明連接狀態
Date: Tue, 11 Jul 2000 18:23:51 GMT??? 客戶端計算機時間
?
3. 實體內容(消息體)
瀏覽器向服務器發送的數據,例如上傳的文件、提交的表單等
?
五、http響應消息
內容包括一個狀態行、若干消息頭、以及實體內容 ,其中的一些消息頭和實體內容都是可選的,消息頭和實體內容之間要用空行隔開。
?
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=GB18030
Content-Length: 766
Date: Thu, 07 Jul 2011 15:40:02 GMT
?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <head>
??? <title>My JSP 'index.jsp' starting page</title>
? </head>
? <body>
??? hello
? </body>
</html>
?
?
1. 狀態行 HTTP/1.1 404 Not Found
協議版本: 目前普遍采用的都是http1.1
響應狀態碼: 說明服務器的響應狀態
常用狀態碼
| 狀態碼 | 含義 |
| 100~199 | 表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程 |
| 200~299 | 表示成功接收請求并已完成整個處理過程,常用200 |
| 300~399 | 為完成請求,客戶需進一步細化請求。例如,請求的資源已經移動一個新地址,常用302、307和304 |
| 400~499 | 客戶端的請求有錯誤,常用404 |
| 500~599 | 服務器端出現錯誤,常用 500 |
?
?200(ok) 302\307 請求重定向,你訪問我,我通知你訪問另一個資源?
304 通知瀏覽器去讀緩存? 404 找不到資源? 500 服務器程序出錯(服務器端的程序拋異常了)
?
2. 響應消息頭??? 服務器向瀏覽器說明情況(處理結果)
Location: http://www.it315.org/index.jsp ???通知瀏覽器去訪問另一個資源
Server:apache tomcat?????????????? 說明服務器
Content-Encoding: gzip ??????????????? 通知瀏覽器數據的壓縮格式
Content-Length: 80 ??????????????????? 通知瀏覽器發送數據的長度
Content-Language: zh-cn ?????????? 通知瀏覽器語言環境
Content-Type: text/html; charset=GB2312 ????? 通知瀏覽器文件的格式和編碼
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT? 告訴瀏覽器文件的修改時間
Refresh: 1;url=http://www.it315.org?????? 通知瀏覽器自動刷新
Content-Disposition: attachment; filename=aaa.zip??? 通知瀏覽器以下載的方式打開資源
Set-Cookie:SS=Q0=5Lb_nQ; path=/search? 發cookie
Expires: -1//3種禁止緩存的頭字段???????
Cache-Control: no-cache?
Pragma: no-cache?? ?
Connection: close/Keep-Alive?? ??? 連接狀態
Date: Tue, 11 Jul 2000 18:23:51 GMT?? 系統時間
?
3. 實體內容(響應消息體)
一般為服務器發送給ie瀏覽器的頁面數據
六、 https 協議
1. https 是一種加密協議 能保證數據的安全
2. 不對稱加密?? 對稱加密
?
3. https
1) 制作數字證書
keytool -genkey -alias tomcat -keyalg RSA
2) 將證書拷貝至 tomcat\conf
3) 修改server.xml 文件? 配置https 連接器
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
?????????????? maxThreads="150" scheme="https" secure="true"
?????????????? clientAuth="false" sslProtocol="TLS"
?????????? ?? keystoreFile="conf\.keystore" keystorePass="123456" />
4) 重啟服務器 打開ie訪問
https://localhost:8443
5) ie 中安裝證書
assdfasdfasdfasdfasdf
?
繼續瀏覽
?
查看證書
安裝證書
。。。。。。。
?
刪除證書:
?
?
?
總結
以上是生活随笔為你收集整理的04-Servlet入门+http协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 世界十大最强坦克,你知道有哪些吗
- 下一篇: 05-ServletconfigServ