jsp
jsp概念
JSP全稱Java Server Pages
簡化的servlet設(shè)計,在html標簽中嵌套Java代碼,用以高效開發(fā)web應(yīng)用的動態(tài)標簽。
- jsp的作用:
替換顯示頁面部分的servlet(使用*.jsp文件替換XXXJSP.java)
jsp結(jié)構(gòu)
- 網(wǎng)絡(luò)服務(wù)器需要一個 JSP 引擎,也就是一個容器來處理 JSP 頁面。容器負責(zé)截獲對 JSP 頁面的請求
- JSP 容器與 Web 服務(wù)器協(xié)同合作,為JSP的正常運行提供必要的運行環(huán)境和其他服務(wù),并且能夠正確識別專屬于 JSP 網(wǎng)頁的特殊元素。
- jsp處理流程
jsp的生命周期
-
以下是JSP生命周期中所走過的幾個階段:
編譯階段:servlet容器編譯servlet源文件,生成servlet類,分為三個步驟---------------------------------------------------* 解析JSP文件。* 將JSP文件轉(zhuǎn)為servlet。* 編譯servlet。初始化階段:加載與JSP對應(yīng)的servlet類,創(chuàng)建其實例,并調(diào)用它的初始化方法---------------------------------------------------* 容器載入JSP文件后,它會在為請求提供任何服務(wù)前調(diào)用jspInit()方法。* 如果您需要執(zhí)行自定義的JSP初始化任務(wù),復(fù)寫jspInit()方法就行了執(zhí)行階段:調(diào)用與JSP對應(yīng)的servlet實例的服務(wù)方法---------------------------------------------------* 當(dāng)JSP網(wǎng)頁完成初始化后,JSP引擎將會調(diào)用_jspService()方法。銷毀階段:調(diào)用與JSP對應(yīng)的servlet實例的銷毀方法,然后銷毀servlet實例---------------------------------------------------* jspDestroy()方法在JSP中等價于servlet中的銷毀方法 -
生命周期的代碼練習(xí)
- 第一次請求
- 第二次訪問
jsp的語法
- 腳本程序
腳本程序可以包含任意量的Java語句、變量、方法或表達式,只要它們在腳本語言中是有效的。
- 腳本程序的格式
- or
任何文本、HTML標簽、JSP元素必須寫在腳本程序的外面。
- 中文編碼問題
- 如果我們要在頁面正常顯示中文,我們需要在 JSP 文件頭部添加以下代碼:
- JSP注釋
- <%-- 該部分注釋在網(wǎng)頁中不會被顯示–%>
- 快捷鍵:單行注釋 Ctrl+/
- 多行注釋: Shift+Ctrl+/
- jsp的指令
- jsp 行為
- jsp的格式
- jsp中的控制流語句
- 判斷語句的代碼演示
- switch case
- 循環(huán)語句
- while循環(huán)
jsp 的隱式對象
JSP隱式對象是JSP容器為每個頁面提供的Java對象,開發(fā)者可以直接使用它們而不用顯式聲明。 JSP隱式對象也被稱為預(yù)定義變量。-
request對象
每當(dāng)客戶端請求一個JSP頁面時,JSP引擎就會制造一個新的request對象來代表這個請求。 -
response對象
當(dāng)服務(wù)器創(chuàng)建request對象時會同時創(chuàng)建用于響應(yīng)這個客戶端的response對象。response對象也定義了處理HTTP頭模塊的接口。通過這個對象,開發(fā)者們可以添加新的cookies,時間戳,HTTP狀態(tài)碼等等。 -
out對象
用來在response對象中寫入內(nèi)容。是一個輸出流 -
session對象
和Java Servlets中的session對象有一樣的行為。session對象用來跟蹤在各個客戶端請求間的會話。 -
application對象
這個對象在JSP頁面的整個生命周期中都代表著這個JSP頁面。這個對象在JSP頁面初始化時被 創(chuàng)建,隨著jspDestroy()方法的調(diào)用而被移除。通過向application中添加屬性,則所有組成您web應(yīng)用的JSP文件都能訪問到這些屬性。 -
config對象
這個對象允許開發(fā)者訪問Servlet或者JSP引擎的初始化參數(shù),比如文件路徑等。 -
pageContext 對象
pageContext對象是javax.servlet.jsp.PageContext 類的實例,用來代表整個JSP頁面。這個對象主要用來訪問頁面信息,同時過濾掉大部分實現(xiàn)細節(jié)。這個對象存儲了request對象和response對象的引用。application對象,config對象,session對象,out對象可以通過訪問這個對象的屬性來導(dǎo)出。pageContext對象也包含了傳給JSP頁面的指令信息,包括緩存信息,ErrorPage URL,頁面scope等。PageContext類定義了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余種方法,有一半繼承自javax.servlet.jsp.JspContext 類。其中一個重要的方法就是 removeAttribute(),它可接受一個或兩個參數(shù)。比如,pageContext.removeAttribute("attrName") 移除四個scope中相關(guān)屬性,但是下面這種方法只移除特定 scope 中的相關(guān)屬性: -
page 對象
這個對象就是頁面實例的引用。它可以被看做是整個JSP頁面的代表。page 對象就是this對象的同義詞。 -
exception 對象
exception 對象包裝了從先前頁面中拋出的異常信息。它通常被用來產(chǎn)生對出錯條件的適當(dāng)響應(yīng)。 -
jsp動作屬性
jsp:include動作元素用來包含靜態(tài)和動態(tài)的文件。該動作把指定文件插入正在生成的頁面
而這里的jsp:include動作不同,插入文件的時間是在頁面被請求的時候。
- 代碼實現(xiàn)案里
- date.jsp
- main.jsp
2. jsp:useBean動作元素
用來加載一個將在JSP頁面中使用的JavaBean
在類載入后,我們既可以通過 jsp:setProperty 和 jsp:getProperty 動作來修改和檢索bean的屬性。
jsp:setProperty用來設(shè)置已經(jīng)實例化的Bean對象的屬性,
jsp:getProperty動作提取指定Bean屬性的值,轉(zhuǎn)換成字符串,然后輸出
- 2,3,4相關(guān)的案例
- 先創(chuàng)建一個bean
- 測試的jsp頁面
5. jsp:forward 動作元素
jsp:forward動作把請求轉(zhuǎn)到另外的頁面。jsp:forward標記只有一個屬性page。
page屬性包含的是一個相對URL。page的值既可以直接給出,也可以在請求的時候動態(tài)計算,可以是一個JSP頁面或者一個 Java Servlet.
- 案例
- date頁面
- main頁面
- 輸出結(jié)果
訪問的是main頁面,因為有<jsp:forward page=“07-date.jsp”/>,
所以最后我們看到的是date頁面
如下圖所示
jsp:plugin動作元素
jsp:plugin動作用來根據(jù)瀏覽器的類型,插入通過Java插件 運行Java Applet所必需的OBJECT或EMBED元素。如果需要的插件不存在,它會下載插件,然后執(zhí)行Java組件。 Java組件可以是一個applet或一個JavaBean。plugin動作有多個對應(yīng)HTML元素的屬性用于格式化Java 組件。param元素可用于向Applet 或 Bean 傳遞參數(shù)。jsp:element 、 jsp:attribute、 jsp:body動作元素動態(tài)定義XML元素。動態(tài)是非常重要的,這就意味著XML元素在編譯時是動態(tài)生成的而非靜態(tài)。
- 案例
元素允許在JSP頁面和文檔中使用寫入文本的模板,語法格式如下:
<jsp:text>模板數(shù)據(jù)</jsp:text>jsp客戶端請求
https://www.runoob.com/jsp/jsp-client-request.html
jsp服務(wù)器響應(yīng)
https://www.runoob.com/jsp/jsp-server-response.html
jsp的表單處理
我們在瀏覽網(wǎng)頁的時候,經(jīng)常需要向服務(wù)器提交信息,并讓后臺程序處理。瀏覽器中使用 GET 和 POST 方法向服務(wù)器提交數(shù)據(jù)。
- get方法
GET方法將請求的編碼信息添加在網(wǎng)址后面,網(wǎng)址與編碼信息通過"?"號分隔。如下所示:
http://www.runoob.com/hello?key1=value1&key2=value2GET方法是瀏覽器默認傳遞參數(shù)的方法,一些敏感信息,如密碼等建議不使用GET方法。
用get時,傳輸數(shù)據(jù)的大小有限制 (注意不是參數(shù)的個數(shù)有限制),最大為1024字節(jié)。
- post方法
一些敏感信息,如密碼等我們可以通過POST方法傳遞,POST提交數(shù)據(jù)是隱式的。
POST提交數(shù)據(jù)是不可見的,GET是通過在url里面?zhèn)鬟f的(可以看一下你瀏覽器的地址欄)。
JSP使用getParameter()來獲得傳遞的參數(shù),getInputStream()方法用來處理客戶端的二進制數(shù)據(jù)流的請求。
- jsp讀取表單的信息
- getParameter(): 使用 request.getParameter() 方法來獲取表單參數(shù)的值。
- getParameterValues(): 獲得如checkbox類(名字相同,但值有多個)的數(shù)據(jù)。 接收數(shù)組變量 ,如checkbox類型
- getParameterNames():該方法可以取得所有變量的名稱,該方法返回一個 Enumeration。
- getInputStream():調(diào)用此方法來讀取來自客戶端的二進制數(shù)據(jù)流。
- 案例
- 當(dāng)訪問如下路徑的時候。會出現(xiàn)下以效果
http://localhost:8080/web_jsp/11-get.jsp?name=%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B&url=http://ww.runoob.com
- 編寫一個html頁面來傳入訪問參數(shù)
- 當(dāng)訪問http://localhost:8080/web_jsp/mian%E8%AE%BF%E9%97%AEget%E9%A1%B5%E9%9D%A2.html
時,界面如下
- 當(dāng)輸入?yún)?shù)之后提交表單結(jié)果如下
- 使用表單的 POST 方法實例
- post測試
- 傳遞 Checkbox 數(shù)據(jù)到JSP程序
- html頁面
- jsp頁面
運行結(jié)果
- 讀取表單的所有數(shù)據(jù)并且遍歷
jsp過濾器[存在疑難問題]
-
javax.servlet.Filter 接口定義了三個方法:
1. public void doFilter (ServletRequest, ServletResponse, FilterChain)* 該方法完成實際的過濾操作,當(dāng)客戶端的請求與過濾器設(shè)置的 URL 匹配時,* Servlet 容器將先調(diào)用過濾器的 doFilter 方法。FilterChain 用于訪問后續(xù)過濾器。2. public void init(FilterConfig filterConfig)* 初始化3. public void destroy()* 刪除攔截器
JSP Cookie 處理
Cookie 是存儲在客戶機的文本文件,它們保存了大量軌跡信息。在 Servlet 技術(shù)基礎(chǔ)上,JSP 顯然能夠提供對 HTTP cookie 的支持
- JSP Cookie 處理需要對中文進行編碼與解碼,方法如下:
String str = java.net.URLEncoder.encode(“中文”, “UTF-8”); //編碼
String str = java.net.URLDecoder.decode(“編碼后的字符串”,“UTF-8”); // 解碼
Cookie 通常在 HTTP 信息頭中設(shè)置(雖然 JavaScript 能夠直接在瀏覽器中設(shè)置 cookie)。在 JSP 中,設(shè)置一個 cookie 需要發(fā)送如下的信息頭給服務(wù)器:
HTTP/1.1 200 OKDate: Fri, 04 Feb 2015 21:03:38 GMTServer: Apache/1.3.9 (UNIX) PHP/4.0b3Set-Cookie: name=runoob; expires=Friday, 04-Feb-17 22:03:38 GMT; path=/; domain=runoob.comConnection: closeContent-Type: text/html- 使用 JSP 設(shè)置 cookie
(1)創(chuàng)建一個 cookie 對象: 調(diào)用 cookie 的構(gòu)造函數(shù),使用一個 cookie 名稱和值做參數(shù),它們都是字符串。
Cookie cookie = new Cookie("key","value");(3) 將 cookie 發(fā)送至 HTTP 響應(yīng)頭中:調(diào)用 response.addCookie() 函數(shù)來向 HTTP 響應(yīng)頭中添加 cookie。
response.addCookie(cookie);- 案例
- 使用 JSP 讀取 Cookie
調(diào)用 request.getCookies() 方法來獲得一個 javax.servlet.http.Cookie 對象的數(shù)組,然后遍歷這個數(shù)組,使用 getName() 方法和 getValue() 方法來獲取每一個 cookie 的名稱和值。
- 案例
- 使用 JSP 刪除 cookie
- 獲取一個已經(jīng)存在的 cookie 然后存儲在 Cookie 對象中。
- 將 cookie 的有效期設(shè)置為 0。
- 將這個 cookie 重新添加進響應(yīng)頭中。
JSP Session
HttpSession接口來識別一個用戶,存儲這個用戶的所有訪問信息。
<%// 獲取session創(chuàng)建時間Date createTime = new Date(session.getCreationTime());// 獲取最后訪問頁面的時間Date lastAccessTime = new Date(session.getLastAccessedTime());String title = "再次訪問菜鳥教程實例";Integer visitCount = new Integer(0);String visitCountKey = new String("visitCount");String userIDKey = new String("userID");String userID = new String("ABCD");// 檢測網(wǎng)頁是否有新的訪問用戶if (session.isNew()){title = "訪問菜鳥教程實例";session.setAttribute(userIDKey, userID);session.setAttribute(visitCountKey, visitCount);} else {visitCount = (Integer)session.getAttribute(visitCountKey);visitCount += 1;userID = (String)session.getAttribute(userIDKey);session.setAttribute(visitCountKey, visitCount);} %>-
刪除Session數(shù)據(jù)
移除一個特定的屬性:調(diào)用public void removeAttribute(String name) 方法來移除指定的屬性。刪除整個會話:調(diào)用public void invalidate() 方法來使整個session無效。
JSP 連接數(shù)據(jù)庫
- 鏈接數(shù)據(jù)庫
- select
總結(jié)
- 上一篇: 在Octane中提升渲染速度的技巧(第1
- 下一篇: Mac版本Octane渲染器安装教程支持