已經大三了,開始為明年的工作而奔波,這裡收集一些面試和筆試的題目。下面是jsp的一些基礎知識。
jsp(Java Server Pages)是在傳統的網頁HTML檔案中插入java程式段和jsp標記,從而形成jsp檔案,類似於ASP。用jsp開發的web應用的好處就和java一樣,是跨平台的。jsp的特點就是所有的操作都是在伺服器端執行,用戶端得到的僅僅是結果,這樣就能大大降低了對客戶瀏覽器的要求,即使客戶瀏覽器不支援java,也可以訪問jsp網頁。
介紹完jsp後,接下來就是一些常見的jsp面試和筆試題目。
1.jsp:include,jsp:forward兩種跳轉方式分別是什嗎?有什麼區別?
首先必須知道,jsp:include和jsp:forward是jsp動作,即一系列可以調用內建於網路伺服器中的功能的XML標籤。
<jsp:include>:Java Servlet 暫時接管指定的jsp頁面的請求和響應,當處理完該jsp頁面後就馬上把控制權交還給當前jsp頁。這樣的好處就是jsp代碼可以在多個jsp頁中共用而不用複製,這就像是我們在javascript中提倡使用js檔案的原因。
<jsp:forward>:用於處理對另一個jsp或servlet的請求和響應,控制權永遠不會交還給當前jsp頁,因此後面的部分永遠不會被執行。
常用的跳轉頁面有兩種方式:
(1)forward跳轉:
像是這樣:
<jsp:forward page="跳轉頁面"/>
採用這種方式,只需要伺服器端跳轉,地址欄不改變。執行到跳躍陳述式後馬上無條件跳轉,之後的代碼不再執行,所以我們在跳轉前一定要記得釋放全部資源。request設定的屬性在跳轉後的頁面仍可以使用,傳遞參數是通過<jsp:param name="參數名" value="參數值"/>進行傳遞。
(2)response跳轉:
像是這樣:
response.sendRedirect("跳轉頁面地址");
採用這種方式,用戶端跳轉,地址欄也會改變。所有的代碼執行完畢後跳轉,跳轉後的頁面不能使用上一個頁面的request屬性,使用地址修正傳遞參數。像是這樣:
response.sendRedirect("URL?參數名=參數值")
2.簡述jsp的內建對象及作用
jsp有九大內建對象,它們是可以不加聲明就在jsp頁面指令碼(java程式片和java運算式)中使用的成員變數。內建對象有以下特點:
(1)由jsp規範提供,不用編寫者執行個體化;
(2)通過Web容器實現和管理;
(3)所有jsp頁面均可以使用;
(4)只有在指令碼元素的運算式或程式碼片段中才可以使用,像是這樣:<%=內建對象%>或<%內建對象%>
接下來就是分別簡單介紹一下各個內建對象:
(1)輸入/輸出對象
a.request對象(Javax.servlet.http.HttpServletRequest)
包含了有關瀏覽器請求的資訊,通過該對象可以獲得請求中的頭資訊,Cookie和請求參數,也就是封裝了用戶端請求資訊的對象。
b.response對象(javax.servlet.http.HttpServletResponse)
作為jsp頁面處理結果返回給使用者的響應儲存在該對象中,並提供了設定響應內容,回應標頭以及重新導向的方法,像是Cookie,頭資訊等。
c.out對象(javax.servlet.jsp.jspWriter)
用於將內容寫入jsp頁面執行個體的輸出資料流中,提供了用於向瀏覽器回送輸出結果的方法。
(2)通訊控制對象
a.pageContext對象(javax.servlet.jsp.PageContext)
描述了當前jsp頁面的運行環境,可以返回jsp頁面的其他隱式對象及其屬性的訪問,還實現了將控制權從當前頁面傳輸至其他頁面的方法。使用該對象,我們可以訪問jsp頁面所有的對象及命名空間,像是本頁所有的session,或者本頁面所在的application的某一屬性值。
b.session對象(javax.servlet.http.HttpSession)
會話對象指的是用戶端與伺服器的一次會話並儲存有關此會話的資訊,可以將屬性賦給另一個會話,每個屬性都有名稱和值。所謂的會話對象主要用於儲存和檢索屬性值。
c.application對象(javax.servlet.ServletContext)
儲存了運行jsp頁面的servlet以及在同一應用程式中的任何Web組件的上下文資訊。它實現了使用者間的資料共用,可存放全域變數。它存活於伺服器的啟動到關閉期間,這樣的好處就是在使用者的前後串連或不同使用者間的串連中,可以對此對象的同一屬性進行操作。但正如全域變數的壞處一樣,我們在任何地方對此對象屬性的操作,都將影響到其他使用者的訪問。
(3)Servlet對象
a.page對象(java.lang.object)
表示當前jsp頁面的servlet執行個體,相當於類中的this指標。
b.config對象(javax.servlet.ServletConfig)
該對象用於存取servlet執行個體的初始化參數(通過屬性名稱和屬性值構成)以及伺服器的有關資訊(通過傳遞一個ServletContext對象)。
(4)錯誤處理對象---exception對象(java.lang.Throwable)
在某個頁面拋出異常時,將轉寄至jsp錯誤頁面,提供此對象是為了在jsp中處理錯誤,只有在錯誤頁面中才可使用,像是這樣:
<%@page isErrorPage=“true”%>
這是必須的,否則就無法進行編譯。
3.Servlet的基本架構
先簡單介紹一下Servlet。Servlet是伺服器端的java應用程式,它起源於java applet。它具有獨立於平台和協議的特性,可以產生動態web頁面。它擔當客戶請求(Web瀏覽器或其他Http客戶程式)與伺服器響應(Http伺服器上的資料庫或應用程式)的中介層。
Servlet的基本架構可以簡單的歸納為下面的過程:
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SomeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 使用“request”讀取和請求有關的資訊(比如Cookies) // 和表單資料 // 使用“response”指定HTTP應答狀態碼和應答頭 // (比如指定內容類型,設定Cookie) PrintWriter out = response.getWriter(); // 使用 "out"把應答內容發送到瀏覽器 } }
如果我們要想使某個類成為Servlet,就必須使它繼承自HttpServlet,根據資料是通過GET還是POST發送選擇覆蓋doGet,doPost方法之一或全部。HttpServletResponse除了提供用於指定HTTP應答狀態,應答頭的方法之外,最重要的是它提供了一個用於向用戶端發送資料的PrintWriter。對於簡單的Servlet,它的大部分工作都是通過println語句產生向用戶端發送的頁面。
使用Servlet的大概過程像是下面這樣:
Server建立一個Servlet的執行個體---Server調用Servlet的init()方法---一個用戶端的請求到達Server---Server建立一個請求對象---Server建立一個響應對象---Server啟用Servlet的service()方法,傳遞請求和響應對象作為參數---service()方法獲得關於請求對象的資訊,處理請求,訪問其他資源,獲得需要的資訊。
service()方法使用響應對象的方法,將響應傳回Server,最終到達用戶端。service()方法可能啟用其他方法以處理請求,如doGet()或doPost()或程式員自己開發的新方法。
4.getServletContext()和getServletConfig()的意思
(1)getServletConfig()
在servlet初始化時,容器傳遞進來一個ServletConfig對象並儲存在servlet執行個體中,該對象允許訪問兩項內容:初始化參數和ServletContext對象,前者通常由容器在檔案中指定。它允許在運行時向servlet傳遞有關調度資訊,更重要的是,可以讓servlet在任何時候獲得該對象及配置資訊,獲得的是<servlet><init-param>配置的參數。
(2)getServletContext()
一個Servlet可以使用getServletContext()方法得到web應用的servletContext,該方法同樣可以獲得相關配置資訊,但是該配置資訊是<context-param>配置的參數。
getServletContext()應用於整個web App,而getServletConfig()僅應用於當前Servlet。但是ServletConfig對象擁有ServletContext的引用,所以可以通過getServletConfig()來獲得web App的。
5.filter的作用是什麼?主要實現什麼方法?request()和response()全稱是什麼?
filter使使用者可以改變一個request和修改一個response,它的實質意義是"servlet chainning"(servlet鏈)。
一個filter的功能包括:
(1)在servlet被調用前截獲;
(2)在servlet被調用前檢查servlet request;
(3)根據需要修改request頭和request資料;
(4)根據需要修改response頭和response資料;
(5)在servlet被調用後截獲。
主要實現三個方法:init(FilterConfig config),doFilter(ServletRequest request, ServletResponse response, FilterChain chain)和destroy()。
request的全稱是 HttpServletRequest,response的全稱是 HttpServletResponse 。