1. 程式人生 > >校招面試之Java web部分

校招面試之Java web部分

以下內容轉載自某老師整理筆記。有需要的可以看一下

1.0 HTTP請求的GET與POST方式的區別
        1)get用來請求資源,post用來提交資源
        2)get引數在url上,不安全,post相對安全
        3)get傳遞資料量長度受url長度限制,post沒有限制
等等

這裡寫圖片描述

2.0 解釋一下什麼是servlet
        【答】servlet是在伺服器上執行以處理客戶端請求並做出響應的程式。servlet有良好的生存期的定義,包括載入和例項化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet介面的init,service和destroy方法表達。

2.1 說一說Servlet的生命週期?
        servlet有良好的生存期的定義,包括載入和例項化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet介面的init,service和destroy方法表達。
        當客戶第一次請求時,首先判斷是否存在Servlet物件,若不存在,則由Web容器建立物件,而後呼叫init()方法對其初始化,此初始化方法在整個Servlet生命週期中只調用一次。
        完成Servlet物件的建立和例項化之後,Web容器會呼叫Servlet物件的service()方法來處理請求。根據請求的不同調用不同的do***()方法。


        當Web容器關閉或者Servlet物件要從容器中被刪除時,會自動呼叫destory()方法。

2.2 Servlet的基本架構

public class ServletDemo extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doGet(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}
	
}

3.0 SERVLET API中forward() 與redirect()的區別?
        forward,稱為轉發,也可稱“直接請求轉發“,而Redirect,也稱為“重定向”,也可稱為“間接請求轉發“
        前者僅是容器中控制權的轉向,在客戶端瀏覽器位址列中不會顯示出轉向後的地址;後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求連結。這樣,從瀏覽器的位址列中可以看到跳轉後的連結地址。所以,前者更加高效,在前者可以滿足需要時,儘量使用forward()方法,並且,這樣也有助於隱藏實際的連結。在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用
sendRedirect()方法。

        【兩者最本的區別:】Forward:客戶端和瀏覽器只發出一次請求。Redirect:實際是兩次HTTP請求,伺服器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。
        舉個通俗的例子:
        直接轉發就相當於:“A找B借錢,B說沒有,B去找C借,借到借不到都會把訊息傳遞給A。此時A是不知道B去找C 借錢的。A只找了B一次”;
        間接轉發就相當於:“A找B借錢,B說沒有,讓A去找C借。A找了B,又去找了C。找了兩次”。

4.0 什麼情況下呼叫doGet()和doPost()?
        呼叫doGet():直接位址列輸入URL,或者超連結,或者form的method為預設或get。
        呼叫doPost():Form的method為post時。

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

6.0 request.getParameter()和request.getAttribute() 有何區別?
        1)賦值方式不一樣,前者是客戶端如瀏覽器端將請求引數值送給伺服器端,而後者則是在請求到達伺服器端之後,在伺服器進行存放進去
        2)兩者的返回值型別不一樣,前者永遠返回字串,後者返回任意物件

7.0 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例項 

8.0jsp有哪些動作?作用分別是什麼? (這個問題似乎不重要,不明白為何有此題)

答:JSP共有以下6種基本動作 
	jsp:include:在頁面被請求的時候引入一個檔案。 
	jsp:useBean:尋找或者例項化一個JavaBean。 
	jsp:setProperty:設定JavaBean的屬性。 
	jsp:getProperty:輸出某個JavaBean的屬性。 
	jsp:forward:把請求轉到一個新的頁面。 
	jsp:plugin:根據瀏覽器型別為Java外掛生成OBJECT或EMBED標記

10 JSP中動態INCLUDE與靜態INCLUDE的區別?
        1. 動態包含用的元素是page,而且有兩種形式。靜態包含用的是file,只有一種形式。
        2. 生成的檔案不同,靜態的包含是將兩個jsp檔案二合一,生成一個以包含頁面命名的servlet和class檔案,動態包含的兩個jsp檔案各自生成自己的servlet和class檔案。
        3. 動態包含是可以通過ur向被包含的檔案傳輸變數。被包含的檔案可以動態的接收傳輸的變數,也就是為什麼說“動態”。而靜態包含是不能夠傳遞變數。被包含的檔案不能接收傳輸的變數。適用於包含靜態頁面
        另一種簡答說法:
        1. 動態INCLUDE用jsp:include動作實現<jsp:include page = included.jsp flush = “true”>它總會檢查所含檔案中的變化,適用於動態頁面並且可以帶引數。
        2. 靜態INCLUDE用include偽碼實現,定不會檢查所含檔案的變化,適用於包含靜態頁面<%@include file=included.html%> 。

11 頁面間物件傳遞的方法
        request,session,application,cookie等

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