1. 程式人生 > >JSP 與 Servlet重要部分

JSP 與 Servlet重要部分

1.講下servlet的執行流程。

  Servlet的執行流程也就是servlet的生命週期,當伺服器啟動的時候生命週期開始,然後通過init()《啟動順序根據web.xml裡的startup-on-load來確定載入順序》
方法初始化servlet,再根據不同請求呼叫doGet或doPost方法,最後再通過destroy()方法進行銷燬。

2.Get和Post的區別

在頁面提交資料時,get的資料大小有限制4k,post沒有限制,get請求提交的資料會在位址列顯示,post不顯示,所以post比get安全.

3.有三臺伺服器,如果在一臺伺服器上登陸了這個使用者,其他兩臺就不能再登陸這個使用者,使用session共享,你是怎麼做的。

把所有的session的資料儲存到Mysql伺服器上,所有Web伺服器都來這臺Mysql伺服器來獲取Session資料。

4.寫一個自定義標籤要繼承什麼類

SimpleTagSupport,一般呼叫doTag方法
或者實現SimpleTag介面

5.Jsp如何處理json

在 jsp 中處理 JSON,通常需要配套使用 JQuery 控制元件,並且匯入一些 Common jar 包。使用 JQuery 控制元件是因為它能有效的解析並且展示 JSON 資料,
匯入Common 則是因為 Java 中的物件並不是純粹的資料,需要通過這些 Jar 包的處理使之轉化成真實資料。

6.如何處理Servlet的執行緒不安全問題

1.最簡單的就是不使用欄位變數,2.使用final修飾變數,3.執行緒安全就是多執行緒操作同一個物件不會有問題,執行緒同步一般來保護執行緒安全,
所以可以在Servlet的執行緒裡面加上同步方法或同步塊。(Synchronized)可以保證在同一時間只有一個執行緒訪問,(使用同步塊會導致效能變差,最好不去使用例項變數)

7.Jsp的重定向和轉發的流程有什麼區別

重定向是客戶端行為,轉發是伺服器端行為
重定向時伺服器產生兩次請求,轉發產生一次請求,重定向時可以轉發到專案以外的任何網址,轉發只能在當前專案裡轉發
重定向會導致request物件資訊丟失。轉發則不會
轉發的url不會變,request.getRequestDispatch().forward()
重定向的url會改變,response.getRedirect().sendRedirect();

詳細解釋看這裡

8.Jsp和Servlet的區別

Jsp的可讀性強,容易看得懂,並且Jsp在最後會編譯成Servlet
servlet容易除錯,但是生成html頁面工作量大

10.Jsp可以操作視窗嗎?

Jsp不能夠直接呼叫視窗,只能先生成開啟視窗的js,再由js呼叫視窗

11.Session的主要幾個方法的區別

Session不能通過new建立,需要通過呼叫getSession()或者getSession(true)方法建立,getSession()是自動建立session,
getSession(true)是強制建立session,setAttribute()方法可以用於傳值,getAttribute()可以用於取值
(第一次建立session的時候,就是訪問第一次一個jsp頁面<這個頁面的page指令 沒有設定session=false>) 
銷燬session呼叫invalidate方法
通過setMaxInactiveInterval()可以設定session的生存時間(web.xml可以設定session的生存時間)

12.Jsp的九大內建物件,三大指令,七大動作的具體功能

JSP九大內建物件:

pageContext :只對當前jsp頁面有效,裡面封裝了基本的request和session的物件 Request :對當前請求進行封裝 Session :瀏覽器會話物件,瀏覽器範圍內有效

Application :應用程式物件,對整個web工程都有效 Out :頁面列印物件,在jsp頁面列印字串 Response :返回伺服器端資訊給使用者 Config :單個servlet的配置物件,

相當於servletConfig物件 Page :當前頁面物件,也就是this Exception :錯誤頁面的exception物件,如果指定的是錯誤頁面,這個就是異常物件

三大指令:

Page :指令是針對當前頁面的指令 Include :用於指定如何包含另一個頁面 Taglib :用於定義和指定自定義標籤

七大動作:

Forward,執行頁面跳轉,將請求的處理轉發到另一個頁面 Param :用於傳遞引數 Include :用於動態引入一個jsp頁面 Plugin :用於下載javaBean或applet到客戶端執行 useBean :

使用javaBean setProperty :修改javaBean例項的屬性值 getProperty :獲取javaBean例項的屬性值

13.獲取頁面的元素的值有幾種方式,分別說一下

request.getParameter() 返回客戶端的請求引數的值
request.getParameterNames() 返回所有可用屬性名的列舉
request.getParameterValues() 返回包含引數的所有值的陣列

14.Servlet和JavaScript的區別, 它們分別是什麼作用

一個是服務端,一個是客戶端
Servlet是獨立於平臺和協議的伺服器端的Java應用程式,可以動態生成Web頁面,並採用響應--請求的模式提供Web服務
JavaScript是一種解釋性語言,用於向html頁面提供互動行為,通常被直接嵌入在html頁面中
Servlet是Java語言編寫的web應用
Js是基於html上的一種解釋語言

15.Jsp的執行原理

 客戶端發出請求(request),Jsp引擎將jsp頁面翻譯成Servlet的java原始檔,在Tomcat(Servlet容器)中將原始檔編譯成class檔案,並載入到記憶體中執行,
把結果返回(response)給客戶端。

16.HTML和Servlet的異同

不同: Html是靜態,servlet是動態 html頁面由伺服器直接返回, servlet是用來處理客戶請求,並返回html頁面 ,Servlet需要伺服器呼叫servlet方法生成動態html頁面,且需要在web.xml中配置url路徑

17.會話跟蹤有哪些,他們的區別是什麼

Cookie,session和application, Cookie是http物件,客戶端與服務端都可以操縱

cookie是在客戶端保持狀態,session是在伺服器端保持狀態,由於cookie是儲存在客戶端本地的,所以資料很容易被竊取,當訪問量很多時,

使用session則會降低伺服器的效能,application的作用域是整個工程裡只有一個,可以在不同瀏覽器之間共享資料,所有人都可以共享,

因此application也是不安全的,Cookie和Session的區別

18.說說Jsp的隱藏物件有哪些

Request,out,response , pageContext , session , application , config , page , exception,也即jsp的九大內建物件

19.request ,response,session 和 application是怎麼用的

Request是客戶端向服務端傳送請求
Response是服務端對客戶端請求做出響應
Session在servlet中不能直接使用,需要通過getSession()建立,如果沒有設定它的生命週期,或者通過invildate()方法銷燬,關閉瀏覽器session就會消失
Application不能直接建立,存在於伺服器的記憶體中,由伺服器建立和銷燬

20.為什麼在session少放物件

因為session底層是由cookie實現的,當客戶端的cookie被禁用後,session也會失效,且應儘量少向session中儲存資訊,session的資料儲存在伺服器端,
當有大量session時,會降低伺服器的效能

21.怎麼判斷瀏覽器是否支援Cookie

可以使用javaScript的方法navigator.cookieEnabled判斷瀏覽器是否支援cookie

22.Request和Session的取值區別,以及出現亂碼的解決方式(不能在java程式碼中設定)

Request可以通過getAttribute()方法直接取值,也可通過getParameter()取值
Session需要通過request.getSession().getAttribute()才能取值
Request是針對一次請求,Session是針對整個會話
      在頁面通過contentType,pageEncoding,content設定編碼格式,必須要一致

24.Jsp頁面跳轉

Jsp頁面跳轉有兩種方式,forward和redirect(轉發和重定向)

25.說出Jsp內建物件以及方法.

Request:客戶端傳送請求
getParameter() 得到前臺傳入的引數值
setCharacterEncoding(String arg0):設定編碼格式
getCharacterEncoding():獲取編碼格式
getRequestDispatcher(String path):返回一個RequestDispatcher物件 
Response:伺服器端返回資訊給使用者
setAttribute("name",Object obj):設定名字為name的request引數的值,該值是由Object型別的obj指定
getAttribute("name"):返回name屬性值
getAttributeNames():返回所有可用屬性名的列舉
setCharacterEncoding(String charset):設定編碼格式
getCharacterEncoding():獲取編碼格式
sendRedirect(String location):返回對包裝的響應物件呼叫 
pageContext:網頁的屬性是在這裡管理的
setAttribute("name",Object obj):設定名字為name的request引數的值,該值是由Object型別的obj指定
getAttribute("name"):返回name屬性值
getAttributeNames():返回所有可用屬性名的列舉 
Session:與請求有關的會話期
setAttribute("name",Object obj):設定名字為name的request引數的值,該值是由Object型別的obj指定
getAttribute("name"):返回name屬性值
getAttributeNames():返回所有可用屬性名的列舉
invalidate():使當前會話失效
setMaxInactiveInterval():指定在Servlet容器使此會話失效之前客戶端請求之間的時間間隔,以秒為單位。負數時間指示會話永遠不會超時
getMaxInactivelnterval():返回servlet 容器在客戶端訪問之間將使此會話保持開啟狀態的最大時間間隔,以秒為單位。在此間隔之後,servlet 容器將使會話無效 
Application:Servlet正在執行的內容
setAttribute("name",Object obj):設定名字為name的request引數的值,該值是由Object型別的obj指定
getAttribute("name"):返回name屬性值 
Out:用來傳送回應的輸出
print():列印資訊
println():換行列印資訊 
Config:Servlet的構架部件

getInitParameter(String paramNarne):從web.xml中獲取指定名稱的值 getInitParameterNames():從web.xml中獲取所有的名稱

Page:JSP頁面本身

Exception:針對錯誤網頁,未捕捉的例外 getMessage():返回異常的詳細資訊 getClass():返回異常的名稱

26.有幾種方式將頁面的值傳到後臺

可通過get或post將值傳遞到後臺,也可通過Jsp裡面的setAttribute()方法將值傳遞到後臺

27.一個form表單的值如何獲取

在Servlet中通過request.getParameter()方法可以獲取表單的值或者是request.getParameterValuse();

29.Jsp中父頁面中怎麼拿到子頁面的表單元素,不是拿值怎麼拿

通過設定屬性setAttribute(),通過getAttribute()拿值,getParameter()方法可以做到

31.404和500是什麼意思

404 :找不到url請求的路徑,一般是工程名不對或者拼寫錯誤
500 :伺服器內部錯誤,一般是伺服器內部程式碼編寫錯誤,也有可能是拋異常導致

32.寫出5種JSTL常用標籤

<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>

33.Jsp頁面把一個元素隱藏的方法

通過使用屬性hidden可以將元素隱藏

35.我們在web應用開發過程中經常遇到輸出某種編碼的字元,如ISO-8859-1,如何輸出一個某種編碼的字串

如將ISO-8859-1輸出為GBK格式的字元, 通過new String(byte[] bytes,String charset) 構造器設定編碼構造一個新的String(new String("ISO-8859-1","GBK"));

36.Jsp裡有那些標籤

jsp:include等

37.怎麼判斷使用者請求時是第一次,如果客戶端和服務端斷開怎麼連到上一次操作

通過session中的isNew()可以判斷是否是新使用者,可以用cookie來儲存資訊到客戶端,可以連線到上一次操作

38.如果建立servlet例項不用構造方法,怎麼建立一個servlet例項

Web容器會自動為servlet寫一個無參的構造器,它使用class.forName("").newInstance()反射來建立servlet例項的

39.Servlet和過濾器的區別

Servlet:是用來處理客戶端傳送的請求,然後生成響應並將其傳給server伺服器,
最後伺服器將響應返回給客戶端
過濾器:是用於 對servlet容器呼叫servlet的過程進行攔截
可以在servlet進行響應處理前後做一些特殊的處理,譬如許可權,日誌,編碼等

40.說明一下jsp中<jsp: include page..>和<%@ include file%>的區別

動態匯入
  是行為元素、是在請求處理階段引入的,引入執行頁面或servlet所生成的應答文字
先編譯,後包含,就是將每個jsp頁面都單獨轉化成html頁面,最後再將所有的html頁面相加,如果有相同變數不會衝突
<%@ include file="" %> 靜態匯入
是指令元素
是編譯時包含,引入靜態文字(html,jsp),在JSP頁面被轉化成servlet之前和它融和到一起。先包含,後編譯
就是將多個jsp一起解析,最後再一起生成html頁面,如果有相同變數會衝突

41. pageContext有什麼作用

可以使用pageContext物件來設定屬性,並指定屬性的作用範圍,提供了對JSP頁面內所有的物件及名字空間的訪問

42.Servlet是單例還是多例

是單例的,可以提高效能

43.攔截器(Filter)怎麼執行的

首先初始化過濾器,然後伺服器組織過濾器鏈,所有的請求都必須需要先通過過濾器鏈,
過濾器鏈是一個棧,遵循先進後出的原則 ,所有的請求需要經過一個一個的過濾器,執行順序要根據web.xml裡配置的<filter-mapping>的位置前後執行,每個過濾器之間通過chain.doFilter連線, 最後抵達真正請求的資源,執行完後再從過濾器鏈退出