javaWeb 常見面試題 20道,建議收藏

1、Tomcat 的優化經驗

答:去掉對 web.xml 的監視,把 jsp 提前編輯成 Servlet。
有富餘物理內存的情況,加大 tomcat 使用的 jvm 的內存

2、HTTP 請求的 GET 與 POST 方式的區別
答: Get:是以實體的方式得到由請求 URI 所指定資源的信息,如果請求 URI 只是一個數據產生過程,那麼最終要在響應實體中返回的是處理過程的結果所指向的資源,而不是處理過程的描述。

Post:用來向目的服務器發出請求,要求它接受被附在請求後的實體,並把它當作請求隊列中請求 URI 所指定資源的附加新子項,Post 被設計成用統一的方法實現下列功能:
1:對現有資源的解釋
2:向電子公告欄、新聞組、郵件列表或類似討論組發信息。
3:提交數據塊
4:通過附加操作來擴展數據庫

從上面描述可以看出,Get 是向服務器發索取數據的一種請求;而 Post 是向服務器提交數據的一種請求,要提交的數據位於信息頭後面的實體中。

4、說一說 Servlet 的生命週期?
答:servlet 有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet 接口的 init,service 和 destroy 方法表達。

Servlet 被服務器實例化後,容器運行其 init 方法,請求到達時運行其 service 方法,service 方法自動派遣運行與請求對應的 doXXX 方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其 destroy 方法。

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

5、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{
}
}

6、SERVLET API 中 forward() 與 redirect()的區別?
答:前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;

後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉後的鏈接地址。

所以,前者更加高效,在前者可以滿足需要時,儘量使用 forward()方法,並且,這樣也有助於隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用endRedirect()方法。

7、什麼情況下調用 doGet()和 doPost()?
Jsp 頁面中的 FORM 標籤裏的 method 屬性爲 get 時調用 doGet(),爲 post 時調用 doPost()。

8、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):刪除請求中的一個屬性

9、forward 和 redirect 的區別
forward 是服務器請求資源,服務器直接訪問目標地址的 URL,把那個 URL 的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。

redirect 就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛纔請求的所有參數重新請求,

所以 session,request 參數都可以獲取。 也可以這樣提問:Jsp 和 servlet 中的請求轉發和重定向分別如何實現?

10、request.getAttribute() 和 request.getParameter() 有何區別?
1.getParameter 得到的都是 String 類型的。或者是 http://a.jsp?id=123 中的 123,或者是某個表單提交過去的數據。
getAttribute 則可以是對象。

2.getParameter()是獲取 POST/GET 傳遞的參數值;
getAttribute()是獲取對象容器中的數據值;

3.getParameter:用於客戶端重定向時,即點擊了鏈接或提交按鈕時傳值用,即用於在用表單
或 url 重定向傳值時接收數據用。

getAttribute:用於服務器端重定向時,即在 sevlet 中使用了 forward 函數,或 struts 中使用了mapping.findForward。 getAttribute 只能收到程序用 setAttribute 傳過來的值。

4.getParameter()是獲取 POST/GET 傳遞的參數值;
getAttribute()是獲取 SESSION 的值;
另外,可以用 setAttribute,getAttribute 發送接收對象.而 getParameter 顯然只能傳字符串。

setAttribute 是應用服務器把這個對象放在該頁面所對應的一塊內存中去,當你的頁面服務器重定向到另一個頁面時,應用服務器會把這塊內存拷貝另一個頁面所對應的內存中。這樣getAttribute 就能取得你所設下的值,當然這種方法可以傳對象。 session 也一樣,只是對象在內存中的生命週期不一樣而已。 getParameter 只是應用服務器在分析你送上來的 request頁面的文本時,取得你設在表單或 url 重定向時的值。

5.getParameter 返回的是 String, 用於讀取提交的表單中的值;
getAttribute 返回的是 Object,需進行轉換,可用 setAttribute 設置成任意對象,使用很靈活,

11. jsp 有哪些內置對象?作用分別是什麼? 分別有什麼方法?
答:JSP 共有以下 9 個內置的對象:
request 用戶端請求,此請求會包含來自 GET/POST 請求的參數
response 網頁傳回用戶端的迴應
pageContext 網頁的屬性是在這裏管理
session 與請求有關的會話期
application servlet 正在執行的內容

out 用來傳送回應的輸出
config servlet 的構架部件
page JSP 網頁本身
exception 針對錯誤網頁,未捕捉的例外
request 表示 HttpServletRequest 對象。它包含了有關瀏覽器請求的信息,並且提供了幾個用於獲取 cookie,
header, 和 session 數據的有用的方法。
response表示HttpServletResponse對象,並提供了幾個用於設置送回 瀏覽器的響應的方法(如cookies, 頭信息等)
out 對象是 javax.jsp.JspWriter 的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。

pageContext 表示一個 javax.servlet.jsp.PageContext 對象。它是用於方便存取各種範圍的名字空間、servlet 相關的對象的 API,並且包裝了通用的 servlet 相關功能的方法。

session 表示一個請求的 javax.servlet.http.HttpSession 對象。Session 可以存貯用戶的狀態信息
applicaton 表示 一個 javax.servle.ServletContext 對象 。這 有助 於查找 有關 servlet 引擎和servlet 環境的信息
config 表示一個 javax.servlet.ServletConfig 對象。該對象用於存取 servlet 實例的初始化參數。
page 表示從該頁面產生的一個 servlet 實例

12. jsp 有哪些動作?作用分別是什麼?
(這個問題似乎不重要,不明白爲何有此題)
答:JSP 共有以下 6 種基本動作
jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個 JavaBean。
jsp:setProperty:設置 JavaBean 的屬性。
jsp:getProperty:輸出某個 JavaBean 的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型爲 Java 插件生成 OBJECT 或 EMBED 標記

13、JSP 的常用指令
isErrorPage(是否能使用 Exception 對象),isELIgnored(是否忽略表達式)

14. JSP 中動態 INCLUDE 與靜態 INCLUDE 的區別?
答:動態 INCLUDE 用 jsp:include 動作實現
< jsp:include page=included.jsp flush=true />它總是會檢查所含文件中的變化,適合用於包含動態頁面,
並且可以帶參數 靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面 <%@ include
file=included.htm %>

15、兩種跳轉方式分別是什麼?有什麼區別?
(下面的回答嚴重錯誤,應該是想問 forward 和 sendRedirect 的區別,畢竟出題的人不是專業搞文字藝術的人,可能表達能力並不見得很強,用詞不一定精準,加之其自身的技術面也可能存在一些問題,不一定真正將他的意思表達清楚了,嚴格意思上來講,一些題目可能根本就無人能答,所以,答題時要掌握主動,只要把自己知道的表達清楚就夠了,而不要去推敲原始題目的具體含義是什麼,不要一味想着是在答題)
答:有兩種,分別爲:
< jsp:include page=included.jsp flush=true>
<jsp:forward page= nextpage.jsp/>
前者頁面不會轉向 include 所指的頁面,只是顯示該頁的結果,主頁面還是原來的頁面。執行完後還會回來,相當於函數調用。並且可以帶參數.後者完全轉向新頁面,不會再回來。相當於 go to 語句。

16、頁面間對象傳遞的方法
request,session,application,cookie 等

17、JSP 和 Servlet 有哪些相同點和不同點,他們之間的聯繫是什麼?
JSP 是 Servlet 技術的擴展,本質上是 Servlet 的簡易方式,更強調應用的外表表達。JSP 編譯後是"類 servlet"。
Servlet 和 JSP 最主要的不同點在於,Servlet 的應用邏輯是在 Java 文件中,並且完全從表示層中的 HTML 裏分離開來。而 JSP 的情況是 Java 和 HTML 可以組合成一個擴展名爲.jsp 的文件。JSP 側重於視圖,Servlet 主要用於控制邏輯。

18、MVC 的各個部分都有那些技術來實現?如何實現?
答:MVC 是 Model-View-Controller 的簡寫。Model 代表的是應用的業務邏輯(通過 JavaBean,EJB 組件實現),
View 是應用的表示面(由 JSP 頁面產生),Controller 是提供應用的處理過程控制(一般是一個 Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。

19、我們在 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;
}

20、更新中…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章