欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

JSP Servlet基礎知識(一)

系統 1721 0

下一頁»

1. ??? HTML 是靜態的, JSP 是動態的,交互式的,而且可由用戶定制。

?

2. ??? 服務器: 可能是物理主機(硬件),也可能是 Web 服務器應用(軟件)。

客戶: 指人類用戶,或瀏覽器應用。

Web 客戶允許用戶請求服務器上的某個資源,并且向用戶顯示請求結果。

?

3. ??? 服務器和客戶的通信

服務器和客戶之間對話的共同的語言是 HTTP 。

服務器使用 HTTP 向客戶發送信息。

4. ??? HTTP

請求: HTTP 方法( Get 、 Post ),要訪問的頁面,表單參數。

響應:狀態碼,內容類型(文本、圖片、 HTML 等),內容(具體的 HTML 、圖片等)。

?

5. ??? HTTP 請求: Get 請求和 Post 請求

Get 請求: 資源的路徑 URL 以及所有參數都會包括在 請求行 中。

??? 請求行: ? GET /select/selectBeer.jsp?color=dark&taste=malty HTTP/1.1

??? 請求首部: Host: www.wickedlysmart.com

?????????? ? User-Agent: Mozilla/5.0 ……

?????????? ? Accept: text/html , application/xml application./xhtml+xml ,

text/html;q=0.9

?????????? ? Accept-Language: en-us , en;q=0.5

?????????? ? Accept-Encoding: gizp deflate

??????? ? ? ?? Accept-Charset: ISO-8859-1 , utf;q=0.7 , *;q=0.7

? ????????? ? Keep-Alive:300

?????????? ? Connection: keep-alive

??? GET 請求,沒有體,參數只能放在請求行中,并且會顯示在瀏覽器的輸入地址中,不夠安全。

POST 請求: 又稱為“消息體”或“有效負載”,放在消息體中,長度不受限制。

??? 請求行: POST /advisor/selectBeer.do HTTP/1.1

? ?? 請求首部:同上

? ?? 消息體:(空行) color=dark & taste=malty

??? 簡單的超鏈接默認是 GET 方法,如: <a href=”http://www.baidu.com”>link</a>

??? Form 表單默認也是 GET 方法。

??? GET HEAD 、 PUT 是冪等的 ( 注: GET doGet() 不同, GET 方法是 HTTP 的, doGet() Servlet ) ; POST 不是冪等的。

?

6. ??? HTTP 響應

包括響應首部和體

首部告訴瀏覽器使用的協議,請求是否成功,以及體中放入內容是什么類型

??? HTTP/1.1 200 OK

??? Set-Cookie: jsessionID=adfiifeeni23499v99wernnwerr; Pat=/testEL

??? Content-Type: text/html (內容類型響應首部的值稱為 MIME 類型, MIME 類型告訴瀏覽器要接受的數據是什么類型,其值與 HTTP 請求首部中的 Accept 所列的值相關)

??? Content-Length:397

??? Date: Wed , 19 Nov 2003 03:25:40 GMT

??? Server: Apache-Coyote/1.1

??? Connection: close

體中包含了讓瀏覽器顯示的具體內容:

??? (空行)

??? ? <html> …… </html>

?

7. ??? URL(Uniform Resource Locators)

http://www.smart.com:80/beeradvice/select/beer1.html

協議 ? ????? 服務器 ???? 端口 ?? ?????? 路徑 ?? ?????? 資源

FTP 的端口是 31 , Telnet 23 SMTP 25 , Time 37 , POP3 110 , HTTPS 443

?

8. ??? Web 服務器不做的兩件事情

a) ????? 動態內容。 Web 服務器應用只提供靜態頁面,動態內容由 Web 服務器輔助應用( CGI )來完成。

b) ????? 在服務器上保存數據。 Web 服務器把這些功能轉給輔助應用進行處理。

?

9. ??? Web 容器

JSP Servlet基礎知識(一)

?

Web 服務器 (Apache) 得到一個指向 servlet 的請求,服務器不是把這個請求直接交給 servlet 本身,而是交給 Web 容器 (Tomcat) ,由 Web 容器調用 servlet 。

Web 容器管理和運行 servlet ,容器知道自己與 Web 服務器之間的協議, Web 容器控制者 servlet 的生命周期,容器會自動地為它接收每個 servlet 請求并創建一個新的線程, Web 容器負責把 JSP 代發翻譯成真正的 Java 代碼。

利用配置文件( web.xml )將 servlet 部署到容器

一個完全兼容的 J2EE 應用服務器必須有一個 Web 容器和一個 EJB 容器

JSP Servlet基礎知識(一)

?

Tomcat 是一個 Web 容器,而不是一個完整的 j2ee 應用服務器,因為 Tomcat 沒有 EJB 容器。

?

?

?

10. ??? JSP-Servlet 執行流程

??? 1) 瀏覽器把請求數據發送給容器

??? 2) 容器根據 URL 找到正確的 Servlet ,并把請求傳遞給這個 Servlet

??? 3) Servlet 調用輔助應用尋求幫助

??? 4) 這個輔助應用返回一個回答, Servlet 把這個回答增加到請求對象

??? 5) Servlet 把請求轉發給 JSP

??? 6) JSP 從請求對象得到回答

??? 7) JSP 為容器生成一個頁面

??? 8) 容器把這個頁面返回給客戶

?

?

JSP Servlet基礎知識(一)

?

?

11. ??? Servlet 的生命周期

?

JSP Servlet基礎知識(一)

12. ??? Servlet 的屬性和參數

a) ????? 屬性

有三種類型的屬性,應用上下文 (ServletContext) 、請求 (HttpRequest) 和會話 (HttpSession)

設置方法: setAttribute(String name,Object value)

獲取方法: getAttribute(String name), 返回類型是 Object

上下文 (ServletContext) 屬性 不是線程安全的,因為每個 Servlet 都可以訪問。讓上下文屬性線程安全的做法:

同步服務器方法 ( 即對 doGet() doPost() 方法添加 synchronized)

同步服務器方法意味著 servlet 中一次只能運行一個線程,但是并不能阻止其它 servlet JSP 訪問這個屬性。

同步上下文 ( synchronized(getServletContext()))

synchronized (getServletContext()){

?????????? ??? getServletContext().setAttribute( "foo" , "22" );

?????????? ??? getServletContext().setAttribute( "bar" , "42" );

}

會話屬性: 通常,一個客戶同時只有一個請求,就算多個 servlet 能在單獨的線程中訪問會話屬性,每個線程都是單獨的請求,所以,這時會話屬性是線程安全的。但是一個用戶同時有多個請求時 ( 用戶同時打開多個瀏覽器去訪問 ) ,會話屬性是非線程安全的,通過同步 HttpSession 來達到線程安全。代碼如下:

?????? ??? HttpSession session=request.getSession();

?????? ??? synchronized (session){

?????????? ??? session.setAttribute( "foo" , "22" );

?????????? ??? session.setAttribute( "bar" , "42" );

??? }

b) ????? 參數

應用上下文初始化參數、請求參數、 servlet 初始化參數

設置方法: servlet 初始化參數只能在 DD 中設置

獲取方法: getInitParameter(String name)

?

13. ??? Servlet 接受提交的參數

a) ????? 接受單個參數

String username=request.getParameter(“username”);

b) ????? 接受多個參數

String [] parameters=request.getParameterValues(“sizes”);//sizes 可以看做是表單中的復選框,如:

??? ?? ???? < form action = ”**.do” >

< intput type = checkbox name = sizes value = ”1” > 1

< intput type = checkbox name = sizes value = ”2” > 2

< intput type = checkbox name = sizes value = ”3” > 3

< input type = ”submit” >

</ from >

?

14. ??? ServletConfig ServletContext

a) ????? ServletConfig 對象

每個 servlet 都有一個 ServletConfig 對象,用于向 servlet 傳遞部署信息。

servlet 初始化之前不能使用 servlet 初始化參數。

ServletConfig 構建過程如下:

1) ????? 容器讀取當前 servlet DD(web.xml) ,包括 servlet 初始化參數 (<init-param>)

2) ????? 容器為這個 servlet 創建 (new) 一個新的 ServletConfig 實例

3) ????? 容器為這個 servlet 初始化參數創建一個 String / 值對

4) ????? 容器向 ServletConfig 提供名 / 值初始化參數的引用

5) ????? 容器創建 (new)serlvet 類的實例

6) ????? 容器調用 servlet init() 方法,傳入 ServletConfig 的引用

容器初始化一個 servlet 時,會為這個 servlet 創建一個唯一的 ServletConfig ,容器從 DD 中讀出 servlet 初始化參數,并把這些參數交給 ServletConfig ,然后把 ServletConfig 傳遞給 servlet init() 方法。

初始化參數:在 web.xml 配置文件中的 <servlet> 標簽中

??? ? ???????????? < init-param >

??? ????????????????? < param-name > adminEmail </ param-name >

??? ????????????????? < param-value > zzq_rj@163.com </ param-value >

??? ??? </ init-param >

?????? servlet 中調用: getServletConfig().getInitParameter(“adminEmail”);

b) ????? ServletContext 對象

每個 Web 應用才有一個 ServletContext ,用于訪問 Web 應用參數。 Web 應用中的各個 servlet JSP 都能訪問 ServletContext 。

初始化參數:在 web.xml 配置文件中的 <web-app> 標簽中 <servlet> 標簽外

????????????????? < context-param >

? ??????????????????? < param-name > contextname1 </ param-name >

? ??????????????????? < param-value > contextvalue1 </ param-value >

? ????????? </ context-param >

servlet 中調用: getServletContext().getInitParameter(“adminEmail”);

?????????? 或者 ? ServletContext context=getServletContext();

????????????? ? context.getInitParameter(“adminEmail”);

JSP 中調用:

?

15. ??? 使用響應

通常,使用響應只是向客戶發回數據,會調用兩個方法: setContentType() getWriter() 。當然,還可以使用響應設置其它首部、發送錯誤以及增加 cookie 。

response.setContentType(“application/jar”);

完成 I/O

ServletContext ctx=getServletContext();

InputStream is=ctx.getResourceAsStream(“/book.jar”);// 必須以“ / ”開頭,表示 Web 應用的根。

兩種輸出方式

字符形式: PrintWriter writer=response.getWriter();

?????? ? writer.println(“some text and HTML”);

字節流形式: ServletOutputStream out=response.getOutputStream();

?????????? ? out.write(aByteArray);

下一頁>> ?

JSP Servlet基礎知識(一)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 被摁着灌浓精囚禁高h1v1 | 亚洲一区国产二区 | 奇米影视7777久久精品人人爽 | 免费的污污网站 | 欧洲毛片| 亚洲第一黄色网 | 一级毛片视频免费观看 | 深夜福利久久久 | 国产精品久久久久久久四虎电影 | 99久久中文字幕伊人 | 二区欧美| 亚洲一区二区久久 | 一级大片免费看 | 欧美日韩亚洲综合另类ac | 亚洲天天做日日做天天看2018 | 亚州第一视频 | 日韩亚洲一区二区三区 | 亚洲一区二区免费看 | 激情啪啪网站 | 米奇7777狠狠狠狠视频 | 午夜成人在线视频 | 日本视频在线免费观看 | 中文字幕av网 | 九色九色九色在线综合888 | 日出水了视频大全 | 日韩a级片 | 国产成在线观看免费视频 | 欧美精品一区在线 | 国产精品久久嫩一区二区免费 | 91 中文字幕 | 久久精品视频在线观看榴莲视频 | 波多野结衣的一级片 | 亚洲狠狠干 | 免费看a网站| 国产一级毛片视频 | 一国产一级淫片a免费播放口 | 江苏少妇性BBB搡BBB爽爽爽 | 国产综合在线视频 | 2021国产精品一区二区在线 | 亚洲综合在线另类色区奇米 | av2014天堂网|