小余老師繼續帶你複習jsp筆記

7.JSP的9大隱式對象

①隱式對象:是JSP中特有的,一個JSP頁面新建後,不需要聲明就可以直接使用的對象,這些對象默認隱藏在JSP頁面中。能夠很方便的開發JSP代碼。JSP運行過程也是能夠保證這些對象可以轉換成Java代碼的。

②9大隱式對象

Controller方法中可以用String[]接收,或者pojo的String[]屬性接收。兩種方式任選其一即可。

javax.servlet.jsp.PageContext pageContext = null;javax.servlet.jsp.JspWriter out = null;javax.servlet.http.HttpSession session = null; javax.servlet.http.HttpServletRequest requestjavax.servlet.http.HttpServletResponse response javax.servlet.ServletContext application = null;javax.servlet.ServletConfig config = null;java.lang.Object page = this; java.lang.Throwable exception

③分類:

⑴作用域對象:

Ⅰ.javax.servlet.jsp.PageContext pageContext = null;詳解:pageContext:只能在當前頁面存數據,取數據。實際上SUN公司在定義所有的JSP 隱式對象的時候,使用了同一個介面----PageContext(在JSP頁面中使用的所有對象,都可以從pageContext對象中得到)屬性:(int 類型)pageContext.PAGE_SCOPE pageContext.REQUEST_SCOPEpageContext.SESSION_SCOPEpageContext.APPLICATION_SCOPE屬性方法:pageContext.getException()pageContext.getPage()pageContext.getRequest()pageContext.getResponse()pageContext.getServletConfig()pageContext.getServletContext()pageContext.getSession()pageContext.getOut();通過公共介面,得到保存在其他隱式對象中的數據session.setAttribute("aaa","bbbb");session.getAttribute("aaa"); pageContext.setAttribute("stu",stu,PageContext.SESSION_SCOPE);pageContext.getAttribute("aaa",PageContext.SESSION_SCOPE);Ⅱ.javax.servlet.http.HttpServletRequest request Ⅲ.javax.servlet.http.HttpSession session = null;Ⅳ.javax.servlet.ServletContext application = null;

⑵輸入輸出對象:

Ⅰ.javax.servlet.jsp.JspWriter out = null; 詳解:主要用於設置響應的內容,一般指整個網頁的html代碼給用戶看,帶緩衝的輸出對象, 輸出位元組流,緩衝區大小通過page指令指定。從響應對象中得到的輸出對象,主要用於輸出頁 面的html代碼,也可以輸出文本字元串、xml字元串、JSON 字元串等。使用out只能輸出字元 串,也是帶緩衝的輸出對象。 Ⅱ.javax.servlet.http.HttpServletResponse response 詳解:主要用於設置響應頭信息,方法有限,能夠返回的數據也有限,給瀏覽器看。 Ⅲ.javax.servlet.http.HttpServletRequest request 詳解:所有web程序輸入的內容全部在該對象中

⑶輔助類對象:

javax.servlet.ServletConfig config = null;java.lang.Object page = this; java.lang.Throwable exception

8. Java中處理緩衝的兩種方式

①超出緩衝區不是致命錯誤;在超出緩衝區時,只需刷新輸出即可。自動調用 out.flush();

②超出緩衝區是致命錯誤;在超出緩衝區時,引發一個異常。

③JSP中兩種方法都可以處理,默認會給每個頁面的out分配8kb緩存空間,當緩存用完後,會自動調用flash().所以一般我們使用jsp不會見到緩存異常。

如果一個頁面不運行自動清空緩存。

<%@ page autoFlush="false" %>

(1)後台得到數據後,希望一次性把所有內容全部輸出到頁面;

clear() throws java.io.IOException,清除緩衝區的內容。如果已經刷新緩衝區,則clear操作將拋出。IOException,指示某些數據已經不可撤消地寫入了客戶端響應流。

(2)後台得到數據後,一點一點的傳遞給頁面;

clearBuffer()清除緩衝區的當前內容。與clear()不同,如果已經刷新緩衝區,此方法不會拋出 IOException。它只清除緩衝區的當前內容,然後返回。

總結:Ajax應用中,會使用out對象,默認的緩存就足夠。自動導入、導出報表,後台的數據處理量較大,輸出到前台就需要處理緩存,一般處理緩存的項目,都是比較複雜的項目。緩存處理不好,用戶體驗就會非常糟糕。

9.EL表達式

①概述:EL(Expression Language)目的:為了使JSP寫起來更加簡單。表達式語言的靈感來自於ECMAScript和XPath表達式語言,它提供了在JSP中簡化表達式的方法。它既不是編程語言也不是腳本語言。基於可用的命名空間(PageContext 屬性)、嵌套屬性和對集合、操作符(算術型、關係型和邏輯型)的訪問符、映射到Java類中靜態方法的可擴展函數以及一組隱式對象。

EL提供了一些標識符、存取器和運算符,用來檢索和操作駐留在JSP容器中的數據。EL表達式只能用在JSP頁面中,而且只能用於從作用域對象中讀取數據,不能寫入數據,也不能修改或刪除數據。

②EL表達式的組成:(1)標識符 (2)存取器 (3)運算符

③EL表達式中的標識符、運算符、存取器

⑴標識符:

有很多標識符,常用的有11個;很多與JSP中的隱式對象是相同的。

JSP pageContext ${pageContext.request} <% pageContext.getRequest() %> 作用域 pageScope requestScope request.getAttribute("name");sessionScopeapplicationScope 請求參數 param request.getParameter("paramName");paramValues請求頭信息 header request.getHeader(); headerValues Cookie cookie ${cookie.loginName} Cookie[] cks = request.getCookies(); if(cks != null){for(int i=0;i<> Cookie c = cks[i]; //該對象中有 name value //判斷用戶名 if("loginName".equals(c.getName())){loginname = c.getValue();}}} 項目 initParam ${initParam.projectName} servletContext.getInitParameter("projectName"); 初始化參數

⑵存取器:

. 最常用的存取器,能夠自動調用對應名稱的getXXXX()[] 從數組中取數據,或從map對象中取數據時使用 UserInfo info = new UserInfo(); info.setPhone("15051676451"); User u = new User();u.setName("aaa"); u.setAge(20); u.setInfo(info); request.setAttribute("user",u); //JSP 頁面中取數據使用 EL ${requestScope.user.name} ${requestScope.user.info.phone}

⑶運算符:

算術運算符:+ - * /(div) %(mod)

關係運算符:>(gt) <(lt) ==(eq) !=(ne) <=(le) >=(ge)

邏輯運算符:&&(and) ||(or) !(not)

驗證運算符:empty

例如:

計算購物車中商品明細的總價:

${sessionScope.orderLines.product.price * 3}

邏輯運算進行比較:

${(x >= min) && (x <= max)}

驗證:

//if(session.getAttribute("loginUser") != null)${empty sessionScope.loginUser} == 等於null返回true${not empty sessionScope.loginUser} == 不等於null返回true

小結:

(1)EL 表達式使用過程 。

${}--->${標識符.}--->${標識符.attributeName.}--->${標識符.attributeName.propertyName}

(2)EL 表達式只能在 JSP 頁面中取值,可以通過標識符來指定取值的作用域範圍,如果不指定,默認按照從小到大的範圍查找。

pageScope-(找不到)->requestScope-(找不到)->sessionScope-(找不到)->applicationScopesession.setAttribute("name",value); //name 要特殊,不要衝突

(3)在El表達式中,可以使用運算符進行複雜運算。

(4)EL表達式一般是與JSTL配套使用的。


推薦閱讀:

20年風水老師傅說: 家居風水必須要懂的這些禁忌
老師批完考卷後,可能會當場陣亡
潘鷹老師研讀系列:情為何物
龐明老師的智能氣功功法中關於形意拳明勁的論述1
[轉載]跟著伽南老師冥想靜坐(附伽南老師冥想詞)

TAG:筆記 | 複習 | 老師 |