JSP面試題

1.jsp靜態包含和動態包含的區別

靜態包含:<%@ include file="被包含頁面"%>
動態包含:<jsp:include page="被包含頁面" flush="true">

1) 靜態包含在轉換成爲java文件的時候將要包含的文件包含進來,作爲一個整體編譯。動態包含是各個包含文件分別轉換,分別編譯。
2) 靜態包含在兩個文件中不能有相同的變量,動態包含允許
3) 靜態包含只能包含文件,動態包含還可以包含servlet輸出的結果
4) 靜態包含不能使用變量作爲文件名,動態包含可以使用變量作爲文件名
5) 動態包含文件發生變化,包含文件會感知變化

2.jsp有哪些內置對象?作用分別是什麼?

Page,pageContext,request,response,session,application,out,config,exception

Page指的是JSP被翻譯成Servlet的對象的引用.

pageContext對象可以用來獲得其他8個內置對象,還可以作爲JSP的域範圍對象使用.pageContext中存的值是當前的頁面的作用範圍》

request代表的是請求對象,可以用於獲得客戶機的信息,也可以作爲域對象來使用,使用request保存的數據在一次請求範圍內有效。

Session代表的是一次會話,可以用於保存用戶的私有的信息,也可以作爲域對象使用,使用session保存的數據在一次會話範圍有效

Application:代表整個應用範圍,使用這個對象保存的數據在整個web應用中都有效。

Response是響應對象,代表的是從服務器向瀏覽器響應數據.

Out:JSPWriter是用於向頁面輸出內容的對象

Config:指的是ServletConfig用於JSP翻譯成Servlet後 獲得Servlet的配置的對象.

Exception:在頁面中設置isErrorPage=”true”,即可使用,是Throwable的引用.用來獲得頁面的錯誤信息。

3.jsp和servlet的區別,共同點,各自應用的範圍?

Servlet完全是JAVA程序代碼構成,擅長於流程控制和事務處理,通過Servlet來生成動態網頁很不直觀.
JSP由HTML代碼和JSP標籤構成,可以方便地編寫動態網頁.
因此在實際應用中採用Servlet來控制業務流程,而採用JSP來生成動態網頁.

4.屬性作用域範圍

page:當前頁面,也就是隻要跳到別的頁面就失效了
request:一次會話,簡單的理解就是一次請求範圍內有效
session:瀏覽器進程,只要當前頁面沒有被關閉(沒有被程序強制清除),不管怎麼跳轉都是有效的
application:服務器,只要服務器沒有重啓(沒有被程序強制清除),數據就有效

5.寫出5中JSTL常用標籤

表達式控制標籤
out
輸出常量
value—直接賦值
輸出變量
default—默認值
escapeXml—控制轉義字符(默認爲true, 如果需要轉義, 設置爲false)
set
三個屬性: var value scope—將一個值存到*scope中(默認是page)
scope的取值爲: page, request, session, application
賦值的時候可以將值放在value後面, 也可以放在兩個標籤中間
<c:set var=”t” value=”山東淄博” />
<c:set var=”t1”>安徽黃山</c:set>
target 對應javaBean的name值(target要使用EL表達式的形式)
property 對應定義的類裏面的屬性
remove—-只能用於頁面內的變量移除
移除某個變量
var: 指定需要remove的那個變量名(不能使用EL表達式)
scope: 兩個scope中的變量名有重複的時候, 可以通過這個屬性來確定移除的是哪個, 如果不指定, 則全部remove掉
catch
相當於try…catch…
可以在這個標籤中放其他標籤, 只有一個屬性var
流程控制標籤
if
<c:if test=”EL表達式” var=”變量名(指的是test屬性的返回值:true或者false)” scope=”作用域範圍” ></c:if>
ose—以下三個標籤通常一起使用, 類似於switch
when
otherwise–可以不寫
循環控制標籤
forEach
var: 設定一個變量值來存儲從數組或者集合中遍歷出來的值
items: 指定需要遍歷的數組或者集合
begin, end: 指定需要遍歷的開始, 結束位置
step: 每次遍歷跳過的個數, 默認值是1
varStatus: 通過index(在原集合中的索引值), count(當前第幾個), first(是否是第一個), last(是否是最後一個)來描述begin和end子集中的狀態
注意first和last, 是判斷的是否在輸出結果中的第一個或者最後一個, 並不是原來的集合中
forTokens(回憶一下字符串的split()方法)
輸出的結果中同樣也有index, count, first, last這四個屬性

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

JSP自定義標籤繼承TagSupport

7.JSP是如何被執行的?執行效率比servlet低嗎?

1) 當客戶端向一個jsp頁面發送請求時,Web Container將jsp轉化成servlet的源代碼(只在第一次請求時),然後編譯轉化後的servlet並加載到內存中執行,執行的結果response到客戶端
2) jsp只在第一次執行的時候會轉化成servlet,以後每次執行,web容器都是直接執行編譯後的servlet,所以jsp和servlet只是在第一次執行的時候不一樣,jsp慢一點,以後的執行都是相同的

8.如何避免jsp頁面自動生成session對象?

1)可以使用頁面指令顯式關掉,代碼如下:

 <%@ page session="false" %>

2)在默認情況下,用戶請求一個jsp頁面時,如果session還沒有建立,jsp頁面會自動建立一個session對象,但是session對象是比較消耗資源的,如果沒必要保持和使用session,就不應該創建,比如宣傳產品的網站

9.jsp的缺點?

如果直接在jsp頁面中寫代碼
程序的刻毒性差
維護困難

10.說出Servlet和CGI的區別?

servlet:處於服務器進程中,只會有一個servlet實例,每個請求都會產生一個新的線程,而且servlet實例一般不會銷燬
CGI:來一個請求就創建一個進程,用完就銷燬,效率低於servlet

11.簡述JSP的設計模式。

C/S:客戶端 / 服務器 (胖客戶端)
B/S:瀏覽器 / 服務器 (瘦客戶端)

JavaBean:
就是一個普通類(實體bean),包含三樣標準:一個無參構造、私有屬性、公共的getter和setter方法

Model 1模式:
JSP + JavaBean

這裏寫圖片描述

Model2模式:
JSP + Servlet + JavaBean

這裏寫圖片描述
MVC:開發模式
M: Model模型 JavaBean|四種作用域
V:view視圖 JSP
C:Controller控制器 Servlet

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