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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java -- Servlet面试题及答案(需更深入了解)

發布時間:2023/12/20 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java -- Servlet面试题及答案(需更深入了解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Servlet方面

1、說一說Servlet的生命周期?

Servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,servicedestroy方法表達。 Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGetdoPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。

cgi的區別在于Servlet處于服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成后就銷毀,所以效率上低于Servlet

2、JAVA SERVLET APIforward() redirect()的區別?

forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,其實客戶端瀏覽器只發了一次請求,所以它的地址欄中還是原來的地址,session,request參數都可以獲取。

redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,相當于客戶端瀏覽器發送了兩次請求。

3Servlet的基本架構

public class ServletName extends HttpServlet {

??public void doPost(HttpServletRequest request, HttpServletResponse response) throws

??????ServletException, IOException ?{

??????}

??public void doGet(HttpServletRequest request, HttpServletResponse response) throws

??????ServletException, IOException ?{

??????}

}

4、什么情況下調用doGet()doPost()

JSP頁面中的form標簽里的method屬性為get時調用doGet(),為post時調用doPost();超鏈接跳轉頁面時調用doGet()

5servlet的生命周期

web容器加載servlet,生命周期開始。通過調用servletinit()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servletdestroy()方法。

6、頁面間對象傳遞的方法

requestsessionapplicationcookie

7、JSPServlet有哪些相同點和不同點,他們之間的聯系是什么?

JSPServlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯后是"servlet"。ServletJSP最主要的不同點在于,Servlet的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是JavaHTML可以組合成一個擴展名為.jsp的文件。JSP側重于視圖,Servlet主要用于控制邏輯。

8、四種會話跟蹤技術

會話作用域ServletsJSP 頁面描述

1page否是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet JSP 頁面

2request是是代表與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由于 forward 指令和 include 動作的關系)

3session是是代表與用于某個 Web 客戶機的一個用戶體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求

4application是是代表與整個 Web 應用程序相關的對象和屬性。這實質上是跨越整個 Web 應用程序,包括多個頁面、請求和會話的一個全局作用域

9Request對象的主要方法

setAttribute(String name,Object):設置名字為namerequest的參數值

getAttribute(String name):返回由name指定的屬性值

getAttributeNames():返回request對象所有屬性的名字集合,結果是一個枚舉的實例

getCookies():返回客戶端的所有Cookie對象,結果是一個Cookie數組

getCharacterEncoding():返回請求中的字符編碼方式

getContentLength():返回請求的Body的長度

getHeader(String name):獲得HTTP協議定義的文件頭信息

getHeaders(String name):返回指定名字的request Header的所有值,結果是一個枚舉的實例

getHeaderNames():返回所以request Header的名字,結果是一個枚舉的實例

getInputStream():返回請求的輸入流,用于獲得請求中的數據

getMethod():獲得客戶端向服務器端傳送數據的方法

getParameter(String name):獲得客戶端傳送給服務器端的有name指定的參數值

getParameterNames():獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實例

getParameterValues(String name):獲得有name指定的參數的所有值

getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱

getQueryString():獲得查詢字符串

getRequestURI():獲取發出請求字符串的客戶端地址

getRemoteAddr():獲取客戶端的IP地址

getRemoteHost():獲取客戶端的名字

getSession([Boolean create]):返回和請求相關Session

getServerName():獲取服務器的名字

getServletPath():獲取客戶端所請求的腳本文件的路徑

getServerPort():獲取服務器的端口號

removeAttribute(String name):刪除請求中的一個屬性

10、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?

??Public String translate (String str) {

????String tempStr = "";

????try {

??????tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

??????tempStr = tempStr.trim();

????}

????catch (Exception e) {

??????System.err.println(e.getMessage());

????}

????return tempStr;

??}

11、Servlet執行時一般實現哪幾個方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

12、描述CookieSession的作用,區別和各自的應用范圍,Session工作原理。

1cookie 是一種發送到客戶瀏覽器的文本串句柄,并保存在客戶機硬盤上,可以用來在某個WEB站點會話間持久的保持數據。

2session其實指的就是訪問者從到達某個特定主頁到離開為止的那段時間。 Session其實是利用Cookie進行信息處理的,當用戶首先進行了請求后,服務端就在用戶瀏覽器上創建了一個Cookie,當這個Session結束時,其實就是意味著這個Cookie就過期了。

注:為這個用戶創建的Cookie的名稱是aspsessionid。這個Cookie的唯一目的就是為每一個用戶提供不同的身份認證。

3cookiesession的共同之處在于:cookiesession都是用來跟蹤瀏覽器用戶身份的會話方式。

4cookie session的區別是:cookie數據保存在客戶端,session數據保存在服務器端。

5session工作原理:session技術中所有的數據都保存在服務器上,客戶端每次請求服務器的時候會發送當前會話的sessionid,服務器根據當前sessionid判斷相應的用戶數據標志,以確定用戶是否登錄或具有某種權限。

13、什么是Servlet

Servlet是用來處理客戶端請求并產生動態網頁內容的Java類。Servlet主要是用來處理或者是存儲HTML表單提交的數據,產生動態內容,在無狀態的HTTP協議下管理狀態信息。

14、說一下Servlet的體系結構。

所有的Servlet都必須要實現的核心的接口是javax.servlet.Servlet。每一個Servlet都必須要直接或者是間接實現這個接口,或者是繼承javax.servlet.GenericServlet或者javax.servlet.http.HTTPServlet。最后,Servlet使用多線程可以并行的為多個請求服務。

15、AppletServlet有什么區別?

Applet是運行在客戶端主機的瀏覽器上的客戶端Java程序。而Servlet是運行在web服務器上的服務端的組件。applet可以使用用戶界面類,而Servlet沒有用戶界面,相反,Servlet是等待客戶端的HTTP請求,然后為請求產生響應。

16、GenericServletHttpServlet有什么區別?

GenericServlet是一個通用的協議無關的Servlet,它實現了ServletServletConfig接口。繼承自GenericServletServlet應該要覆蓋service()方法。最后,為了開發一個能用在網頁上服務于使用HTTP協議請求的Servlet,你的Servlet必須要繼承自HttpServlet。這里有Servlet的例子。

17、解釋下Servlet的生命周期。

對每一個客戶端的請求,Servlet引擎載入Servlet,調用它的init()方法,完成Servlet的初始化。然后,Servlet對象通過為每一個請求單獨調用service()方法來處理所有隨后來自客戶端的請求,最后,調用Servlet(譯者注:這里應該是Servlet而不是server)destroy()方法把Servlet刪除掉。

18doGet()方法和doPost()方法有什么區別?

doGetGET方法會把名值對追加在請求的URL后面。因為URL對字符數目有限制,進而限制了用在客戶端請求的參數值的數目。并且請求中的參數值是可見的,因此,敏感信息不能用這種方式傳遞。

doPOSTPOST方法通過把請求參數值放在請求體中來克服GET方法的限制,因此,可以發送的參數的數目是沒有限制的。最后,通過POST請求傳遞的敏感信息對外部客戶端是不可見的。

19、什么是Web應用程序?

Web應用程序是對Web或者是應用服務器的動態擴展。有兩種類型的Web應用:面向表現的和面向服務的。面向表現的Web應用程序會產生包含了很多種標記語言和動態內容的交互的web頁面作為對請求的響應。而面向服務的Web應用實現了Web服務的端點(endpoint)。一般來說,一個Web應用可以看成是一組安裝在服務器URL名稱空間的特定子集下面的Servlet的集合。

20、什么是服務端包含(Server Side Include)

服務端包含(SSI)是一種簡單的解釋型服務端腳本語言,大多數時候僅用在Web上,用servlet標簽嵌入進來。SSI最常用的場景把一個或多個文件包含到Web服務器的一個Web頁面中。當瀏覽器訪問Web頁面的時候,Web服務器會用對應的servlet產生的文本來替換Web頁面中的servlet標簽。

21、什么是Servlet(Servlet Chaining)

Servlet鏈是把一個Servlet的輸出發送給另一個Servlet的方法。第二個Servlet的輸出可以發送給第三個Servlet,依次類推。鏈條上最后一個Servlet負責把響應發送給客戶端。

22、如何知道是哪一個客戶端的機器正在請求你的Servlet

ServletRequest類可以找出客戶端機器的IP地址或者是主機名。getRemoteAddr()方法獲取客戶端主機的IP地址,getRemoteHost()可以獲取主機名。看下這里的例子。

23HTTP響應的結構是怎么樣的?

HTTP響應由三個部分組成:

狀態碼(Status Code):描述了響應的狀態??梢杂脕頇z查是否成功的完成了請求。請求失敗的情況下,狀態碼可用來找出失敗的原因。如果Servlet沒有返回狀態碼,默認會返回成功的狀態碼HttpServletResponse.SC_OK。

HTTP頭部(HTTP Header):它們包含了更多關于響應的信息。比如:頭部可以指定認為響應過期的過期日期,或者是指定用來給用戶安全的傳輸實體內容的編碼格式。如何在Serlet中檢索HTTP的頭部看這里。

主體(Body):它包含了響應的內容。它可以包含HTML代碼,圖片,等等。主體是由傳輸在HTTP消息中緊跟在頭部后面的數據字節組成的。

24、什么是cookiesessioncookie有什么區別?

cookieWeb服務器發送給瀏覽器的一塊信息。瀏覽器會在本地文件中給每一個Web服務器存儲cookie。以后瀏覽器在給特定的Web服務器發請求的時候,同時會發送所有為該服務器存儲的cookie。下面列出了sessioncookie的區別:

? 無論客戶端瀏覽器做怎么樣的設置,session都應該能正常工作。客戶端可以選擇禁用cookie,但是,session仍然是能夠工作的,因為客戶端無法禁用服務端的session。

? 在存儲的數據量方面sessioncookies也是不一樣的。session能夠存儲任意的Java對象,cookie只能存儲String類型的對象。

25、瀏覽器和Servlet通信使用的是什么協議?

瀏覽器和Servlet通信使用的是HTTP協議。

26、什么是HTTP隧道?

HTTP隧道是一種利用HTTP或者是HTTPS把多種網絡協議封裝起來進行通信的技術。因此,HTTP協議扮演了一個打通用于通信的網絡協議的管道的包裝器的角色。把其他協議的請求掩蓋成HTTP的請求就是HTTP隧道。

27、sendRedirect()forward()方法有什么區別?

sendRedirect()方法會創建一個新的請求,而forward()方法只是把請求轉發到一個新的目標上。重定向(redirect)以后,之前請求作用域范圍以內的對象就失效了,因為會產生一個新的請求,而轉發(forwarding)以后,之前請求作用域范圍以內的對象還是能訪問的。一般認為sendRedirect()forward()要慢。

28、什么是URL編碼和URL解碼?

URL編碼是負責把URL里面的空格和其他的特殊字符替換成對應的十六進制表示,反之就是解碼。

JSP

29、什么是Scriptlets

JSP技術中,scriptlet是嵌入在JSP頁面中的一段Java代碼。scriptlet是位于標簽內部的所有的東西,在標簽與標簽之間,用戶可以添加任意有效的scriplet。

30、聲明(Decalaration)在哪里?

聲明跟Java中的變量聲明很相似,它用來聲明隨后要被表達式或者scriptlet使用的變量。添加的聲明必須要用開始和結束標簽包起來。

31、什么是表達式(Expression)

【列表很長,可以分上、中、下發布】

JSP表達式是Web服務器把腳本語言表達式的值轉化成一個String對象,插入到返回給客戶端的數據流中。表達式是在<%=%>這兩個標簽之間定義的。

32、隱含對象是什么意思?有哪些隱含對象?

JSP隱含對象是頁面中的一些Java對象,JSP容器讓這些Java對象可以為開發者所使用。開發者不用明確的聲明就可以直接使用他們。JSP隱含對象也叫做預定義變量。下面列出了JSP頁面中的隱含對象:

? application

? page

? request

? response

? session

? exception

? out

? config

? pageContext

?

總結

以上是生活随笔為你收集整理的Java -- Servlet面试题及答案(需更深入了解)的全部內容,希望文章能夠幫你解決所遇到的問題。

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