亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

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

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

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

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

JSP技術與Servlet 技術區別和關系?JSP和Servlet技術都是用來動態生成網頁的,Servlet不支持HTML語法,生成網頁麻煩,JSP支持HTML語法,生成網頁方便,JSP運行時翻譯Servlet 執行的。JSP 就是 Servlet 。

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

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

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

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

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

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代碼執行的

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

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

page指令用來定義JSP文件的全局屬性 <% page 屬性=值 %>1、language 只能為java2、extends JSP翻譯后Servlet 繼承父類,這個屬性一般不設置 ,如果非要設置,繼承類必須是Servlet實現類 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 設置緩沖區大小autoFlush 設置當緩沖區滿后,自動刷出6、isELIgnored 設置JSP是否執行EL表達式 isELIgnored="false" 不忽略---執行解析isELIgnored="true" 忽略 ---- 不解析 * 一般就是默認值false

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

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

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

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

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

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

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

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

taglib指令 ,用來在jsp頁面引用標簽庫文件 * 定義標簽作用為了簡化 jsp頁面開發* 通過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代碼時,有些對象默認已經創建好的,這類對象可以直接在jsp中使用,內置對象

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

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

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

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

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

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

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

page request session application response out config pageContext exception

JSP指令和JSP標簽 區分?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 %>原理:動態包含 語法:<jsp:include page="文件路徑" />

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

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

<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傳遞一個參數,用jsp如果向傳遞參數,直接通過setAttribute

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

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

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

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

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

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

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

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

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獲取數據值,經常需要對取得數據值進行處理 ----- EL函數 步驟:第一步:編寫java類,提供static方法第二步:編寫tld文件 ,在tld文件中對函數進行定義描述

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

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

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

3、在jsp頁面內 通過taglib指令 引入jstl 標簽庫對應uri JSTL分為五類:core核心標簽 fmt國際化標簽 sql數據庫標簽 xml操作xml標簽 fn是EL函數庫因為數據庫操作和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 用于設置一個變量或者屬性 ---- 向四個數據范圍保存一個數據,對四個數據范圍一個已經存在對象修改其屬性值3、c:remove 用于移除四個數據范圍的數據4、c:catch 相當于try -- catch代碼塊 ----- 捕獲異常,將異常對象保存page指定屬性中5、c:if 取代頁面if 條件判斷6、c:choose c:when c:otherwise 實現if -- else if -- else效果 --- 實現 switch 效果7、c:forEach 實現 foreach循環效果 ----- 遍歷數組、List、Map、控制指定循環次數求和、在特殊次數進行操作8、c:forTokens 完成字符串切割 9、c:param 不能單獨使用,通常與url相關標簽一起使用 ,與c:url一起使用完成中文編碼10、c:import 導入目標頁面,將目標頁面內容保存起來,再進行使用11、c:url 完成URL重寫 (客戶端禁用cookie ,URL重寫拼接jSessionId),結合param對中文進行url編碼 12 c:redirect 標簽用于實現請求重定向

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久中文字| 久久91精品国产| 日本精品久久电影| 欧美亚洲视频在线观看| 国产一区二区三区欧美| 亚洲国产精品字幕| 国产精品夜间视频香蕉| 懂色av影视一区二区三区| 在线播放日韩欧美| 久久国产视频网站| 亚洲**2019国产| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品久久久久久超碰| 亚洲精品一区二区三区婷婷月| 国内免费精品永久在线视频| 国产97在线|亚洲| 日韩在线观看免费网站| 亚洲欧美综合区自拍另类| 欧美激情精品久久久久久| 国产精品免费久久久久久| 欧美激情性做爰免费视频| 日韩电影网在线| 欧美成人sm免费视频| 欧美日韩国产成人在线| 亚洲成人黄色网| 91久热免费在线视频| 久久av中文字幕| 亚洲精选一区二区| 亚洲精品狠狠操| 午夜精品久久久久久久白皮肤| 久久资源免费视频| 国产区精品在线观看| 欧美丰满少妇xxxxx做受| 欧美日韩国产999| 国产欧美日韩免费| 欧美制服第一页| 91精品久久久久久久久不口人| 国产日韩欧美中文在线播放| 日本一区二三区好的精华液| 亚洲欧美一区二区精品久久久| 色综合久久悠悠| 国产丝袜一区二区| 国产欧美久久一区二区| 久久av中文字幕| 中文字幕日本欧美| 久久久久久中文字幕| 精品久久久久久久久久久| 日本欧美黄网站| 国产精品免费看久久久香蕉| 国产成人免费av电影| 成人日韩在线电影| 日韩亚洲精品视频| 国产精品中文字幕在线观看| 成人淫片在线看| 久久免费国产视频| 久久精品在线播放| 亚洲第一免费播放区| 国产色婷婷国产综合在线理论片a| 日韩中文字幕不卡视频| 97国产精品免费视频| 国产亚洲欧美aaaa| 久久久久国产一区二区三区| 精品久久香蕉国产线看观看gif| 欧美日韩精品在线播放| 日韩电影中文字幕| 91热精品视频| 亚洲精品久久久久久下一站| 久久久亚洲国产| 国语自产偷拍精品视频偷| 亚洲欧美激情视频| 九九久久久久久久久激情| 欧美精品videosex性欧美| 久久影院资源网| 亚洲精品视频网上网址在线观看| 三级精品视频久久久久| 免费91麻豆精品国产自产在线观看| 日韩成人中文电影| 欧美日本啪啪无遮挡网站| 亚洲人成电影网站色xx| 欧美视频一二三| 久久久精品一区| 日韩视频免费在线| 国外色69视频在线观看| 91精品国产91久久久久福利| 国产精品福利网站| 久久99精品久久久久久青青91| 亚洲老头老太hd| 欧美激情成人在线视频| 亚洲国产91色在线| 欧美综合在线第二页| 亚洲高清福利视频| 91久久精品国产91久久| 富二代精品短视频| 亚洲高清一区二| 国产精品午夜国产小视频| 疯狂蹂躏欧美一区二区精品| 欧美大肥婆大肥bbbbb| 国产精品日韩欧美综合| 91在线视频免费| 91精品国产高清久久久久久| 欧洲成人免费aa| 国产主播在线一区| 国产精品三级美女白浆呻吟| 国产精品免费视频xxxx| 国产精品免费网站| 日韩美女在线播放| 国产一区在线播放| 国产噜噜噜噜噜久久久久久久久| 日本久久91av| 91久久精品国产| 亚洲精品国产美女| 亚洲欧美色婷婷| 91久久久久久久久久| 狠狠综合久久av一区二区小说| 国产精品九九九| 久久不射电影网| 亚洲在线视频福利| 午夜欧美不卡精品aaaaa| 久久精品影视伊人网| 亚洲一级免费视频| 97国产在线观看| 亚洲一区亚洲二区| 亚洲人成电影网站色www| 久久国产精品电影| 成人伊人精品色xxxx视频| 日韩av在线网页| 欧美国产视频日韩| 狠狠色狠色综合曰曰| 国产精品视频999| 欧美福利视频在线观看| 美女精品久久久| 日韩av最新在线观看| 日韩欧美精品网站| 国模视频一区二区| 欧美一区二区三区艳史| 91在线高清免费观看| 国产69精品久久久久久| 日韩电影中文字幕av| 久久精品成人欧美大片| 国产精选久久久久久| 亚洲国产日韩欧美综合久久| 成人在线激情视频| 国产美女被下药99| 亚洲福利视频久久| 日本国产一区二区三区| 自拍偷拍亚洲区| 欧美性生交xxxxxdddd| 尤物精品国产第一福利三区| 亚洲缚视频在线观看| 日本精品一区二区三区在线播放视频| 久久久精品一区二区| 欧美日韩一区二区在线播放| 欧美在线视频导航| 欧美激情成人在线视频| 欧美一区二三区| 欧美国产亚洲精品久久久8v| 国外成人在线直播| 91禁国产网站| 日韩精品视频免费| 欧美精品九九久久| 亚洲欧美国产精品va在线观看| 国产精品视频免费在线观看| 久久精品亚洲94久久精品| 91久久久久久久久久久久久|