20160331javaweb之JSP 標籤技術

破玉發表於2016-04-02

jsp的標籤技術:在jsp頁面中最好不要出現java程式碼,這時我們可以使用標籤技術將java程式碼替換成標籤來表示

1.jsp標籤:sun原生提供的標籤直接在jsp頁面中就可以使用
<jsp:include> -- 實現頁面包含,動態包含
<jsp:forward> -- 實現請求轉發
<jsp:param> -- 配合上面的兩個標籤使用,在請求包含和請求轉發時用來在路徑後拼接一些請求引數


2.EL表示式:最初出現的目的是用來取代jsp頁面中的jsp指令碼表示式.但是隨著el的發展el的功能已經不限於此了
${el表示式}

(1)獲取資料:
使用中括號的地方都可以使用點號替代,除了中括號中是數字或者中括號中包含特殊字元(-.)的情況除外
在中括號中如果不用雙引號引起來則是變數,先找變數的值再拿變數的值使用.如果用雙引號則是常量,直接使用常量的值

~獲取常量
字串/數字/布林型別,直接寫在el表示式中,el直接進行輸出
~獲取域中的變數
如果el中寫的是一個變數的名,則el會呼叫pageContext的findAttribute方法,在四大作用域中以給定的名字找對應的屬性值,找到後進行輸出,如果四個域中都找不到,什麼都不輸出
~獲取陣列中的資料
~獲取集合中的資料
~獲取Map中的資料
~獲取javabean的屬性
程式碼演示:

//我是javabean
package com.dzq.domain;

public class UserBean {
private String username;
private int age;
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}


}

  


我   的   下   面   是  jsp  頁  面   ,上  面  是javabean,哈哈哈


<%@page import="java.util.*" import="com.dzq.domain.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>獲取javabean的屬性</h1><hr>
<%
UserBean user=new UserBean();
user.setUsername("hello");
user.setAge(17);
pageContext.setAttribute("user", user);
%>
${user.username }${user.age }
<h1>獲取Map中的資料</h1><hr>
<%
Map<String,String> map=new HashMap<String,String>();
map.put("name", "噹噹");
map.put("age", "17");
map.put("sex","男");
map.put("addr", "山東");
pageContext.setAttribute("map",map);
%>
${map["name"] } ${map["addr"] }
${map.sex } ${map.age }
<h1>獲取集合中的資料</h1><hr>
<%
List<String> list=new ArrayList<String>();
list.add("甄嬛");
list.add("果郡王");
list.add("流朱");
list.add("浣碧");
pageContext.setAttribute("list",list);
%>
${list[2] }
<h1>獲取陣列中的資料</h1><hr>
<%
String [] names={"滋味","hello","呵呵"};
pageContext.setAttribute("names", names);
%>
${names[0]}
<h1>獲取域中的變數資料</h1><hr>
<%
  String name="hello";
pageContext.setAttribute("name", name);
%>
${name}
<h1>獲取常量資料</h1><hr>
${"發射 發射發射" } ${199 }  ${true}

</body>
</html>

  執行截圖


(2)執行運算:
算數運算
+-*/
邏輯運算
比較運算

三元運算子
empty運算子

程式碼演示:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>empty </h1>判斷物件是否為空,或者字串為空,集合為空,域的屬性為空<hr>
<%
String str=null;
pageContext.setAttribute("str", str);
%>
${empty str }
<h1>算數運算</h1><hr>
${1-2 }
 ${2-1 }
${2+"3" } //如果有非數字參加算數運算,el表示式會試圖將其轉化成數字
<h1>邏輯運算</h1><hr>
${1<0 &&3>4 ||10<5}
<h1>比較運算</h1><hr>
${1==1 } ${3<=2 }
<h1>三元運算</h1><hr>
${10>9?"yes":"no" }
</body>
</html>

 

  




(3)獲取常用開發物件:el中內建了11個內建物件,這些物件el內建的,不需要提前定義就可以直接在el中使用
!pageContext -- 有了它可以很方便的獲取jsp頁面中的9大隱式物件

!pageScope -- page域中屬性組成的Map
!requestScope -- request域中屬性組成的Map
!sessionScope -- session域中屬性組成的Map
!applicationScope --application域中屬性組成的Map

!param -- 所有請求引數組成的Map<String,String>
paramValues -- 所有請求引數組成的Map<String,String[]>

header -- 所有請求頭組成的Map<String,String>
headerValues -- 所有請求頭組成的Map<String,String[]>

!cookie -- 所有cookie資訊組成的Map<String,Cookie>

initParam -- 所有web應用的初始化引數組成Map



(4)呼叫java方法: -- 不需要大家自己會寫呼叫方法的過程,只要會呼叫別人寫好的標籤庫就可以了 fn標籤庫
~寫一個類其中包含要被el呼叫的方法,這個方法必須是靜態的方法
~寫一個tld檔案在其中對要被呼叫的靜態方法進行一下描述
~在jsp頁面中taglib指令將tld檔案引入當前jsp頁面,從而在jsp頁面中就可以呼叫描述好的方法

先寫一個java方法:

package com.dzq.util;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class ELFunc {
public static String myEncode(String str,String encode){
	try {
		return URLEncoder.encode(str, encode);
	} catch (Exception e) {
		e.printStackTrace();
		throw new RuntimeException(e);
	}
}
}

  再寫tld檔案

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 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">
	<tlib-version>1.0</tlib-version>
	<short-name>MyELFunc</short-name>
	<uri>http://www.itheima.com/MyELFunc</uri>
	<function>
		<name>URLEnc</name>
		<function-class>com.dzq.util.ELFunc</function-class>
		<function-signature> java.lang.String myEncode(java.lang.String,java.lang.String)</function-signature>
	</function>
</taglib>

  jsp中呼叫java方法:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.itheima.com/MyELFunc" prefix="MyELFunc" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${MyELFunc:URLEnc("上海","UTF-8") }
${fn:toLowerCase("adaddAADTFThuhuhhhhHHhhhH") }
</body>
</html>

  

 

3.JSTL:
<c:out> 標籤用於輸出一段文字內容到pageContext物件當前儲存的“out”物件中。

<body>
<h1>HTML轉義輸出</h1><hr>
<a href="#">xxx</a>
<c:out value="<a href='#'>xxx</a>"></c:out>
<h1>輸出預設值</h1><hr>
<%
String addr="Hello哦";
%>
<c:out value="${addr }" default="呵呵呵"></c:out>
<h1>輸出變數</h1><hr>
<%
String name="張亮";
pageContext.setAttribute("name", name);
%>
<c:out value="${name }"></c:out>
<h1>輸出常量</h1><hr>
<c:out value="hello"></c:out>
</body>


<c:set>標籤用於把某一個物件存在指定的域範圍內,或者設定Web域中的java.util.Map型別的屬性物件或JavaBean型別的屬性物件的 屬性。

<body>
<h1>設定或修改域中javabean屬性的值</h1><hr>
<%
UserBean user=new UserBean();
pageContext.setAttribute("user", user);
%>
<c:set target="${user}" property="username" value="叭叭叭"></c:set>
${user.username }
<h1>設定或修改域中Map值</h1><hr>
<%
Map<String,String> map=new HashMap<String,String>();
pageContext.setAttribute("map", map);
%>
<c:set target="${map }" property="cellphone" value="10010"></c:set>
<c:set target="${map }" property="cellphone" value="10086"></c:set>
${map.cellphone }
<h1>設定或修改域中的屬性值</h1><hr>
<c:set var="name" value="韋小寶"></c:set>
<c:set var="name" value="阿珂"></c:set>
${name }
</body>

 


<c:remove>標籤用於刪除各種Web域中的屬性


<c:catch>標籤用於捕獲巢狀在標籤體中的內容丟擲的異常,其語法格式如下:<c:catch [var="varName"]>nested actions</c:catch>

<body>
<c:catch var="e">
<%
int i=1/0;
%>
</c:catch>
${e.message }
</body>

 


!!<c:if test=“”>標籤可以構造簡單的“if-then”結構的條件表示式

<body>
<c:if test="${2>1 }">
確實是這樣的
</c:if>
<c:if test="${2<=1 }">
你確定???
</c:if>
</body>

 


!!<c:choose>標籤用於指定多個條件選擇的組合邊界,它必須與<c:when>和<c:otherwise>標籤一起使用。使用<c:choose>,<c:when>和<c:otherwise>三個標籤,可以構造類似 “if-else if-else” 的複雜條件判斷結構。

<body>
<%
int day=3;
pageContext.setAttribute("day", day);
%>
<c:choose>
   <c:when test="${day==1 }">
                    星期一
   </c:when>
   <c:when test="${day==2 }">
   星期二
   </c:when>
   <c:when test="${day==3 }">
   星期三
   </c:when>
</c:choose>

</body>

 


!!<c:forEach>標籤用於對一個集合物件中的元素進行迴圈迭代操作,或者按指定的次數重複迭代執行標籤體中的內容。

<body>
<h1>實驗:遍歷10-100的偶數,如果數字所在位置是3的倍數,則顯示成紅色</h1>
<c:forEach begin="10" end="100" step="2" var="i" varStatus="stat">
<c:if test="${stat.index %3==0 }">
<font color="red">
${i }
</font>
</c:if>
<c:if test="${stat.index %3!=0 }">
<font color="blue">
${i }
</font>
</c:if>
</c:forEach>
<h1>迴圈執行指定的內容若干次</h1><hr>
<c:forEach begin="0" end="10" step="2" var="i">
${i },

</c:forEach>
<h1>遍歷Map資料</h1><hr>
<%
Map map=new LinkedHashMap();
map.put("name", "hello");
map.put("jj", "hell");
map.put("heh", "hel");
pageContext.setAttribute("map", map);
%>
<c:forEach items="${map }" var="m">
${m.key}:${m.value }<br>
</c:forEach>
<h1>遍歷集合資料</h1><hr>
<%
List list =new ArrayList();
list.add("美國");
list.add("韓國");
list.add("額國");
pageContext.setAttribute("list", list);
%>
<c:forEach items="${list }" var="l">
${l }
</c:forEach>
<h1>遍歷陣列資料</h1><hr>
<%
String [] city={"北京","上海","南京","雲南","李靜"};
pageContext.setAttribute("city",city);
%>
<c:forEach items="${city }" var="c">

${c }<br>
</c:forEach>
</body>


!!<c:forTokens>用來瀏覽一字串中所有的成員,其成員是由定義符號所分隔的

<body>
<c:forTokens items="www.baidu.com" delims="." var="str">
${str }<br>

</c:forTokens>
</body>

 


<c:param>標籤 在JSP頁面進行URL的相關操作時,經常要在URL地址後面附加一些引數。<c:param>標籤可以巢狀在<c:import>、<c:url>或<c:redirect>標籤內,為這些標籤所使用的URL地址附加引數。

<c:import> 標籤,實現include操作

<body>
<c:import url="../index.jsp" var="p" scope="page"></c:import>
bbb
cccc
cccc
${p }
llll
</body>

 


<c:url>標籤用於在JSP頁面中構造一個URL地址,其主要目的是實現URL重寫。URL重寫就是將會話標識號以引數形式附加在URL地址後面

<body>
<%
String url=response.encodeURL(request.getContextPath()+"/index.jsp");
%>
<a href="<%=url %>">jajaj</a>
<c:url value="/index.jsp" context="${pageContext.request.contextPath }" var="url" scope="page"></c:url>
<a href="${url }">bbbb</a>
</body>

 


<c:redirect>標籤用於實現請求重定向

<body>
<c:redirect url="/index.jsp" context="${pageContext.request.contextPath }"></c:redirect>
</body>

 


4.自定義標籤技術:
暫時省略

相關文章