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