国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

java攻城師之路--復習java web之jsp入門_El表達式_JSTL標簽庫

2019-11-14 21:15:02
字體:
來源:轉載
供稿:網(wǎng)友
java攻城師之路--復習java web之jsp入門_El表達式_JSTL標簽庫

JSP 技術掌握:JSP語法 + EL + JSTL

為什么sun推出 JSP技術 ? Servlet 生成網(wǎng)頁比較復雜,本身不支持HTML語法,html代碼需要通過response輸出流輸出,JSP支持HTML語法,生成HTML方便。

JSP技術與Servlet 技術區(qū)別和關系?JSP和Servlet技術都是用來動態(tài)生成網(wǎng)頁的,Servlet不支持HTML語法,生成網(wǎng)頁麻煩,JSP支持HTML語法,生成網(wǎng)頁方便,JSP運行時翻譯Servlet 執(zhí)行的。JSP 就是 Servlet 。

JSP運行原理是怎樣的 ?客戶端訪問編寫JSP文件,服務器讀取JSP文件,根據(jù)JSP生成Servlet ,Servlet編譯運行生成網(wǎng)頁。

JSP <%! %> <%= %> <% %> <%! %> 聲明:定義翻譯后Servlet程序的 全局變量或全局方法、內部類<%= %> 表達式 輸出內容到瀏覽器 效果out.PRint <% %> 腳本代碼塊,嵌入java運行代碼 ---- 不翻譯

JSP翻譯Servlet 存放tomcat/work 目錄* JSP翻譯Servlet 頁面當前所有HTML 翻譯為 out.write 輸出

JSP的注釋 支持三種注釋1、JSP注釋:<%-- --%> 只存在JSP文件源碼中,在JSP翻譯Servlet時,這類注釋消失了 * 該類注釋得不到執(zhí)行

2、Java注釋: /** */文檔注釋、 /* */多行注釋、 // 單行注釋 文檔注釋 /** */ 生成javadoc 主要用來注釋 包、類、成員變量、成員方法 ------ 代碼功能使用者多行注釋 和 單行注釋 不會生成javadoc,注釋代碼實現(xiàn)邏輯 用于在方法內 ------ 程序員本身,讀懂代碼進行注釋 * Java注釋 在JSP翻譯為Servlet時存在,在Servlet程序執(zhí)行時,會被忽略,生成HTML網(wǎng)頁源代碼中不存在 * 在Servlet執(zhí)行過程中被忽略

3、HTML注釋 <!-- -->* 在JSP翻譯為Servlet時 會被翻譯 out.print 在生成HTML頁面源代碼中該類注釋 也是存在的

結論:JSP注釋在翻譯階段消失,Java注釋在Servlet運行階段消失,HTML注釋不消失

思考題:<%String s = "abcd";%><!-- 用HTML注釋 注釋 JSP或者java代碼 <%=s%> -->在頁面結果中 <!-- 用HTML注釋 注釋 JSP或者java代碼 abcd --> 結論: HTML注釋無法阻止JSP或者 Java代碼執(zhí)行的

JSP 指令 (JSP Directive)page指令include指令taglib 指令

語法:<%@ 指令名稱 屬性=值 屬性=值 ... %>

page指令用來定義JSP文件的全局屬性 <% page 屬性=值 %>1、language 只能為java2、extends JSP翻譯后Servlet 繼承父類,這個屬性一般不設置 ,如果非要設置,繼承類必須是Servlet實現(xiàn)類 3、session 定義JSP中是否可以直接使用Session隱含對象 如果屬性設置為true在JSP翻譯Servlet時 生成以下兩句代碼 HttpSession session = null;session = pageContext.getSession();* 如果jsp中想使用HttpSession對象,使用session屬性默認值true 4、import 完成 JSP翻譯后 Servlet 導包jsp在翻譯為Servlet 默認導包import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;jre默認導入 java.lang * 在jsp中如果使用類 不屬于以上四個包,需要導包5、buffer autoFlush 設置 out隱含對象屬性 buffer 設置緩沖區(qū)大小autoFlush 設置當緩沖區(qū)滿后,自動刷出6、isELIgnored 設置JSP是否執(zhí)行EL表達式 isELIgnored="false" 不忽略---執(zhí)行解析isELIgnored="true" 忽略 ---- 不解析 * 一般就是默認值false

7、通過contentType和pageEncoding 設置 JSP頁面編碼pageEncoding 是 JSP文件源代碼在硬盤上編碼集contentType 在Servlet生成HTML 傳遞瀏覽器采用編碼

8、通過errorPage 和 isErrorPage 控制 JSP頁面發(fā)生錯誤時跳轉設置錯誤友好頁面 ---- 當頁面發(fā)生錯誤,不應該給用戶看到含有代碼錯誤頁面,看到一個友好頁面 通過errorPage指定 在頁面發(fā)生錯誤跳轉到哪個頁面 * IE 瀏覽器默認好友頁面 ,如果想看到自己編寫友好頁面,關閉IE默認友好頁面 IE 工具欄 --- Internet選項 ----- 高級 -----顯示友好HTTP錯誤信息 將鉤去掉

在錯誤友好頁面中,可以通過設置isErrorPage屬性,獲得錯誤原因

*在實際開發(fā)中,一般不使用上面講解錯誤處理方式

錯誤頁面第二種處理方式: 不僅可以處理500 ,還可以處理404 配置web.xml <error-page> <error-code>500</error-code> <location>/demo5/500.jsp</location></error-page>

include指令 ,用來靜態(tài)包含頁面 ----- 將頁面公共部分提取出來,通過include完成頁面布局語法:<%@ include file="文件路徑" %>

include包含目標頁面整個內容,被包含頁面,不需要是一個完整HTML,只要編寫HTML片段就可以了

靜態(tài)include 原理*在 JSP翻譯為Servlet時,完成包含動作,Servlet程序并沒有執(zhí)行,包含路徑不能用變量、不能含有?拼接參數(shù),目標文件必須存在* 存在特殊案例:被包含頁面存在錯誤,只要包含后Servlet沒有錯誤,就可以執(zhí)行

taglib指令 ,用來在jsp頁面引用標簽庫文件 * 定義標簽作用為了簡化 jsp頁面開發(fā)* 通過taglib 指令引入 jstl標簽庫 ,語法: <%taglib uri="" prefix="" %>uri ---- 定義標簽 唯一命名空間prefixt ---- 命名空間前綴

引用jstl時,在導入jstl.jar中 META-INF/c.tld <short-name>c</short-name> -------- 就是prefix屬性 <uri>http://java.sun.com/jsp/jstl/core</uri> ----- 就是uri屬性

JSP的九個內置對象分別是什么?什么是內置對象? JSP翻譯為Servlet代碼時,有些對象默認已經(jīng)創(chuàng)建好的,這類對象可以直接在jsp中使用,內置對象

page、request、session、application、response、pageContext、out、config、exceptionrequest HttpServletRequest ---- 請求對象responseHttpServletResponse ---- 響應對象session HttpSession ------- 會話對象application ServletContext ------ web應用全局唯一對象config ServletConfig ------ 初始化數(shù)據(jù) page this (HttpServlet)pageContext PageContextexception Throwable (所有異常父類) ----- 當頁面是一個錯誤頁面,用exception獲得異常信息 * Throwable 是 exception 類 父類out JspWriter

page 代表當前jsp生成Servlet對象 * page 是 Object類型,只能使用Object中方法 ---- 這個對象在開發(fā)中不建議 使用* 可以將page強制轉換 HttpServlet對象的

Servlet有幾種數(shù)據(jù)范圍? 三種: request、session、servletcontextJSP 在 Servlet三種數(shù)據(jù)范圍基礎上,新添加page數(shù)據(jù)范圍 ---- JSP 四種數(shù)據(jù)范圍: page request session application* page數(shù)據(jù)范圍存放數(shù)據(jù) 只在當前jsp內有效

pageContext代表當前頁面上下文 1、向page范圍存取數(shù)據(jù) findAttribute 依次在 page 、request 、session 、 application 四個數(shù)據(jù)范圍進行數(shù)據(jù)查找 EL 中 ${name} 調用 findAttribute 在四個范圍中依次查找數(shù)據(jù)

2、pageContext 用來 獲得其它八個隱含對象 * pageContext封裝八個隱含對象意義:框架編寫,得到PageContext對象 相當于得到 JSP九個內置對象

out對象out功能向瀏覽器輸出信息,是JspWriter類型,內部使用PrintWriter實現(xiàn),擁有獨立緩沖區(qū)。out創(chuàng)建 ,out對象通過pageContext對象獲得,創(chuàng)建pageContext對象時,指定out緩沖區(qū)大小以及是否自動flush * 通過 page指令 buffer autoFlush 設置out 緩存區(qū)大小 以及是否自動 flush

out向瀏覽器輸出內容,response.getWriter 向瀏覽器輸出內容 , 區(qū)別?out.println("aaa");response.getWriter().println("bbb");out.print("ccc");response.getWriter輸出內容,在out輸出內容之前

page request session application response out config pageContext exception

JSP指令和JSP標簽 區(qū)分?JSP 指令 DirectiveJSP 標簽 Action

jsp中六個動作標簽<jsp:useBean> <jsp:setProperty> <jsp:getProperty> ----- 與 JavaBean操作相關 明天學習<jsp:include> <jsp:forward> <jsp:param >

<jsp:include> 效果 等價于 request.getRequestDispatcher().include <jsp:forward> 效果 等價于 request.getRequestDispatcher().forward

<jsp:include> 標簽 功能 等價于 <%@ include %>原理:動態(tài)包含 語法:<jsp:include page="文件路徑" />

被包含頁面不需要完整html,只需要編寫html片段

jsp:include 和 @include 區(qū)別@include include指令, 靜態(tài)包含,在jsp翻譯為Servlet時,執(zhí)行包含動作,包含結果是目標頁面翻譯Servlet源代碼 ,翻譯為一個Servlet一起執(zhí)行jsp include 標簽,動態(tài)包含, 在index servlet執(zhí)行時 完成包含動作,包含結果是目標jsp翻譯Servlet生成 html頁面結果,每個被包含jsp翻譯單獨Servlet進行執(zhí)行

<jsp:forward page="/demo11/b.jsp"></jsp:forward> 等價于 request.getRequestDispatcher("/demo11/b.jsp").forward(request,response);

<jsp:forward page="/demo11/b.jsp"><jsp:param value="itcast" name="name"/></jsp:forward>上面寫法用jsp傳遞一個參數(shù),用jsp如果向傳遞參數(shù),直接通過setAttribute

EL 表達式語言,來自民間 ,Servlet2.4 之后 EL 被納入官方規(guī)范 功能:1、EL 獲得 JSP四個范圍中保存數(shù)據(jù) (訪問JavaBean的屬性)2、EL 表達式支持運算 3、EL 內置 11個對象 --- web開發(fā)常用對象4、EL 調用 java的方法

EL是從javaee1.4版本才被納入規(guī)范,javaee1.3 及以前版本,默認對EL不進行解析 * 如果想 javaee1.3 以及之前版本解析 EL ------ 設置 page 屬性 isELIgnored = false

1、使用EL 獲得 jsp四個范圍數(shù)據(jù) 使用EL指定查找四個范圍數(shù)據(jù) ${pageScope.屬性名稱} ${requestScope.屬性名稱} ${sessionScope.屬性名稱} ${applicationScope.屬性名}如果不執(zhí)定查找數(shù)據(jù)范圍 ${屬性名稱} ---- 調用pageContext.findAttribute 在四個范圍依次查找如果查找屬性不存在,返回是一個 "" 空串,而不是null

獲得數(shù)組、List、Map時 有些情況使用 [] 獲得屬性值 . 和 [] 有什么區(qū)別 ?答案:. 和 [] 都可以用來取得EL 屬性值,.可以實現(xiàn)功能 [] 都可以! 例如: ${pageScope.user.name} 也可以寫為 ${pageScope.user["name"]} (獲得對象后,訪問對象屬性時才可以用 [] 取代.效果 )[] 可以使用特殊標識信息,但是. 不可以 例如:pageContext.setAttribute("0","itcast");pageContext.setAttribute("aa.bb","春生泰克");只能通過[] 進行訪問 ----- 注意:在使用[] 進行屬性取值時,加"" , 不加"" 認為是一個變量

在使用EL進行取值時,如果含有特使字符屬性,盡量使用[] , 否則都使用. 就可以了

2、在EL 中執(zhí)行 算術、比較、邏輯運算在EL 執(zhí)行運算時,運算語句必須寫入 ${}中 * 在EL 獲得屬性值 執(zhí)行算術運算,自動類型轉換 ---- 執(zhí)行算術運算時,進行運算參數(shù),必須都是數(shù)字 ${"a"+"b"} ---- 發(fā)生數(shù)字格式化錯誤

empty運算符1) 判斷一個屬性是否存在 , 通常empty運算符都是結合c:if 一起使用2) 使用empty 判斷List 或者 Map是否為空 (size==0) 二元表達式:${user!=null?user.name:""} ----- 三元運算符

3、EL 11個內置對象 pageScope requestScope sessionScope applicationScope 四個數(shù)據(jù)范圍,用來取值

pageContext 當前jsp上下文 ----- ${pageContext.request.contextPath }

${param.name} 等價于 request.getParameter("name")${paramValues.hobby} 等價于 request.getParameterValues("hobby")${header.referer} 等價于 request.getHeader("referer")${headerValues["Accept-Encoding"]} 等價于 request.getHeaders("Accept-Encoding")

${initParam.name} 等價于 getServletContext().getInitParamter("name")

必須掌握cookie隱含對象寫法Cookie[] cookies = request.getCookies();if(cookies==null){out.println("cookie不存在!");}else{for(Cookie cookie : cookies){if(cookie.getName().equals("address")){out.println(cookie.getValue());}}}

使用EL : ${cookie.address.value }

4、EL獲取數(shù)據(jù)值,經(jīng)常需要對取得數(shù)據(jù)值進行處理 ----- EL函數(shù) 步驟:第一步:編寫java類,提供static方法第二步:編寫tld文件 ,在tld文件中對函數(shù)進行定義描述

sun在jstl中提供一套EL函數(shù)庫,這套函數(shù)在導入jstl的jar包后,可以直接使用1) 導入jstl.jar 2) 在JSP頁面內,引入函數(shù)庫名稱空間 <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>* 在jstl.jar 存在 META-INF/fn.tld 當中定義EL函數(shù)庫3) sun提供EL函數(shù)庫主要對字符串進行操作 提供16個函數(shù)語法:${fn:toUpperCase('asdasDSFSDF')}

外包項目,jsp內部不允許定義腳本元素 <%%> ----- 必須用標簽庫和表達式語言 實現(xiàn)<%%> 代碼效果 使用jstl步驟1、去官網(wǎng)上下載jstl的jar 1.0 1.1 1.2 1.1和1.2 基本一樣 Servlet2.4(javaee1.4 ) 以后提出的1.0 在 javaee1.3 之前提出的 * EL 在 javaee1.4 這個版本 納入規(guī)范的 , jstl1.0 時 EL還沒有納入規(guī)范,所有1.0標簽默認不支持EL 的

2、jar包導入 jstl1.1 兩個jar jstl.jar standard.jar ----- jstl.jar 接口API standard.jar 代碼實現(xiàn)將兩個jar包 復制工程/WebRoot/WEB-INF/lib 目錄中

3、在jsp頁面內 通過taglib指令 引入jstl 標簽庫對應uri JSTL分為五類:core核心標簽 fmt國際化標簽 sql數(shù)據(jù)庫標簽 xml操作xml標簽 fn是EL函數(shù)庫因為數(shù)據(jù)庫操作和xml操作,都將代碼編寫Servlet中 ,所以 sql標簽庫和xml標簽庫不學習了

每個標簽庫在jar/META-INF/ 對應一個tld文件 例如:c.tld 是jstl1.1版本的 c-1_0.tld 是 jstl1.0 版本標簽庫

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 導入1.1 <%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 導入1.0 不支持EL <%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> 導入1.0 支持EL * /jstl/demo.jsp(15,0) According to TLD or attribute directive in tag file, attribute test does not accept any expressions

12個核心標簽庫標簽1、c:out 用于將內容輸出到頁面上 ------- 輸出EL值、提供默認值、HTML轉義輸出功能2、c:set 用于設置一個變量或者屬性 ---- 向四個數(shù)據(jù)范圍保存一個數(shù)據(jù),對四個數(shù)據(jù)范圍一個已經(jīng)存在對象修改其屬性值3、c:remove 用于移除四個數(shù)據(jù)范圍的數(shù)據(jù)4、c:catch 相當于try -- catch代碼塊 ----- 捕獲異常,將異常對象保存page指定屬性中5、c:if 取代頁面if 條件判斷6、c:choose c:when c:otherwise 實現(xiàn)if -- else if -- else效果 --- 實現(xiàn) switch 效果7、c:forEach 實現(xiàn) foreach循環(huán)效果 ----- 遍歷數(shù)組、List、Map、控制指定循環(huán)次數(shù)求和、在特殊次數(shù)進行操作8、c:forTokens 完成字符串切割 9、c:param 不能單獨使用,通常與url相關標簽一起使用 ,與c:url一起使用完成中文編碼10、c:import 導入目標頁面,將目標頁面內容保存起來,再進行使用11、c:url 完成URL重寫 (客戶端禁用cookie ,URL重寫拼接jSessionId),結合param對中文進行url編碼 12 c:redirect 標簽用于實現(xiàn)請求重定向

常用:c:set c:if c:forEach c:url進行中文url編碼 c:redirect

總結:1、JSP 和Servlet關系 2、JSP運行原理3、JSP 腳本元素三種 <%! %> <%=%> <% %>4、JSP三種注釋 5、page指令 contentType和pageEncoding區(qū)別 6、錯誤友好頁面 web.xml 配置7、<%@include %> 與 <jsp:include> 原理區(qū)別8、<jsp:forward>轉發(fā) <c:redirect>重定向 9、EL 獲取數(shù)據(jù) . []用法 10、empty not 使用11、${pageContext.request.contextPath } 取得工程名 /day08 ----- ${cookie.name.value } 快速獲得cookie值 12、EL 使用 JSTL提供EL函數(shù)庫13、JSTL 區(qū)分1.0 和 1.1 14、常用core標簽 c:set 、c:if 、c:forEach 、c:url和c:param編碼、 c:redirect


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 博乐市| 焉耆| 会宁县| 磐安县| 滁州市| 海口市| 普兰店市| 丘北县| 滨州市| 天柱县| 平泉县| 万载县| 石楼县| 溧水县| 沐川县| 宁强县| 临夏市| 清水县| 东海县| 黄大仙区| 厦门市| 龙井市| 黑水县| 阜阳市| 十堰市| 精河县| 河津市| 如东县| 军事| 平湖市| 长垣县| 江陵县| 东兰县| 布拖县| 溆浦县| 长春市| 绍兴市| 高密市| 宜君县| 蒙山县| 屏边|