Servlet和Jsp知識點總結

ServletJsp知識點總結

1. 什麼是servlet

答:簡單來講,servlet是開發動態網頁的一種技術。

【詳細版】HTML只能用來保存靜態內容,而通常情況下,靜態頁面很難滿足實際應用的需要,鑑於此,動態頁面被引入。所謂動態頁面,指的是能夠根據不同時間,不同用戶而顯示不同內容的頁面,例如常見的論壇、留言板、電子商務網站等都是通過動態頁面來實現的。那麼如何才能生成動態頁面呢?其中一種是採用公共網關接口CGI(Common Gateway Interface)CGI是一種用Perl腳本語言編寫的程序,可以用來生成動態頁面,而另一種方式則是採用Servlet技術。

什麼是Servlet呢?Servlet是採用Java語言編寫的服務器端程序,它運行於Web服務器中的Servlet容器中,其主要功能是提供請求/響應的Web服務模式,可以生成動態的Web內容,而這正是HTML所不具備的功能。

 

Servlet處理客戶端請求有哪些步驟?

答:

1)用戶通過單擊一個鏈接來向Servlet發起請求。

2)Web服務器接收到該請求後,會把該請求交給相應的容器來處理,當容器發現這是對Servlet發起的請求後,容器此時會創建兩個對象:HttpServletResponseHttpServletRequest

3)容器可以根據請求消息中的URL消息找到對應的Servlet,然後針對該請求創建一個單獨的線程,同時把第2)步中創建的兩個對象以參數的形式傳遞到新創建的線程中。

4)容器調用Servletservice()方法來完成對用戶請求的響應,service()方法會調用doPost()doGet()方法來完成具體的響應任務,同時把生成的動態頁面返回給容器。

5)容器把響應消息組裝成HTTP格式返回給客戶端。此時,這個線程運行結束,同時刪除第2)步創建的兩個對象。

 

 

Servlet處理請求的方式爲()

A. 以進程的方式  B.以程序的方式  C.以線程的方式  D.以響應的方式

答案:C

 

ServletCGI有什麼區別?

答:相較於CGIServlet處於服務器進程之中,它通過多線程方式運行其service()方法,一個實例可以服務於多個請求,並且其實例一般不會被銷燬,而CGI對每個請求都產生新的進程,服務完成後就銷燬,所以效率不如Servlet

doPost()方法和doGet()方法怎麼選擇?

答:Web容器處理HTTP請求的流程中可以看出,最終的請求都會交給Servlet來處理,而Servlet是通過調用service()方法來處理請求的,service()方法會根據不同的請求類型分別調用doPost()方法(用於處理POST請求)或doGet()方法(用於處理GET請求)來處理用戶請求,實現對客戶的響應。如果請求時GET,就調用doGet()方法;如果請求時POST,就調用doPost()方法。

 

簡述servlet的聲明週期?

答:創建、初始化、運行、死亡。

創建。通過調用Servlet的構造函數來創建一個Servlet實例。

初始化。通過調用Servletinit()方法來完成初始化工作,這個方法是在Servlet已被創建但向客戶端提供服務之前調用的,需要注意的是,init()方法只會被調用一次。

運行Servlet一旦被創建後,它就可以爲客戶端提供服務了。每當有新的客戶請求到來時,容器都會創建一個新的線程來處理該請求,接着會調用Servletservice()方法來完成客戶端的請求,當然,service()方法會根據請求的method屬性值的不同決定是調用doGet()方法還是調用doPost()方法來完成具體的響應。

死亡。容器在銷燬Servlet之前需要調用destroy()方法,讓Servlet自己釋放其佔用的系統資源,一旦destroy方法被調用,容器就不會再向這個Servlet發送任何請求消息了。如果容器需要這個Servlet,那麼就必須重新創建並初始化一個實例。需要注意的是,destory()方法只會被調用一次。

 

Servlet的生命週期中,容器只調用一次的方法是(CD

A.service  B.getServletConfig  C.init  D.destroy

 

JSP有哪些優點?

答:JSPSun公司倡導、許多企業參與建立起來的一種動態技術標準,從本質上來講,就是嵌入了Java代碼的HTML文件(但需要注意的是,JSP頁面最好少寫Java代碼)。在引入JSP之前,在Web應用程序中,所有業務邏輯和HTML的響應都是在Servlet中實現的,但在使用這種方式時,存在一個比較大的缺陷:必須把給用戶響應的視圖組裝成一個很長的HTML格式的字符串寫入println()方法中。所以,使用這種方式編程,在編寫一段很長的HTML字符串時非常容易出錯,而且代碼的可讀性也非常差,同時由於業務邏輯與視圖沒有分離,系統的可擴展性、可維護性都較差。

JSP的引入在一定程度上解決了Servlet存在的確定。其實現理念是讓每個Servlet只負責其對應的業務邏輯的處理,讓JSP來負責用戶的HTML顯示,因此實現了業務邏輯與視圖實現的分離,從而極大地提高了系統的可擴展性。

 

JSPServlet有何異同?

答:JSPServlet的相同點爲:JSPServlet的相同點爲:JSP可以看作一個特殊的Servlet,它只不過是對Servlet的擴展,只要是JSP可以完成的工作,使用Servlet都可以完成,例如生成動態頁面。由於JSP頁面最終要被轉換成Servlet來運行,因此處理請求實際上是編譯後的Servlet

JSPServlet的不同點爲:

(1)Servlet的實現方式是在Java中嵌入HTML代碼,編寫和修改HTML非常不方便,所以它比較適合做流程控制、業務處理;而JSP的實現方式爲在HTML中嵌入Java代碼,比較適合頁面的顯示。

(2)Servlet中沒有內置對象,JSP中的內置對象都是必須通過HttpServletRequest對象、HttpServletResponse對象以及HttpServlet對象得到。

 

按照MVC設計模式,JSP用於實現(B

A.Model  B.View  C.Controller  D.容器

 

Servletforwardredirect有什麼區別?

答:轉發:

a)地址欄不會改變

b)轉發只能轉發到當前web應用內的資源

c)在轉發過程中,可以把數據保存到request域對象中

 

重定向:

a)地址欄會改變,變成重定向到的地址。

b)重定向可以跳轉到當前web應用,或其他web應用,甚至是外部域名網站。

c在重定向的過程中,不能把數據保存到request中。

 

JSP的內置對象有哪些?

答:9個內置對象。request(請求對象)、response(響應對象)、pageContext(頁面上下對象)、session(會話對象)、application(應用程序對象)、out(輸出對象)、config(配置對象)、page(頁面對象)與exception(異常對象)。

 

 request對象主要有哪些方法?

答:request.getMethod()   用來獲取HTTP的請求方式,如getpost

request.getParameter(String name) 根據參數名來獲取參數值(只能獲取一個值的參數)

request.getRequestURI()   用來獲取發出請求字符串的客戶端地址

request.getCookies()   用來返回客戶端的所有Cookie對象,其結果是一個Cookie數組

request.setCharacterEncoding("utf-8")  設置參數查詢的編碼,該方法只能對請求實體內容的數據編碼起作用。POST提交的數據在實體內容中,所以該方法對POST方法有效!GET方法的參數放在URI後面,所以對GET方式無效!!!

 

response對象主要有哪些方法?

答:response.setStatus()  設置狀態碼

response.setHeader("name","value")  設置響應頭

response.sendRedirect("/day09/adv.html")  請求重定向

response.addCookie(cookie)  cookie發送給瀏覽器端

 

HttpServletRequest對象的()方法能夠獲取一個表單參數的值。

A.getQuaryString  B.getPathInfo()  C.getParameter()  D.getAttribute()

答案:C

 

Jsp的四個域對象是什麼?

:pageContext(page):只能在當前jsp頁面中使用(當前頁面)

request(request):只能在同一個請求中使用(轉發)          

session(session):只能在同一個會話(session對象)中使用(私有的)          

application(context):只能在同一個web應用中使用。(全局的)       

 

如果只希望在多個頁面間共享數據,可以使用()作用域。

A.requestsession      B.applicationsession

C.requestapplication   D.pageContextrequest

答案:A

 

cookiesession有什麼區別?

答:兩者區別:

Cookie:數據存儲在客戶端,減少了服務器端的壓力;安全性不好;存儲數據不能超過4k;只能存非中文字符串,不能存對象。

Session:數據存儲在服務器端,增加了服務器端的壓力;安全性好;存儲數據無大小限制;可以存中文字符串和對象。

 

 

 

發佈了90 篇原創文章 · 獲贊 86 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章