最近在作Java Web方面的整理,遇到些問題,發現本身印象也不是很深入了,這裏做下整理,之後遇到問題再更新。css
一.<%@include file="頁面名稱"%>和<jsp:include page="頁面名稱"/>的區別html
首先推薦觀看博客園的這篇文章:http://www.cnblogs.com/Ghost-Draw-Sign/articles/1835974.html數據庫
簡單說明一下個人理解:瀏覽器
<%@include file%>是jsp指令元素,效果爲把目標頁面的HTML/JSP代碼在編譯時所有直接複製粘貼到這個地方。cookie
而<jsp:include page>是編譯目標JSP頁面。並經過一個方法把編譯好的jsp文件以調用的形式生成在Servlet中。session
<%@include file%>會毫無保留的把目標頁面的內容插入到當前頁面中,因此,好比說你在<body></body>中使用了<%@include file="hello.jsp">,則你的hello.jsp內容應該不要再包含<body>標籤了,換言之,就不該該是一個完整的頁面,並且不能出現重複的聲明ContentType格式。你們能夠編寫兩個都帶有標準HTML格式的<html><head><body>的jsp文件,並在一個jsp文件中使用<%@include file%>包含另一個jsp文件,編譯後打開並查看源代碼,你會發現這些HTML標籤出現了兩遍。app
<jsp:include page>是JSP提供的動做標籤,其效果爲對目標文件單獨進行編譯成Servlet,並在源Serlvet中經過JspRuntimeLibrary.include方法在代碼中引入。要求兩個文件都能被單獨編譯,而且這個過程是在編譯運行階段執行的。框架
以前我在用Java寫本身博客時也遇到了。通常而言更喜歡用<%@include file%>,把用到的css/js單獨放到一個頁面中,而且把上方的導航欄和右邊的側欄以及下方的說明欄也用這種形式引入,減小了代碼的引入。<jsp:include>不多用,不過整體上效果應該都差很少。jsp
二.<jsp:forword page/>的用法:this
一般,咱們不該該直接暴露jsp頁面,而是客戶端先訪問一個URL地址,Web應用將該URL轉發給處理器處理,處理器執行完返回jsp頁面。因此,通常JSP文件應該放在WEB-INF文件夾中,這樣客戶便沒法訪問了。
如今舉一個奇葩的例子:不使用WEB-INF方法:我想讓客戶直接訪問index.jsp,裏面包含了必須通過處理器返回的數據,可是直接訪問index.jsp是無效的,你看,你直接訪問.jsp文件我也能取到數據庫中數據,Diao吧。能夠有如下辦法:
1.把原來的hello.jsp更名(好比ok.jsp),取名index.jsp
2.index.jsp只須要有這一句<jsp:forword page="initOKJSP.servlet"/>
<!--這個initOKJSP.servlet是用於處理生成jsp的Serlvet,最後把請求轉發到ok.jsp-->
3.在瀏覽器輸入~/index.jsp便可看到ok.jsp的頁面效果
反正就是這麼一個效果,在jsp頁面中使用<jsp:forword>標籤能直接把當前的請求轉發到目標文件(能夠是jsp,servlet甚至action),起到了緩衝的做用。不過推薦你們仍是把jsp文件放到WEB-INF中,而後可使用MVC框架對請求進行處理。
三.4種做用域和PageContext
JSP包含四種做用域,分別是page,request,session,application,相信搞Java的必定都很熟。這四種做用範圍我分別總結以下:
page:至關與Servlet中的this,表示自身,換句話說,只在當前頁面有效。
request:請求範圍,使用請求轉發時,地址URL不會變而頁面會變,request的做用在這兩張頁面上(通常狀況是兩個,只要URL不改都是同一個request)
session:只要瀏覽器不關,一直是同一個session實例。sessionId放在本機,服務端根據id獲取session內容
application:只要應用沒有掛掉,全局共享
PageContext和Page不一樣,PageContext包含了全部與應用相關的對象的引用。從PageContext實例能夠獲取page,request,session甚至application,相反從這四個對象也能夠得到PageContext。PageContext是宏觀上的對象,對其進行set/getAttribute會依次從page,request,session,application中查找。
四.如何使用Jsp提供的變量保存數據?
如下是我我的簡單的總結,但願和你們互相補充交流,有錯誤也請指出,謝謝~~
pageScope:無啥大用,能夠放全局變量。話說與其用Java實現全局變量的功能倒不如使用JavaScript
requestScope:重要屬性,包括表單提交,Service返回到頁面的數據
sessionScope:購物車,用戶在線狀態
applicationScope:數據庫鏈接池
cookie:用戶帳號(加密後密碼),購物車(建議用cookie),用戶偏好
接下來,看到了再慢慢補充吧......