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安全.
會出現線程不安全問題。不管是doGet仍是doPost去調用,服務器端處理的過程都是同樣的,那麼咱們能夠把處理過程單獨寫在另一個方法handle裏,讓兩個方法都去調用handle,根據不一樣請求去調用不一樣的方法。
把全部的session的數據保存到Mysql服務器上,全部Web服務器都來這臺Mysql服務器來獲取Session數據。
SimpleTagSupport,通常調用doTag方法 或者實現SimpleTag接口
在 jsp 中處理 JSON,一般須要配套使用 JQuery 控件,而且導入一些 Common jar 包。使用 JQuery 控件是由於它能有效的解析而且展現 JSON 數據,導入Common 則是由於 Java 中的對象並非純粹的數據,須要經過這些 Jar 包的處理使之轉化成真實數據。
線程安全就是多線程操做同一個對象不會有問題,線程同步通常來保護線程安全,因此能夠在Servlet的線程裏面加上同步方法或同步塊。(Synchronized)能夠保證在同一時間只有一個線程訪問,(使用同步塊會致使性能變差,最好不去使用實例變量)
重定向是客戶端行爲,轉發是服務器端行爲 重定向時服務器產生兩次請求,轉發產生一次請求,重定向時能夠轉發到項目之外的任何網址,轉發只能在當前項目裏轉發 重定向會致使request對象信息丟失。轉發則不會 轉發的url不會變,request.getRequestDispatch()。forward() 重定向的url會改變,response.getRedirect();
jsp的可讀性強,容易維護,而且jsp在最後會編譯成servlet servlet容易調試
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++){}html
Jsp不可以直接調用窗口,只能先 生成打開窗口的js,再由js調用
Session不能經過new建立,須要經過調用getSession()或者getSession(true)方法建立,getSession()是自動建立session,getSession(true)是強制建立session,setAttribute()方法能夠用於傳值,getAttribute()能夠用於取值 (第一次建立session的時候,就是訪問第一次一個jsp頁面<這個頁面的page指令 沒有設置session=false>) 銷燬session調用invalidate方法 經過setMaxInactiveInterval()能夠設定session的生存時間(web.xml能夠設置session的生存時間)
pageContext :只對當前jsp頁面有效,裏面封裝了基本的request和session的對象
Request :對當前請求進行封裝
Session :瀏覽器會話對象,瀏覽器範圍內有效
Application :應用程序對象,對整個web工程都有效
Out :頁面打印對象,在jsp頁面打印字符串
Response :返回服務器端信息給用戶
Config :單個servlet的配置對象,至關於servletConfig對象
Page :當前頁面對象,也就是this
Exception :錯誤頁面的exception對象,若是指定的是錯誤頁面,這個就是異常對象java
Page :指令是針對當前頁面的指令
Include :用於指定如何包含另外一個頁面
Taglib :用於定義和指定自定義標籤jquery
Forward,執行頁面跳轉,將請求的處理轉發到另外一個頁面
Param :用於傳遞參數
Include :用於動態引入一個jsp頁面
Plugin :用於下載javaBean或applet到客戶端執行
useBean :使用javaBean
setProperty :修改javaBean實例的屬性值
getProperty :獲取javaBean實例的屬性值web
request.getParameter() 返回客戶端的請求參數與值 request.getParameterNames() 返回全部可用屬性名的枚舉 request.getParameterValues() 返回包含參數的全部值的數組
一個是服務端,一個是客戶端 Servlet是獨立於平臺和協議的服務器端的java應用程序,能夠動態生成web頁面,並採用響應--請求的模式提供web服務 javaScript是一種解釋性語言,用於向html頁面提供交互行爲,一般被直接嵌入在html頁面中 servlet是java語言編寫的web應用 js是基於html上的一種解釋語言
客戶端發出請求(request),jsp引擎將jsp頁面翻譯成servlet的java源文件,在Tomcat中將源文件編譯成class文件,並加載到內存中執行,把結果返回(response)給客戶端。
A.sendRedirect B.forward C.兩個都不能 D.兩個均可以
不一樣:
Html是靜態,servlet是動態
html頁面由服務器直接返回,
servlet是用來處理客戶請求,並返回html頁面
//servlet須要服務器調用servlet方法生成動態html頁面,且須要在web.xml中配置url路徑ajax
Cookie,session和application,
Cookie是http對象,客戶端與服務端均可以操縱sql
cookie是在客戶端保持狀態,session是在服務器端保持狀態,因爲cookie是保存在客戶端本地的,因此數據很容易被竊取,當訪問量不少時,使用session則會下降服務器的性能,application的做用域是整個工程裏只有一個,能夠在不一樣瀏覽器之間共享數據,全部人均可以共享,所以application也是不安全的數據庫
Session用於客戶端與服務器之間保持狀態的解決方案,數據保存在服務器內存中,底層是有cookie實現的 Application的做用域是整個工程裏只有一個,能夠在不一樣瀏覽器之間共享數據,全部人均可以共享,所以application是不安全的
Request,out,response , pageContext , session , application , config , page , exception,也即jsp的九大內置對象
Request是客戶端向服務端發送請求 Response是服務端對客戶端請求作出響應 Session在servlet中不能直接使用,須要經過getSession()建立,若是沒有設定它的生命週期,或者經過invildate()方法銷燬,關閉瀏覽器session就會消失 Application不能直接建立,存在於服務器的內存中,由服務器建立和銷燬
由於session底層是由cookie實現的,當客戶端的cookie被禁用後,session也會失效,且應儘可能少向session中保存信息,session的數據保存在服務器端,當有大量session時,會下降服務器的性能
可使用javaScript的方法navigator.cookieEnabled判斷瀏覽器是否支持cookie
Request能夠經過getAttribute()方法直接取值,也可經過getParameter()取值 Session須要經過request.getSession().getAttribute()才能取值 Request是針對一次請求,session是針對整個會話 在頁面經過contentType,pageEncoding,content設置編碼格式,必需要一致
Jsp頁面跳轉有兩種方式,forward和redirect(轉發和重定向) Forward只能在當前項目裏跳轉,只產生一次請求,request保存的變量不會丟失,url地址不會改變 Redirect可跳轉到項目之外的任何頁面,產生兩次請求,request保存的變量會所有丟失,url地址會發生改變,變化爲第二個請求的地址
setCharacterEncoding(String arg0):設置編碼格式 getCharacterEncoding():獲取編碼格式 getRequestDispatcher(String path):返回一個RequestDispatcher對象
setAttribute("name",Object obj):設置名字爲name的request參數的值,該值是由Object類型的obj指定 getAttribute("name"):返回name屬性值 getAttributeNames():返回全部可用屬性名的枚舉 setCharacterEncoding(String charset):設置編碼格式 getCharacterEncoding():獲取編碼格式 sendRedirect(String location):返回對包裝的響應對象調用
setAttribute("name",Object obj):設置名字爲name的request參數的值,該值是由Object類型的obj指定 getAttribute("name"):返回name屬性值 getAttributeNames():返回全部可用屬性名的枚舉
setAttribute("name",Object obj):設置名字爲name的request參數的值,該值是由Object類型的obj指定 getAttribute("name"):返回name屬性值 getAttributeNames():返回全部可用屬性名的枚舉 invalidate():使當前會話失效 setMaxInactiveInterval():指定在Servlet容器使此會話失效以前客戶端請求之間的時間間隔,以秒爲單位。負數時間指示會話永遠不會超時 getMaxInactivelnterval():返回servlet 容器在客戶端訪問之間將使此會話保持打開狀態的最大時間間隔,以秒爲單位。在此間隔以後,servlet 容器將使會話無效
setAttribute("name",Object obj):設置名字爲name的request參數的值,該值是由Object類型的obj指定 getAttribute("name"):返回name屬性值
print():打印信息 println():換行打印信息
getInitParameter(String paramNarne):從web.xml中獲取指定名稱的值
getInitParameterNames():從web.xml中獲取全部的名稱json
Exception:針對錯誤網頁,未捕捉的例外
getMessage():返回異常的詳細信息
getClass():返回異常的名稱數組
可經過form表單的get或post將值傳遞到後臺,也可經過setAttribute()方法將值傳遞到後臺
在servlet中經過request.getParameter()方法能夠獲取表單的值
或者是request.getParameterValuse();瀏覽器
表單傳參,url傳參,jquery.ajax傳參
經過設置屬性setAttribute(),經過getAttribute()拿值,getParameter()方法能夠作到
不能
404 :找不到url請求的路徑,通常是工程名不對或者拼寫錯誤 500 :服務器內部錯誤,通常是服務器內部代碼編寫錯誤,也有多是拋異常致使
<c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>
工程名不對或者拼寫錯誤,404錯誤通常是找不到客戶端請求的文件
當web服務器啓動的時候,servlet生命週期開始,經過init方法初始化servlet,經過不一樣的請求調用doGet或doPost方法,最後經過destroy()方法進行銷燬
經過使用屬性hidden能夠將元素隱藏
Session不能經過new建立,要經過調用getSession()方法建立,數據保存在服務器端,單個客戶端session是共享的,底層是由cookie實現的,大小沒有限制 Application的做用域是整個工程只有共享一個,生命週期比session大 Cookie須要經過new建立,數據保存在客戶端中,cookie保存的數據不能超過4k,不安全
如將ISO-8859-1輸出爲GBK格式的字符, 經過new String(byte[] bytes,String charset) 構造器設置編碼構造一個新的String(new String("ISO-8859-1","GBK"));
jsp:include等
經過session中的isNew()能夠判斷是不是新用戶
會話跟蹤技術是用於維持客戶端和服務器端通訊的技術。 經過session,cookie或者application可實現會話跟蹤
Web容器會自動爲servlet寫一個無參的構造器,它使用class.forName("").newInstance()反射來建立servlet實例的
是線程不安全的,由於servlet是單例模式,當多個客戶端共同訪問的時候線程不安全。 儘可能用局部變量,同步塊,若是當前字段是不會改變的,用final修飾
最後服務器將響應返回給客戶端
能夠在servlet進行響應處理先後作一些特殊的處理
是行爲元素、是在請求處理階段引入的,引入執行頁面或servlet所生成的應答文本 先編譯,後包含,就是將每一個jsp頁面都單獨轉化成html頁面,最後再將全部的html頁面相加,若是有相同變量不會衝突
是指令元素 是編譯時包含,引入靜態文本(html,jsp),在JSP頁面被轉化成servlet以前和它融和到一塊兒。先包含,後編譯 就是將多個jsp一塊兒解析,最後再一塊兒生成html頁面,若是有相同變量會衝突
可使用pageContext對象來設定屬性,並指定屬性的做用範圍,提供了對JSP頁面內全部的對象及名字空間的訪問
是單例的,能夠提升性能
首先初始化過濾器,而後服務器組織過濾器鏈,全部的請求都必須須要先經過過濾器鏈, 過濾器鏈是一個棧,遵循先進後出的原則 ,全部的請求須要通過一個一個的過濾器,執行順序要根據web.xml裏配置的<filter-mapping>的位置先後執行,每一個過濾器之間經過chain.doFilter鏈接, 最後抵達真正請求的資源,執行完後再從過濾器鏈退出
須要上一頁和下一頁的超連接(至少須要這兩個),經過計算當前頁的頁碼獲取下一頁數據 的起始位置,而後在 MySql 中查詢,若是使用 Oracle 則須要另外計算下一頁數據的結 束位置。 使用hibernate框架,它能夠針對不一樣的數據庫自動產生爲你分頁的代碼。