-
JSP自定義標簽——開發(fā)第一個自定義標簽 I Ps:第一步:創(chuàng)建一個類LoginDateTag繼承TagSupport類,并重寫doStartTag方法,在這個方法里寫上在jsp中的java代碼,并用pageContext.getOut().print(dateStr);輸出結(jié)果。pageContext.getOut()會得到一個輸出流。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關(guān)注我,加我慕課好友,互相學習,共同進步!】查看全部
-
JSP自定義標簽——概述 Ps:將方法封裝到自定義標簽處理類中,然后使用方法與JSTL標簽一致。在實際開發(fā)中,前臺頁面是不允許html代碼和java代碼相混合的,但有時jsp或第三方為我們提供的標簽滿足不了需求,這時需要通過自己將業(yè)務(wù)邏輯封裝到繼承jsp規(guī)范的類或接口的處理類中來定義標簽,這就是所謂的自定義標簽。這樣的缺點是加重了工作量。但與前端人員溝通和后期的維護上來看,這點工作是微不足道的。 【溫馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等編程愛好者關(guān)注我,加我慕課好友,互相學習,共同進步!】查看全部
-
starUML查看全部
-
otherwise查看全部
-
if查看全部
-
jspfragment內(nèi)容查看全部
-
案例一的核心代碼: JspWriter jspWriter=getJspContext().getOut(); jspWriter.write(dateStr); 案例二的核心代碼: getJspBody().invoke(null); JspFragment調(diào)用invoke方法,讓其顯示標簽體。默認的傳入null就是顯示標簽體的內(nèi)容 案例三的核心代碼: throw new SkipPageException(); SimpleTagSupport根據(jù)這個異常來決定是否往下繼續(xù)執(zhí)行余下的代碼查看全部
-
注冊標簽: <tag> <name>skipPageOrEvalPage</name> <tag-class>com.imooc.tag2.SkipPageOrEvalPage</tag-class> <body-content>empty</body-content> </tag> 新建JSP頁面 <body> <imooc:skipPageOrEvalPage/> <h3>中國最大的免費在線培訓平臺--idcbgp.cn</h3> </body> 啟動tomcat。在地址欄輸入:http://localhost:8080/jspCustomTag/tag2/demo3.jsp 頁面上并沒有輸出,然后再新建一個JSP。access.jsp 通過超鏈接對它進行訪問。 <body> <a href="http://localhost:8080/jspCustomTag/tag2/demo3.jsp">站內(nèi)訪問</a> </body> 然后在瀏覽器地址欄中輸入:http://localhost:8080/jspCustomTag/tag2/access.jsp 點擊頁面的超鏈接,就會出現(xiàn)我們所要的效果。查看全部
-
第三個例子是控制是否執(zhí)行標簽體之后的內(nèi)容。 public class SkipPageOrEvalPage extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { /** * 這個例子是所要實現(xiàn)的效果是: * 根據(jù)用戶請求,是通過超鏈接還是通過地址欄輸入地址,訪問進來的, * 如果是通過超鏈接訪問進來的就讓其顯示執(zhí)行標簽體之后的內(nèi)容, * 如果是通過地址欄輸入地址訪問進來的,就不讓它顯示, * * 這段代碼首先得到了HttpServletRequest對象,然后得到請求頭中 * 的referer,如果該值為空,則證明是直接通過瀏覽器輸入地址訪問的 * 否則就是超鏈接訪問的。然后注冊一下這個標簽。 */ PageContext pageContext=(PageContext)getJspContext(); HttpServletRequest request=(HttpServletRequest)pageContext.getRequest(); String referer=request.getHeader("referer"); if(referer == null){ //SimpleTagSupport根據(jù)這個異常來決定是否往下繼續(xù)執(zhí)行余下的代碼 throw new SkipPageException(); } } }查看全部
-
接下來注冊標簽: <tag> <name>displayOrSkipBody</name> <tag-class>com.imooc.tag2.DisplayOrSkipBody</tag-class> <body-content>scriptless</body-content> </tag> 接下來新建jsp頁面來使用新注冊的標簽 <body> <imooc:displayOrSkipBody> <h3>中國最大的免費在線培訓平臺--idcbgp.cn</h3> </imooc:displayOrSkipBody> </body> 啟動tomcat,訪問tag2下的demo2.jsp http://localhost:8080/jspCustomTag/tag2/demo2.jsp如果什么都不傳。就不會顯示 任何的內(nèi)容, 在url后傳一個值: http://localhost:8080/jspCustomTag/tag2/demo2.jsp?name=imooc 這樣就達到了我們希望的效果查看全部
-
接下來看第二個例子。 控制是否演示標簽體的內(nèi)容 public void doTag() throws JspException, IOException { /** * 首先通過getJspContext()方法得到pageContext對象,容器會調(diào)用 * setJspContext(JspContext)方法將JspContext對象放入進去, * 然后通過pageContext得到ServletRequest對象,之后通過 * getParameter方法獲取參數(shù)值,最后判斷name是否等于imooc, * 如果條件成立,則顯示標簽體中的內(nèi)容 * 這個getJspBody()方法會得到標簽體中的內(nèi)容,也就是 * Jspfragment對象,這個Jspfragment對象代表的就是標簽體內(nèi)容 * 它是容器調(diào)用setJspBody(JspFragment)傳入進去的,然后調(diào)用 * invoke方法,讓其顯示標簽體。默認的傳入null就是顯示標簽體 * 的內(nèi)容,接下來去注冊一下。 */ PageContext pageContext= (PageContext) getJspContext(); String name=pageContext.getRequest().getParameter("name"); if(name !=null && name.equals("imooc")){ getJspBody().invoke(null); } }查看全部
-
接下來在標簽庫文件中注冊一下標簽 <?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>A tag library exercising SimpleTag handlers.</description> <tlib-version>1.0</tlib-version> <short-name>imooc</short-name> <uri>/imooc-tag2</uri> <tag> <name>dateinfo</name> <tag-class>com.imooc.tag2.DisplayInfo</tag-class> <body-content>empty</body-content> </tag> </taglib> 接下來新建一個jsp頁面,這里新建一個文件夾,tag2 new一個jsp命名為demo1.jsp 第一步將它的標簽庫引入進來,<%@ taglib prefix="imooc" uri="/imooc-tag2" %> <body> <imooc:dateinfo/> </body> 啟動tomcat,查看tag2下的demo1.jsp http://localhost:8080/jspCustomTag/tag2/demo1.jsp 這樣時間就正確的顯示出來了查看全部
-
接下來我們來寫第一個小例子: 我們來new一個標簽處理類,DisplayInfo extends SimpleTagSupport 這個類所要實現(xiàn)的業(yè)務(wù),和我們一開始的業(yè)務(wù)是一樣的,在頁面上顯示一段格式化的時間,這里可以直接復制過來, 復寫doTag()方法,將這個業(yè)務(wù)寫在doTag()方法中, 然后這里并沒有提供pageContext,那么我們可以通過SimpleTag的getJspContext()方法得到一個輸出流, JspWriter jspWriter=getJspContext().getOut();它會返回一個JspWriter 接下來使用jspWriter.write(dateStr); 這樣我們的業(yè)務(wù)邏輯就寫完了。查看全部
舉報
0/150
提交
取消