jsp和servlet面试题
生活随笔
收集整理的這篇文章主要介紹了
jsp和servlet面试题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.講下servlet的執行流程。doGet和doPost的區別
? Servlet的執行流程也就是servlet的生命周期,當服務器啟動的時候生命周期開始,然后通過init()《啟動順序根據web.xml里的startup-on-load來確定加載順序》方法初始化servlet,再根據不同請求調用doGet或doPost方法,最后再通過destroy()方法進行銷毀。
doGet和doPost都是接受用戶請求的方法,doGet處理get請求,doPost處理post請求,doGet用于地址欄提交,doPost用于表單提交,在頁面提交數據時,get的數據大小有限制4k,post沒有限制,get請求提交的數據會在地址欄顯示,post不顯示,所以post比get安全.
2.當service有一個實例變量,doGet和doPost去調用這個變量,會出現什么問題,你是如何解決的。
會出現線程不安全問題。無論是doGet還是doPost去調用,服務器端處理的過程都是一樣的,那么我們可以把處理過程單獨寫在另外一個方法handle里,讓兩個方法都去調用handle,根據不同請求去調用不同的方法。
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的線程不安全問題
線程安全就是多線程操作同一個對象不會有問題,線程同步一般來保護線程安全,所以可以在Servlet的線程里面加上同步方法或同步塊。(Synchronized)可以保證在同一時間只有一個線程訪問,(使用同步塊會導致性能變差,最好不去使用實例變量)
7.Jsp的重定向和轉發的流程有什么區別
重定向是客戶端行為,轉發是服務器端行為
重定向時服務器產生兩次請求,轉發產生一次請求,重定向時可以轉發到項目以外的任何網址,轉發只能在當前項目里轉發
重定向會導致request對象信息丟失。轉發則不會
轉發的url不會變,request.getRequestDispatch()。forward()
重定向的url會改變,response.getRedirect();
8.Jsp和servlet的區別
jsp的可讀性強,容易維護,并且jsp在最后會編譯成servlet
servlet容易調試
9.下面符合jsp代碼的是:3
1).Var a = document.getElemetnById("id");
2).Var a = document.getElementById("name");
3).If(course("如果是對的")return false
4).for(int i=0;i<10;i++){}
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中將源文件編譯成class文件,并加載到內存中執行,把結果返回(response)給客戶端。
16.轉發http請求一般有兩種方法,response.sendRedirect和request.forward。resquest.setAttribute()中設置的值不會丟失?(B)
A.sendRedirect B.forward C.兩個都不能 D.兩個都可以
17.HTML和Servlet的異同
不同:
Html是靜態,servlet是動態
html頁面由服務器直接返回,
servlet是用來處理客戶請求,并返回html頁面
//servlet需要服務器調用servlet方法生成動態html頁面,且需要在web.xml中配置url路徑
18.會話跟蹤有哪些,他們的區別是什么
Cookie,session和application,
Cookie是http對象,客戶端與服務端都可以操縱
cookie是在客戶端保持狀態,session是在服務器端保持狀態,由于cookie是保存在客戶端本地的,所以數據很容易被竊取,當訪問量很多時,使用session則會降低服務器的性能,application的作用域是整個工程里只有一個,可以在不同瀏覽器之間共享數據,所有人都可以共享,因此application也是不安全的
19.session和application的作用
Session用于客戶端與服務器之間保持狀態的解決方案,數據保存在服務器內存中,底層是有cookie實現的
Application的作用域是整個工程里只有一個,可以在不同瀏覽器之間共享數據,所有人都可以共享,因此application是不安全的
20.說說jsp的隱藏對象有哪些
Request,out,response , pageContext , session , application , config , page , exception,也即jsp的九大內置對象
21.request ,response,session 和 application是怎么用的
Request是客戶端向服務端發送請求
Response是服務端對客戶端請求做出響應
Session在servlet中不能直接使用,需要通過getSession()創建,如果沒有設定它的生命周期,或者通過invildate()方法銷毀,關閉瀏覽器session就會消失
Application不能直接創建,存在于服務器的內存中,由服務器創建和銷毀
22.為什么在session少放對象
因為session底層是由cookie實現的,當客戶端的cookie被禁用后,session也會失效,且應盡量少向session中保存信息,session的數據保存在服務器端,當有大量session時,會降低服務器的性能
23.服務端怎么判斷瀏覽器是否支持cookie
可以使用javaScript的方法navigator.cookieEnabled判斷瀏覽器是否支持cookie
24.Request和session的取值區別,以及出現亂碼的解決方式(不能在java代碼中設置)
Request可以通過getAttribute()方法直接取值,也可通過getParameter()取值
Session需要通過request.getSession().getAttribute()才能取值
Request是針對一次請求,session是針對整個會話
????? 在頁面通過contentType,pageEncoding,content設置編碼格式,必須要一致
25.jsp頁面跳轉
Jsp頁面跳轉有兩種方式,forward和redirect(轉發和重定向)
Forward只能在當前項目里跳轉,只產生一次請求,request保存的變量不會丟失,url地址不會改變
Redirect可跳轉到項目以外的任何頁面,產生兩次請求,request保存的變量會全部丟失,url地址會發生改變,變化為第二個請求的地址
26說出jsp內置對象以及方法
Request:客戶端發送請求
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():返回異常的名稱
27.有幾種方式將頁面的值傳到后臺
可通過form表單的get或post將值傳遞到后臺,也可通過setAttribute()方法將值傳遞到后臺
28.一個form表單的值如何獲取
在servlet中通過request.getParameter()方法可以獲取表單的值
或者是request.getParameterValuse();
29.傳遞參數到后臺有幾種方式
表單傳參,url傳參,jquery.ajax傳參
30.Jsp中父頁面中怎么拿到子頁面的表單元素,不是拿值怎么拿
通過設置屬性setAttribute(),通過getAttribute()拿值,getParameter()方法可以做到
31.定義一個String類型的字符串,如果重定向之后還能不能獲得這個數據
不能
32.404和500是什么意思
404 :找不到url請求的路徑,一般是工程名不對或者拼寫錯誤
500 :服務器內部錯誤,一般是服務器內部代碼編寫錯誤,也有可能是拋異常導致
33.寫出5種JSTL常用標簽
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>
34.在項目名和頁面路徑都沒有錯的情況下為什么會報404錯誤,它有什么原理在里面
工程名不對或者拼寫錯誤,404錯誤一般是找不到客戶端請求的文件
35.說出servlet的生命周期
當web服務器啟動的時候,servlet生命周期開始,通過init方法初始化servlet,通過不同的請求調用doGet或doPost方法,最后通過destroy()方法進行銷毀
36.Jsp頁面把一個元素隱藏的方法
通過使用屬性hidden可以將元素隱藏
37.Session,application,cookie的區別
Session不能通過new創建,要通過調用getSession()方法創建,數據保存在服務器端,單個客戶端session是共享的,底層是由cookie實現的,大小沒有限制
Application的作用域是整個工程只有共享一個,生命周期比session大
Cookie需要通過new創建,數據保存在客戶端中,cookie保存的數據不能超過4k,不安全
38.我們在web應用開發過程中經常遇到輸出某種編碼的字符,如ISO-8859-1,如何輸出一個某種編碼的字符串
如將ISO-8859-1輸出為GBK格式的字符, 通過new String(byte[] bytes,String charset) 構造器設置編碼構造一個新的String(new String("ISO-8859-1","GBK"));
39.Jsp里有那些標簽
jsp:include等
40.怎么判斷用戶請求時是第一次,如果客戶端和服務端斷開怎么連到上一次操作
通過session中的isNew()可以判斷是否是新用戶
41.請說下會話跟蹤技術
會話跟蹤技術是用于維持客戶端和服務器端通信的技術。
通過session,cookie或者application可實現會話跟蹤
42.如果創建servlet實例不用構造方法,怎么創建一個servlet實例
Web容器會自動為servlet寫一個無參的構造器,它使用class.forName("").newInstance()反射來創建servlet實例的
43.Servlet是安全的嗎?當service有一個實例變量,doGet和doPost去調用這個變量,會出現什么問題,你是如何解決的
是線程不安全的,因為servlet是單例模式,當多個客戶端共同訪問的時候線程不安全。
盡量用局部變量,同步塊,如果當前字段是不會改變的,用final修飾
44.Servlet和過濾器的區別
Servlet:是用來處理客戶端發送的請求,然后生成響應并將其傳給server服務器,
最后服務器將響應返回給客戶端
過濾器:是用于 對servlet容器調用servlet的過程進行攔截
可以在servlet進行響應處理前后做一些特殊的處理
45說明一下jsp中<jsp: include page..>和<%@ include file%>的區別
<jsp:include page=""/> 動態導入
? 是行為元素、是在請求處理階段引入的,引入執行頁面或servlet所生成的應答文本
先編譯,后包含,就是將每個jsp頁面都單獨轉化成html頁面,最后再將所有的html頁面相加,如果有相同變量不會沖突
<%@ include file="" %> 靜態導入
是指令元素
是編譯時包含,引入靜態文本(html,jsp),在JSP頁面被轉化成servlet之前和它融和到一起。先包含,后編譯
就是將多個jsp一起解析,最后再一起生成html頁面,如果有相同變量會沖突
46. pageContext有什么作用
可以使用pageContext對象來設定屬性,并指定屬性的作用范圍,提供了對JSP頁面內所有的對象及名字空間的訪問
48.Servlet是單例還是多例
是單例的,可以提高性能
49.Filter與攔截器怎么執行的
首先初始化過濾器,然后服務器組織過濾器鏈,所有的請求都必須需要先通過過濾器鏈,
過濾器鏈是一個棧,遵循先進后出的原則 ,所有的請求需要經過一個一個的過濾器,執行順序要根據web.xml里配置的<filter-mapping>的位置前后執行,每個過濾器之間通過chain.doFilter連接, 最后抵達真正請求的資源,執行完后再從過濾器鏈退出
50.Jsp中如何進行分頁,項目中如何進行分頁?
需要上一頁和下一頁的超鏈接(至少需要這兩個),通過計算當前頁的頁碼獲取下一頁數據
的起始位置,然后在 MySql 中查詢,如果使用 Oracle 則需要另外計算下一頁數據的結
束位置。
使用hibernate框架,它可以針對不同的數據庫自動產生為你分頁的代碼。
? Servlet的執行流程也就是servlet的生命周期,當服務器啟動的時候生命周期開始,然后通過init()《啟動順序根據web.xml里的startup-on-load來確定加載順序》方法初始化servlet,再根據不同請求調用doGet或doPost方法,最后再通過destroy()方法進行銷毀。
doGet和doPost都是接受用戶請求的方法,doGet處理get請求,doPost處理post請求,doGet用于地址欄提交,doPost用于表單提交,在頁面提交數據時,get的數據大小有限制4k,post沒有限制,get請求提交的數據會在地址欄顯示,post不顯示,所以post比get安全.
2.當service有一個實例變量,doGet和doPost去調用這個變量,會出現什么問題,你是如何解決的。
會出現線程不安全問題。無論是doGet還是doPost去調用,服務器端處理的過程都是一樣的,那么我們可以把處理過程單獨寫在另外一個方法handle里,讓兩個方法都去調用handle,根據不同請求去調用不同的方法。
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的線程不安全問題
線程安全就是多線程操作同一個對象不會有問題,線程同步一般來保護線程安全,所以可以在Servlet的線程里面加上同步方法或同步塊。(Synchronized)可以保證在同一時間只有一個線程訪問,(使用同步塊會導致性能變差,最好不去使用實例變量)
7.Jsp的重定向和轉發的流程有什么區別
重定向是客戶端行為,轉發是服務器端行為
重定向時服務器產生兩次請求,轉發產生一次請求,重定向時可以轉發到項目以外的任何網址,轉發只能在當前項目里轉發
重定向會導致request對象信息丟失。轉發則不會
轉發的url不會變,request.getRequestDispatch()。forward()
重定向的url會改變,response.getRedirect();
8.Jsp和servlet的區別
jsp的可讀性強,容易維護,并且jsp在最后會編譯成servlet
servlet容易調試
9.下面符合jsp代碼的是:3
1).Var a = document.getElemetnById("id");
2).Var a = document.getElementById("name");
3).If(course("如果是對的")return false
4).for(int i=0;i<10;i++){}
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中將源文件編譯成class文件,并加載到內存中執行,把結果返回(response)給客戶端。
16.轉發http請求一般有兩種方法,response.sendRedirect和request.forward。resquest.setAttribute()中設置的值不會丟失?(B)
A.sendRedirect B.forward C.兩個都不能 D.兩個都可以
17.HTML和Servlet的異同
不同:
Html是靜態,servlet是動態
html頁面由服務器直接返回,
servlet是用來處理客戶請求,并返回html頁面
//servlet需要服務器調用servlet方法生成動態html頁面,且需要在web.xml中配置url路徑
18.會話跟蹤有哪些,他們的區別是什么
Cookie,session和application,
Cookie是http對象,客戶端與服務端都可以操縱
cookie是在客戶端保持狀態,session是在服務器端保持狀態,由于cookie是保存在客戶端本地的,所以數據很容易被竊取,當訪問量很多時,使用session則會降低服務器的性能,application的作用域是整個工程里只有一個,可以在不同瀏覽器之間共享數據,所有人都可以共享,因此application也是不安全的
19.session和application的作用
Session用于客戶端與服務器之間保持狀態的解決方案,數據保存在服務器內存中,底層是有cookie實現的
Application的作用域是整個工程里只有一個,可以在不同瀏覽器之間共享數據,所有人都可以共享,因此application是不安全的
20.說說jsp的隱藏對象有哪些
Request,out,response , pageContext , session , application , config , page , exception,也即jsp的九大內置對象
21.request ,response,session 和 application是怎么用的
Request是客戶端向服務端發送請求
Response是服務端對客戶端請求做出響應
Session在servlet中不能直接使用,需要通過getSession()創建,如果沒有設定它的生命周期,或者通過invildate()方法銷毀,關閉瀏覽器session就會消失
Application不能直接創建,存在于服務器的內存中,由服務器創建和銷毀
22.為什么在session少放對象
因為session底層是由cookie實現的,當客戶端的cookie被禁用后,session也會失效,且應盡量少向session中保存信息,session的數據保存在服務器端,當有大量session時,會降低服務器的性能
23.服務端怎么判斷瀏覽器是否支持cookie
可以使用javaScript的方法navigator.cookieEnabled判斷瀏覽器是否支持cookie
24.Request和session的取值區別,以及出現亂碼的解決方式(不能在java代碼中設置)
Request可以通過getAttribute()方法直接取值,也可通過getParameter()取值
Session需要通過request.getSession().getAttribute()才能取值
Request是針對一次請求,session是針對整個會話
????? 在頁面通過contentType,pageEncoding,content設置編碼格式,必須要一致
25.jsp頁面跳轉
Jsp頁面跳轉有兩種方式,forward和redirect(轉發和重定向)
Forward只能在當前項目里跳轉,只產生一次請求,request保存的變量不會丟失,url地址不會改變
Redirect可跳轉到項目以外的任何頁面,產生兩次請求,request保存的變量會全部丟失,url地址會發生改變,變化為第二個請求的地址
26說出jsp內置對象以及方法
Request:客戶端發送請求
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():返回異常的名稱
27.有幾種方式將頁面的值傳到后臺
可通過form表單的get或post將值傳遞到后臺,也可通過setAttribute()方法將值傳遞到后臺
28.一個form表單的值如何獲取
在servlet中通過request.getParameter()方法可以獲取表單的值
或者是request.getParameterValuse();
29.傳遞參數到后臺有幾種方式
表單傳參,url傳參,jquery.ajax傳參
30.Jsp中父頁面中怎么拿到子頁面的表單元素,不是拿值怎么拿
通過設置屬性setAttribute(),通過getAttribute()拿值,getParameter()方法可以做到
31.定義一個String類型的字符串,如果重定向之后還能不能獲得這個數據
不能
32.404和500是什么意思
404 :找不到url請求的路徑,一般是工程名不對或者拼寫錯誤
500 :服務器內部錯誤,一般是服務器內部代碼編寫錯誤,也有可能是拋異常導致
33.寫出5種JSTL常用標簽
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>
34.在項目名和頁面路徑都沒有錯的情況下為什么會報404錯誤,它有什么原理在里面
工程名不對或者拼寫錯誤,404錯誤一般是找不到客戶端請求的文件
35.說出servlet的生命周期
當web服務器啟動的時候,servlet生命周期開始,通過init方法初始化servlet,通過不同的請求調用doGet或doPost方法,最后通過destroy()方法進行銷毀
36.Jsp頁面把一個元素隱藏的方法
通過使用屬性hidden可以將元素隱藏
37.Session,application,cookie的區別
Session不能通過new創建,要通過調用getSession()方法創建,數據保存在服務器端,單個客戶端session是共享的,底層是由cookie實現的,大小沒有限制
Application的作用域是整個工程只有共享一個,生命周期比session大
Cookie需要通過new創建,數據保存在客戶端中,cookie保存的數據不能超過4k,不安全
38.我們在web應用開發過程中經常遇到輸出某種編碼的字符,如ISO-8859-1,如何輸出一個某種編碼的字符串
如將ISO-8859-1輸出為GBK格式的字符, 通過new String(byte[] bytes,String charset) 構造器設置編碼構造一個新的String(new String("ISO-8859-1","GBK"));
39.Jsp里有那些標簽
jsp:include等
40.怎么判斷用戶請求時是第一次,如果客戶端和服務端斷開怎么連到上一次操作
通過session中的isNew()可以判斷是否是新用戶
41.請說下會話跟蹤技術
會話跟蹤技術是用于維持客戶端和服務器端通信的技術。
通過session,cookie或者application可實現會話跟蹤
42.如果創建servlet實例不用構造方法,怎么創建一個servlet實例
Web容器會自動為servlet寫一個無參的構造器,它使用class.forName("").newInstance()反射來創建servlet實例的
43.Servlet是安全的嗎?當service有一個實例變量,doGet和doPost去調用這個變量,會出現什么問題,你是如何解決的
是線程不安全的,因為servlet是單例模式,當多個客戶端共同訪問的時候線程不安全。
盡量用局部變量,同步塊,如果當前字段是不會改變的,用final修飾
44.Servlet和過濾器的區別
Servlet:是用來處理客戶端發送的請求,然后生成響應并將其傳給server服務器,
最后服務器將響應返回給客戶端
過濾器:是用于 對servlet容器調用servlet的過程進行攔截
可以在servlet進行響應處理前后做一些特殊的處理
45說明一下jsp中<jsp: include page..>和<%@ include file%>的區別
<jsp:include page=""/> 動態導入
? 是行為元素、是在請求處理階段引入的,引入執行頁面或servlet所生成的應答文本
先編譯,后包含,就是將每個jsp頁面都單獨轉化成html頁面,最后再將所有的html頁面相加,如果有相同變量不會沖突
<%@ include file="" %> 靜態導入
是指令元素
是編譯時包含,引入靜態文本(html,jsp),在JSP頁面被轉化成servlet之前和它融和到一起。先包含,后編譯
就是將多個jsp一起解析,最后再一起生成html頁面,如果有相同變量會沖突
46. pageContext有什么作用
可以使用pageContext對象來設定屬性,并指定屬性的作用范圍,提供了對JSP頁面內所有的對象及名字空間的訪問
48.Servlet是單例還是多例
是單例的,可以提高性能
49.Filter與攔截器怎么執行的
首先初始化過濾器,然后服務器組織過濾器鏈,所有的請求都必須需要先通過過濾器鏈,
過濾器鏈是一個棧,遵循先進后出的原則 ,所有的請求需要經過一個一個的過濾器,執行順序要根據web.xml里配置的<filter-mapping>的位置前后執行,每個過濾器之間通過chain.doFilter連接, 最后抵達真正請求的資源,執行完后再從過濾器鏈退出
50.Jsp中如何進行分頁,項目中如何進行分頁?
需要上一頁和下一頁的超鏈接(至少需要這兩個),通過計算當前頁的頁碼獲取下一頁數據
的起始位置,然后在 MySql 中查詢,如果使用 Oracle 則需要另外計算下一頁數據的結
束位置。
使用hibernate框架,它可以針對不同的數據庫自動產生為你分頁的代碼。
總結
以上是生活随笔為你收集整理的jsp和servlet面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个风骚的C语言操作
- 下一篇: 当你使用微信和QQ的时候,请不要忘记IC