Servlet方面
76、說一說Servlet的生命週期?
答:servlet有良好的生存期的定義,包括載入和執行個體化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet介面的init,service和destroy方法表達。 Servlet被伺服器執行個體化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將執行個體銷毀的時候調用其destroy方法。
與cgi的區別在於servlet處於伺服器處理序中,它通過多線程方式運行其service方法,一個執行個體可以服務於多個請求,並且其執行個體一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成後就銷毀,所以效率上低於servlet。
77、JAVA SERVLET API中forward() 與redirect()的區別?
答:前者僅是容器中控制權的轉向,在用戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求連結。這樣,從瀏覽器的地址欄中可以看到跳轉後的連結地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,並且,這樣也有助於隱藏實際的連結。在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用sendRedirect()方法。
78、Servlet的基本架構
答:
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 {
}
}
79、什麼情況下調用doGet()和doPost()?
答:Jsp頁面中的form標籤裡的method屬性為get時調用doGet(),為post時調用doPost()。
80、servlet的生命週期
答:web容器載入servlet,生命週期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。
81、如何現實servlet的單線程模式
答:<%@ page isThreadSafe="false"%>
82、頁面間對象傳遞的方法
答:request,session,application,cookie等
83、JSP和Servlet有哪些相同點和不同點,他們之間的聯絡是什嗎?
答:JSP是Servlet技術的擴充,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類servlet"。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java檔案中,並且完全從展示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個副檔名為.jsp的檔案。JSP側重於視圖,Servlet主要用於控制邏輯。
84、四種會話跟蹤技術
答:會話範圍ServletsJSP 頁面描述
page否是代表與一個頁面相關的對象和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是是代表與 Web 客戶機發出的一個請求相關的對象和屬性。一個請求可能跨越多個頁面,涉及多個 Web 組件(由於 forward 指令和 include 動作的關係)
session是是代表與用於某個 Web 客戶機的一個使用者體驗相關的對象和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求
application是是代表與整個 Web 應用程式相關的對象和屬性。這實質上是跨越整個 Web 應用程式,包括多個頁面、請求和會話的一個全域範圍
85、Request對象的主要方法
答:
setAttribute(String name,Object):設定名字為name的request的參數值
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):刪除請求中的一個屬性
86、我們在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;
}
87、Servlet執行時一般實現哪幾個方法?
答:
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()