日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

04-Servlet入门+http协议

發布時間:2024/9/27 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

響應狀態碼: 說明服務器的響應狀態

常用狀態碼

狀態碼

含義

100199

表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程

200299

表示成功接收請求并已完成整個處理過程,常用200

300399

為完成請求,客戶需進一步細化請求。例如,請求的資源已經移動一個新地址,常用302307304

400499

客戶端的請求有錯誤,常用404

500599

服務器端出現錯誤,常用 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协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。