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 :
使用javaBeansetProperty :修改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的作用域是整個工程裡只有一個,可以在不同瀏覽器之間共享資料,所有人都可以共享,
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(newString("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連線, 最後抵達真正請求的資源,執行完後再從過濾器鏈退出
1、說一說Servlet生命週期
Servlet生命週期包括三部分:
初始化:Web容器載入servlet,呼叫init()方法
處理請求:當請求到達時,執行其service()方法。service()自動派遣執行與請求相對應的doXXX(doGet或者doPost)方法。
銷燬:服務結束,web容器會呼叫servlet的distroy()方法銷燬servlet。
2、get提交和post提交有何區別
(1)get一般用於從伺服器上獲取資料,post一般用於向伺服器傳送資料
(2)請求的時候引數的位置有區別,get的引數是拼接在url後面,使用者在瀏覽器位址列可以看到。post是放在http包的包體中。
比如說使用者註冊,你不能把使用者提交的註冊資訊用get的方式吧,那不是說把使用者的註冊資訊都顯示在Url上了嗎,是不安全的。
(3)能提交的資料有區別,get方式能提交的資料只能是文字,且大小不超過1024個位元組,而post不僅可以提交文字還有二進位制檔案。
所以說想上傳檔案的話,那我們就需要使用post請求方式
(4)servlet在處理請求的時候分別對應使用doGet和doPost方式進行處理請求
3、JSP與Servlet有什麼區別
Servlet是伺服器端的程式,動態生成html頁面傳送到客戶端,但是這樣程式裡會有很多out.println(),java與html語言混在一起
很亂,所以後來sun公司推出了JSP.其實JSP就是Servlet,每次執行的時候JSP都首先被編譯成servlet檔案,然後再被編譯成
.class檔案執行。有了jsp,在MVC專案中servlet不再負責動態生成頁面,轉而去負責控制程式邏輯的作用,控制jsp與javabean
之間的流轉。
4、doGet與doPost方法的兩個引數是什麼
HttpServletRequest:封裝了與請求相關的資訊
HttpServletResponse:封裝了與響應相關的資訊
5、request.getAttribute()和request.getParameter
(1)有setAttribute,沒有setParameter方法
(2)getParameter獲取到的值只能是字串,不可以是物件,而getAttribute獲取到的值是Object型別的。
(3)通過form表單或者url來向另一個頁面或者servlet傳遞引數的時候需要用getParameter獲取值;getAttribute只能獲取setAttribute的值
(4)setAttribute是應用伺服器把這個物件放到該頁面所對應的一塊記憶體當中,當你的頁面伺服器重定向到另一個頁面的時候,應用伺服器
會把這塊記憶體拷貝到另一個頁面對應的記憶體當中。通過getAttribute可以取得你存下的值,當然這種方法可以用來傳物件。
用session也是一樣的道理,這是說request和session的生命週期不一樣而已。
6、JSP有哪些內建物件,作用是什麼?
JSP內建物件 | |
名稱 | 作用 |
request | 包含使用者端請求的資訊 |
response | 包含伺服器傳回客戶端的響應資訊 |
session | 與請求有關的會話期 |
pageContext | 管理網頁屬性 |
application | 伺服器啟動時建立,伺服器關閉時停止,為多個應用程式儲存資訊 |
out | 向客戶端輸出資料 |
config | servlet的架構部件 |
page | 指網頁本身 |
exception | 針對錯誤頁面才可使用 |
7、四種會話跟蹤技術作用域
(1)page:一個頁面
(2)request::一次請求
(3)session:一次會話
(4)application:伺服器從啟動到停止。
7、JSP中動態INCLUDE和靜態INCLUDE有什麼區別
include指令用於把另一個頁面包含到當前頁面中,在什麼時候包含的?再轉換成servlet的時候包含進去的。
動態INCLUDE用jsp:include動作實現 <jsp:include page="included.jsp"flush="true" />它總是會檢查所含檔案中的變化,適合用於包含動態頁面,
並且可以帶引數.
靜態INCLUDE用include偽碼實現,定不會檢查所含檔案的變化,適用於包含靜態頁面<%@ includefile="included.htm" %>
8、forward和redirect的區別
轉發與重定向
(1)從位址列顯示來說
forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道伺服器傳送
的內容從哪裡來的,所以它的位址列還是原來的地址.redirect是服務端根據邏輯,傳送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以位址列顯示的是
新的URL.
(2)從資料共享來說
forward:轉發頁面和轉發到的頁面可以共享request裡面的資料.
redirect:不能共享資料.
(3)從運用地方來說
forward:一般用於使用者登陸的時候,根據角色轉發到相應的模組.
redirect:一般用於使用者登出登陸時返回主頁面和跳轉到其它的網站等.
(4)從效率來說
forward:高.
redirect:低.
瀏覽器jsp,html之間的關係
1.JSP與Java Servlet一樣,是在伺服器端執行的,通常返回該客戶端的就是一個HTML文字,因此客戶端只要有瀏覽器就能瀏覽
2.在大多數Browser/Server結構的Web應用中,瀏覽器直接通過HTML或者JSP的形式與使用者互動,響應使用者的請求
3.JSP在伺服器上執行,並將執行結果輸出到客戶端瀏覽器,我們可以說基本上與瀏覽器無關
自定義標籤要繼承哪個類
這個類可以繼承TagSupport或者BodyTagSupport,兩者的差別是前者適用於沒有主體的標籤,而後者適用於有主體的標籤。如果選擇繼承TagSupport,可以實現doStartTag和doEndTag兩個方法實現Tag的功能,如果選擇繼承BodyTagSupport,可以實現doAfterBody這個方法。
過濾器Filter的作用及配置
過濾器的作用:
過濾器是一個物件,可以傳輸請求或修改響應。它可以在請求到達Servlet/JSP之前對其進行預處理,而且能夠在響應離開Servlet/JSP之後對其進行後處理。所以如果你有幾個Servlet/JSP需要執行同樣的資料轉換或頁面處理的話,你就可以寫一個過濾器類,然後在部署描述檔案(web.xml)中把該過濾器與對應的Servlet/JSP聯絡起來。你可以一個過濾器以作用於一個或一組servlet,零個或多個過濾器能過濾一個或多個servlet。一個過濾器實現java.servlet.Filter介面並定義它的三個方法:
1. void init(FilterConfig config) throws ServletException:在過濾器執行service前被呼叫,以設定過濾器的配置物件。
2 void destroy();在過濾器執行service後被呼叫。
3 Void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException;
forward,與redirect 的區別?有哪些方式實現
forward是把另一個頁面載入到本頁面,不改變瀏覽器的路徑,redirect是跳轉到另一個頁面,會改變瀏覽器的路徑
重定向: response.sendRedirect(̶重定向的路徑”)
轉發: request.getRequestDispatcher(̶轉發路徑”).forward(request, response);
jsp內建物件和作用?
有九個內建物件:request、response、out、session、application、pageContext、config、page、exception
作用如下:
(1) HttpServletRequest類的Request物件
作用:代表請求物件,主要用於接受客戶端通過HTTP協議連線傳輸到伺服器端的資料。
(2) HttpServletResponse類的Respone物件
作用:代表響應物件,主要用於向客戶端傳送資料
(3) JspWriter類的out物件
作用:主要用於向客戶端輸出資料;
Out的基類是JspWriter
(4) HttpSession類的session物件
作用:主要用於來分別儲存每個使用者資訊,與請求關聯的會話;
會話狀態維持是Web應用開發者必須面對的問題。
(5) ServletContex類的application物件
作用:主要用於儲存使用者資訊,程式碼片段的執行環境;
它是一個共享的內建物件,即一個容器中的多個使用者共享一個application物件,故其儲存的資訊被所有使用者所共享.
(6) PageContext類的PageContext物件
作用:管理網頁屬性,為JSP頁面包裝頁面的上下文,管理對屬於JSP中特殊可見部分中已命名物件的訪問,它的建立和初始化都是由容器來完成的。
(7) ServletConfig類的Config物件
作用:程式碼片段配置物件,表示Servlet的配置。
(8) Object類的Page(相當於this)物件
作用:處理JSP網頁,是Object類的一個例項,指的是JSP實現類的例項,即它也是JSP本身,只有在JSP頁面範圍之內才是合法的。
(9)Exception
作用:處理JSP檔案執行時發生的錯誤和異常
如果用JSP開發一個聊天程式,不用資料庫儲存聊天紀錄,請問聊天記錄最好儲存在()中。
Application
doPost,doGet的區別?
1。當你直接訪問一個servlet時,呼叫的是doGet方法。
2。如果你的html裡面規定了method訪問哪個方法,則呼叫該方法。
3。get和post提交的資料量是不一樣的.get好像最多隻能在url後跟8K, post沒這個限制
jsp亂碼如何解決,幾種解決方案。?
一、JSP頁面顯示亂碼
二、表單提交中文時出現亂碼
三、資料庫連線時出現亂碼
頁面間物件傳遞的方法
request,session,application,cookie等
request.setAttribute(key,value)
session.setAttribute(key,value)
application.setAttribute(key,value)
我們在web應用開發過程中經常遇到輸出某種編碼的字元,如iso8859-1等,如何輸出一個某種編碼的字串?
text = new String( text.getBytes(̶iso8859-1″),”GBK”);
首先以”iso8859-1″解碼為byte陣列,再用”GBK”重構字串
簡單介紹一下servlet
servlet容器:
負責處理客戶請求、把請求傳送給servlet並把結果返回給客戶。不同程式的容器實際實現可能有所變化,但容器與servlet之間的介面是由servletAPI定義好的,這個介面定義了servlet容器在servlet上要呼叫的方法及傳遞給servlet的物件類。
servlet的生命週期:
servlet容器建立servlet的一個例項
容器呼叫該例項的init()方法
如果容器對該servlet有請求,則呼叫此例項的service()方法
容器在銷燬本例項前呼叫它的destroy()方法
銷燬並標記該例項以供作為垃圾收集
一旦請求了一個servlet,就沒有辦法阻止容器執行一個完整的生命週期。
容器在servlet首次被呼叫時建立它的一個例項,並保持該例項在記憶體中,讓它對所有的請求進行處理。容器可以決定在任何時候把這個例項從記憶體中移走。在典型的模型中,容器為每個servlet建立一個單獨的例項,容器並不會每接到一個請求就建立一個新執行緒,而是使用一個執行緒池來動態的將執行緒分配給到來的請求,但是這從servlet的觀點來看,效果和為每個請求建立一個新執行緒的效果相同。
BS與CS的聯絡與區別。
B/S模式是指在TCP/IP的支援下,以HTTP為傳輸協議,客戶端通過Browser訪問Web伺服器以及與之相連的後臺資料庫的技術及體系結構。它由瀏覽器、Web伺服器、應用伺服器和資料庫伺服器組成。客戶端的瀏覽器通過URL訪問Web伺服器,Web伺服器請求資料庫伺服器,並將獲得的結果以HTML形式返回客戶端瀏覽器。
c/s在系統機構上和B/S相似,不過需要在客戶端安裝一個客戶端軟體,由這個軟體對伺服器的資料進行讀寫,就像我們常用的qq,就是這種模式。
JSP與SERVLET的區別。
JSP先編譯成SERVLET然後再編譯成CLASS檔案
JSP—–SERVLET—–JAVA檔案—CLASS
jsp主要做檢視層,servlet主要做控制層
JSP中動態INCLUDE與靜態INCLUDE的區別?
動態INCLUDE用jsp:include動作實現 它總是會檢查所含檔案中的變化,適合用於包含動態頁面,並且可以帶引數。
靜態INCLUDE用include偽碼實現,定不會檢查所含檔案的變化,適用於包含靜態頁面
JSP的內建物件及方法。
9大內建物件:
request,response,pagecontext,session,application,out,config,page,exception
request–HttpServletRequest的子類
response–HttpServletResponse的子類
session–HttpSession 的子類
pagecontext–PageContext的子類
application–ServletContext 的子類
out–JspWriter 的子類
config–ServletConfig 的子類
page–Object 的子類
exception–Throwab 的子類
四種會話跟蹤技術
會話跟蹤是為了跟蹤使用者於service之間的多次互動.
1.cookie 也就是我們常見的在C盤/資料夾下有一個COOKIE目錄
2.session 比Cookie安全.不可見.但佔用srevice資源
3.url重寫.這是在使用者的IE禁止Cookie的時候採用的方法。因為不管是Cookie還是 session 都要藉助4.隱藏域
<%…%>和<%!…%>的區別
<%…%>用於在JSP頁面中嵌入Java指令碼
<%!…%>用於在JSP頁面中申明變數或方法,可以在該頁面中的<%…%>指令碼中呼叫,宣告的變數相當於Servlet中的定義的成員變數。
你認為哪種分頁效率最高? JSP ,MYSQL,SQL25.
SQL25效率高:
因為mysql的分頁還是先查出所有的記錄,再從起始位置開始查出所需要的記錄, 而SQL25不會查所有記錄,只查篩選後所需要的記錄
簡單說明下你對servlet的認識及其Servlet的基本架構、生命週期
HttpServlet類是一個抽象類,可以從該類派生出一個子類來實現一個HttpServlet,接受來自Web站點的請求(該請求來自訪問該Web站點的客戶瀏覽器),並將處理後的響應結果發回Web站點(Web站點再將響應結果傳送給客戶瀏覽器),在HttpServlet的子類中,必須至少過載下表中的其中一種方法。
方法名doGet
如果Servlet支援Http GET請求,用於Http GET請求
doPost
如果Servlet支援Http POST請求,用於Http POST請求
doPut
如果Servlet支援Http PUT請求,用於Http PUT請求
doDelete
如果Servlet支援Http DELETE請求,用於Http DELETE請求
init和destroy
如果需要管理Servlet生命週期內所持有資源,可以過載這兩個方法
通常,不過載service方法,對於上表中的每一種HTTP請求,service方法通過分派它們到相應的Handler執行緒(doXXX方法)來處理這些標準的HTTP請求。
同樣地,通常也不過載doOptions和doTrace方法,service方法通過分派它們到doTrace和doOptions來支援HTTP1.1 TRACE和OPTIONS。
Servlet通常執行在多執行緒的伺服器中,因此,所編寫的Servlet程式碼必須能夠處理並行請求和對資料資源的同步訪問。共享資源包括記憶體中的資料(例如:例項或類變數)和外部物件(例如:檔案、資料庫連線或網路連線)。
Protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException
從service方法授並處理HTTP GET請求。GET方法允許客戶讀取來自Web伺服器的資訊,客戶通過傳遞一個帶URL的查詢字串可以告訴伺服器它需什麼資訊。
過載支援GET請求的doGet方法還將自動支援HTTP HEAD請求,HEAD請求也是一個GET請求,它得到的返回響應中只有一個請求頭(header)欄位,而沒有響應資訊的內容。
如果過載方法,應該從該請求讀資料,在響應中設定整個headers,訪問PrintWriter或輸出流物件,最後寫響應資料。當設定headers時,應確保包含content type和encoding。如果使用PrintWriter物件返回響應,在存取PrintWriter物件之前必須設定content type。
Servlet引擎必須在寫響應資料之前寫headers,因為在寫資料之後headers隨時都可能被重新整理。
簡單描述下資料連線池的工作機制是什麼?
資料庫連線池在初始化時將建立一定數量的資料庫連線放到連線池中,這些資料庫連線的數量是由最小資料庫連線數來設定的。無論這些資料庫連線是否被 使用,連線池都將一直保證至少擁有這麼多的連線數量。連線池的最大資料庫連線數量限定了這個連線池能佔有的最大連線數,當應用程式向連線池請求的連線數超 過最大連線數量時,這些請求將被加入到等待佇列中。
資料庫連線池的最小連線數和最大連線數的設定要考慮到下列幾個因素:
1) 最小連線數是連線池一直保持的資料庫連線,所以如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線資源被浪費;
2) 最大連線數是連線池能申請的最大連線數,如果資料庫連線請求超過此數,後面的資料庫連線請求將被加入到等待佇列中,這會影響之後的資料庫操作。
3) 如果最小連線數與最大連線數相差太大,那麼最先的連線請求將會獲利,之後超過最小連線數量的連線請求等價於建立一個新的資料庫連線。不過,這些大於最小連線數的資料庫連線在使用完不會馬上被釋放,它將被放到連線池中等待重複使用或是空閒超時後被釋放。
jsp亂碼如何解決,給出三種以上的對應解決方案,並給出對應的程式案例;
一、JSP頁面顯示亂碼
<%@ page contentType=”text/html; charset=gb2312″%>
二、表單提交中文時出現亂碼
request.seCharacterEncoding(̶gb2312″)對請求進行統一編碼
三、資料庫連接出現亂碼
要涉及中文的地方全部是亂碼,解決辦法:在資料庫的資料庫URL中加上useUnicode=true&characterEncoding=GBK就OK了。
四、通過過濾器完成
五、在server.xml中的設定編碼格式
面向物件的特徵有哪些方面
1.抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。
2.繼承:
繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數,並且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。面向物件計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過一個受保護的介面訪問其他物件。
4. 多型性:
多型性是指允許不同類的物件對同一訊息作出響應。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、程式碼共享的優勢,很好的解決了應用程式函式同名問題。
String是最基本的資料型別嗎?
基本資料型別包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final型別的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類
int 和 Integer 有什麼區別
Java 提供兩種不同的型別:引用型別和原始型別(或內建型別)。Int是java的原始資料型別,Integer是java為int提供的封裝類。Java為每個原始型別提供了封裝類。
原始型別封裝類:booleanBoolean charCharacter byteByte shortShort
intInteger longLong floatFloat doubleDouble
引用型別和原始型別的行為完全不同,並且它們具有不同的語義。引用型別和原始型別具有不同的特徵和用法,它們包括:大小和速度問題,這種型別以哪種型別的資料結構儲存,當引用型別和原始型別用作某個類的例項資料時所指定的預設值。物件引用例項變數的預設值為 null,而原始型別例項變數的預設值與它們的型別有關。
String 和StringBuffer的區別
JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類提供了數值不可改變的字串。而這個StringBuffer類提供的字串進行修改。當你知道字元資料要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字元資料。
執行時異常與一般異常有何異同?
異常表示程式執行過程中可能出現的非正常狀態,執行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見執行錯誤。java編譯器要求方法必須宣告丟擲可能發生的非執行時異常,但是並不要求必須宣告丟擲未被捕獲的執行時異常。
說出ArrayList,Vector, LinkedList的儲存效能和特性
ArrayList和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(執行緒安全),通常效能上較ArrayList差,而LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。
Collection 和 Collections的區別。
Collection是集合類的上級介面,繼承與他的介面主要有Set 和List.
Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作。
&和&&的區別。
&和&&都可作為邏輯運算子”與”使用,但是&&是”短路與”,運算時先判斷符號前面的表示式的值,如果能夠確定整個表示式的值,則不進行符號後面的表示式的運算。
另外,&也可作為位運算子使用。
HashMap和Hashtable的區別。
HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Mapinterface的一個實現。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以效能不會有很大的差異。
final, finally, finalize的區別。
final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。
sleep() 和 wait() 有什麼區別?
sleep是執行緒類(Thread)的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫sleep不會釋放物件鎖。
wait是Object類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出notify方法(或notifyAll)後本執行緒才進入物件鎖定池準備獲得物件鎖進入執行狀態。
Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?
方法的重寫Overriding和過載Overloading是Java多型性的不同表現。重寫Overriding是父類與子類之間多型性的一種表現,過載Overloading是一個類中多型性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被”遮蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數型別,則稱為方法的過載(Overloading)。Overloaded的方法是可以改變返回值的型別。
error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢位。不可能指望程式能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程式執行正常,從不會發生的情況。
同步和非同步有何異同,在什麼情況下分別使用他們?舉例說明。
如果資料將線上程間共享。例如正在寫的資料以後可能被另一個執行緒讀到,或者正在讀的資料可能已經被另一個執行緒寫過了,那麼這些資料就是共享資料,必須進行同步存取。
當應用程式在物件上呼叫了一個需要花費很長時間來執行的方法,並且不希望讓程式等待方法的返回時,就應該使用非同步程式設計,在很多情況下采用非同步途徑往往更有效率。
abstract class和interface有什麼區別?
宣告方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要建立一個體現某些基本行為的類,併為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的例項。然而可以建立一個變數,其型別是一個抽象類,並讓它指向具體子類的一個例項。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何物件上呼叫介面的方法。由於有抽象類,它允許使用介面名作為引用變數的型別。通常的動態聯編將生效。引用可以轉換到介面型別或從介面型別轉換,instanceof 運算子可以用來決定某物件的類是否實現了介面。
Static Nested Class 和Inner Class的不同。
Static Nested Class是被宣告為靜態(static)的內部類,它可以不依賴於外部類例項被例項化。而通常的內部類需要在外部類例項化後才能例項化。
GC是什麼? 為什麼要有GC?
GC是垃圾收集的意思(Gabage Collection),記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導致程式或系統的不穩定甚至崩潰,Java提供的GC功能