當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Java知识整理——ServletJSP
生活随笔
收集整理的這篇文章主要介紹了
Java知识整理——ServletJSP
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Servlet
servlet是用來處理客戶端請求并生成動態(tài)web內(nèi)容的Java程序語言類。Servlets大多是用來處理或者存儲HTML表單提交的數(shù)據(jù),提供動態(tài)內(nèi)容和管理那些不在HTTP無狀態(tài)協(xié)議中的狀態(tài)信息。
核心抽象概念肯定是所有servlet必須實(shí)現(xiàn) javax.servlet.Servlet 接口。 每個 servlet 必須直接或者間接實(shí)現(xiàn)這個接口, 也可以繼承于 javax.servlet.GenericServlet 或者javax.servlet.http.HTTPServlet。最后想提的是,每個 servlet 能夠使用多線程服務(wù)多個請求。
一個 Applet 是一個跑在客戶機(jī)器的 網(wǎng)頁瀏覽器 里面的 客戶端java程序。相反,一個 servlet 是跑在網(wǎng)頁服務(wù)器的服務(wù)的容器。一個 applet 能使用用戶界面class, 而一個 servlet 不能夠有一個用戶界面。相反,一個servlet 等待客戶端的 HTTP 請求并為每一個請求生成一個響應(yīng)。
GenericServlet 是一個實(shí)現(xiàn)了Servlet 和 ServletConfig 接口的通用的協(xié)議無關(guān)的 servlet . 那些繼承于GenericServlet 類的 servlet 將重寫 service 方法 。最后想提的是,為了給Web用戶開發(fā)一個使用HTTP協(xié)議服務(wù)的HTTP servlet, 你的 servlet 必須改為繼承于 HttpServlet 。查看Servlet的示例 。
對每一個客戶端的請求,這個Servlet引擎加載servlet和調(diào)用它的init方法,以便在servlet初始化。然后, Servlet對象處理所有從客戶端來的后續(xù)請求,通過為每個請求單獨(dú)調(diào)用服務(wù)的方法。最后,該servlet調(diào)用服務(wù)器的destroy方法。
doGet : GET方法附加請求的URL的名稱 - 值對。因此,存在客戶端的請求字符數(shù)量的限制。此外,該請求的參數(shù)值為可見,因此,如果有敏感信息不能采用這種方式。
doPost: POST方法克服了GET請求的限制,將發(fā)送請求的值置于body里。此外,發(fā)送值的數(shù)量沒有限制。最后,通過POST請求傳遞的敏感信息是不可見的
web應(yīng)用是web服務(wù)的延伸. 主要有兩種類型:面向視覺的和面向服務(wù)的. 面向視覺型的應(yīng)用通過編輯語言來動態(tài)展示交互頁面. 面向應(yīng)用的則提供了后端的service.總的來說,就是一堆置于 server’s URL明明空間下的servlets.
服務(wù)端包含是服務(wù)端的一種簡單腳本語言,主要應(yīng)用在Web方面,置于servlet標(biāo)簽中. 最常用的地方就是在網(wǎng)頁中引入一個或多個文件. 當(dāng)瀏覽器加載頁面時,使用servlet產(chǎn)生的超文本替換其標(biāo)簽.
Servlet 鏈?zhǔn)侵笇⑸弦粋€servlet的結(jié)果傳到下一個.第二個的結(jié)構(gòu)又可以傳到第三個. 最后的servlet負(fù)責(zé)將響應(yīng)回復(fù)給客戶端.
ServletRequest類可以獲取客戶端的IP地址或主機(jī)名. getRemoteAddr()獲取IP getRemoteHost()獲取主機(jī)名. 示例如下 here.
HTTP response 包括了三個部分:
Status Code: 描述了這次回應(yīng)的狀況. 它可以用來檢查這次請求是否成功完成. 一旦請求失敗了, 這個status code可以用來尋找原因. 如果你的 servlet 沒有返回一個status code, 默認(rèn)就會返回成功的status code, HttpServletResponse.SC_OK.
HTTP Headers: 它包含了response的更多信息.舉個例子,headers可以反應(yīng)response的訪問date/time, 或者是用于將實(shí)體安全地傳送到用戶的編碼形式。可以閱讀 how to retrieve headers in Servlet here.
Body: 它是response的具體內(nèi)容. 可能包括HTML內(nèi)容,比如圖片。Body包括了緊接Header發(fā)送的HTTP事務(wù)消息數(shù)據(jù)字節(jié)。
Cookie是Web服務(wù)器發(fā)送到瀏覽器的一小塊信息,瀏覽器為每個Web服務(wù)器在本地文件中存儲cookie。 在以后的請求里, 瀏覽器對特定的Web服務(wù)器,將request和所有特定的Web服務(wù)器的cookie一起發(fā)送。Session和Cookie之間的區(qū)別如下:
Session無論在客戶端瀏覽器的設(shè)置都可以工作。客戶端可以選擇禁用cookies。然而,Session仍然可以工作,因?yàn)榭蛻舳藳]有能力在服務(wù)器端禁用Session。
Session和cookie也有不同的信息存儲量。 HTTP會話能夠存儲任何Java對象,而一個cookie只能保存String對象。
HTTP協(xié)議.
通道是指使用 HTTP或 HTTPS 封裝其它的網(wǎng)絡(luò)協(xié)議. HTTP包裝了其他的網(wǎng)絡(luò)通信協(xié)議. 其它協(xié)議通過HTTP來發(fā)送請求的過程就使用了通道.
sendRedirect創(chuàng)建一個新的請求, forward只是將請求轉(zhuǎn)發(fā).之前請求中包含的對象在redirect后將不可用, 因?yàn)楫a(chǎn)生了一個新的請求. 但是 forwarding不受此限制.通常來說,sendRedirect 比 forward 方法慢一些.
URL編碼就是替換其中的空格和特殊字符, 變成相應(yīng)的Hex碼.解碼就是反向操作。
JSP
一個JSP頁面是一個文本文檔,包含了兩種類型的文本:靜態(tài)數(shù)據(jù)和JSP元素。靜態(tài)數(shù)據(jù)可以以任何一種基于文本的格式表達(dá),比如HTML或者XML。JSP是一種混合了靜態(tài)內(nèi)容與動態(tài)生成內(nèi)容的技術(shù)。查看JSP例子
一個JSP請求的到來,瀏覽器首先以一個jsp擴(kuò)展的文件名來請求一個頁面。然后,Web Server讀取到該請求,使用JSP編譯器將JSP頁面轉(zhuǎn)換為一個servlet類。注意JSP文件只在該頁面的第一次請求或者JSP文件已經(jīng)改變時才編譯。生成的servlet類被調(diào)用,去處理瀏覽器的請求。一旦請求處理完,servlet會向客戶端返回一個相應(yīng)。查看如何獲取JSP請求中的參數(shù)
使用JSP技術(shù)有以下優(yōu)勢:
JSP網(wǎng)頁被動態(tài)的編譯,因此開發(fā)者很容易更新當(dāng)前代碼。
JSP網(wǎng)頁可預(yù)編譯。
JSP網(wǎng)頁能容易的組合成靜態(tài)模版,包括HTML XML片段,且代碼可形成動態(tài)內(nèi)容。
開發(fā)者能提供自定義的JSP標(biāo)簽庫,且使用類XML語法訪問。
開發(fā)者可以在組件級別做邏輯上的改變,但是不能使用程序邏輯編輯個別的網(wǎng)頁。
指令是JSP引擎所處理的命令,當(dāng)網(wǎng)頁被編譯成小程序時,指令用于去設(shè)置頁面級別的命令,從外部文件插入數(shù)據(jù),指定自定義的標(biāo)簽庫。指令被包括在<%@ 和%>內(nèi)。指令的類型分為:
包含指令:用于包含文件,和當(dāng)用頁面合并文件內(nèi)容。
頁面指令:用于定義JSP頁面的具體屬性,比如錯誤頁面和緩沖池。
標(biāo)簽庫:用于聲明頁面中使用到的自定義標(biāo)簽庫。
JSP的actions是使用XML語法結(jié)構(gòu)來控制Servlet引擎的行為。JSP的actions是在當(dāng)JSP頁面請求的時候才執(zhí)行。它們會動態(tài)插入一個文件中,再利用JavaBeans的組件,轉(zhuǎn)發(fā)給用戶到另一個頁面,或者生成帶Java插件的HTML頁面。以下是一些可以操作的actions:
jsp:include- 當(dāng)JSP頁面被請求的時候,包含了一個文件。
jsp:useBean- 尋找或者實(shí)例化一個JavaBean。
jsp:setProperty- 設(shè)置JavaBean的屬性。
jsp:getProperty- 得到JavaBean的屬性。
jsp:forward- 轉(zhuǎn)發(fā)請求到新的頁面。
jsp:plugin- 生成特定瀏覽器的代碼。
在Java Server Page(JSP)技術(shù)中,scriptlet是嵌入在JSP頁面的其中一塊Java代碼。scriptlet是標(biāo)簽內(nèi)的任何東西。在這些標(biāo)簽之間,用戶可以添加任何有效的scriptlet。
聲明類似于Java中的變量聲明。聲明是為表達(dá)式或者scriptlets后續(xù)的使用而聲明的變量。添加一個聲明,你必須在你的聲明中使用序列。
JSP表達(dá)式是把一個腳本語言表達(dá)式的值插入進(jìn)來,轉(zhuǎn)換成字符串,進(jìn)入數(shù)據(jù)流之后再通過web服務(wù)器返回給客戶端。表達(dá)式的定義是在<% = 和 %>標(biāo)簽之間。
JSP隱式對象是指JSP容器在每頁中提供給開發(fā)人員的Java對象。開發(fā)人員可以直接調(diào)用他們,而不需要任何顯示聲明。JSP隱式對象也被稱為預(yù)定義變量。以下對象都是在JSP頁面中隱式存在的:
application
page
request
response
session
exception
out
config
pageContext
總結(jié)
以上是生活随笔為你收集整理的Java知识整理——ServletJSP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java知识整理——垃圾回收
- 下一篇: Spring工作原理分析