JSTL组成:
JSTL – I18N - 国际化标签库。Internationalization- I18N
JSTL – SQL – 数据库操作标签(有悖于MVC设计模式不用不讲)。
JSTL - Functions – 函数库。
JSTL - XML ,对XML的操作(同SQL标签)。在jstl-1.2.jar包的META-INF目录中,
如果你的Web项目是基于JavaEE2.5或以上的。可以在你项目的任意页面上
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
uri是引用标签库的资源定位符,并不代表一个实际的地址。
Prefix是自定义的前缀。
如果你的项目是JavaEE2.5以下的项目,必须在在你项目中的lib目录下,
Jstl.jar、standard.jar
具体使用:
<c:set> pageContext.setAttirbute(key,value,scope);声明标签
c:remove删除某个范畴内的数据
<c:if> 判断c:else,c:elsfif
<c:choose><c:when><c:otherwise> 判断分枝c:if,c:else if c:
<c:forEach> 遍历
<c:forTokens> 分隔
<c:import> 导入其他资源,相当于动态包含共享同一个request
<c:url> - 重写url
<c:redirect> 重定向 response.sendRedirect(‘’..)
<c:out>
<c:out value=…/>用于在页面上输出结果。
<c:out value=“${requestScope.name}”/> -将request中的name值输出
<c:out value=“${param.username}”/> - 用于将参数输出到页面上。
<c:out value=“${name}” default=“hello”/>从page到application开始查找,
如果没有找到,就显示默认值hello.
另一种设置默认值的方式:
<c:out value=“${name}”>
Default-value-默认值。
</c:out>
只有当要求的信息为null或不存在时才会输出默认值。
excapeXml属性:默认值为true,用于将html等标签转换成<等转换元素,示例:
<%
String name="<font color='red'>Red</font>";
pageContext.setAttribute("name",name);
%>
<c:out value=“${name}” escapeXml=“false”></c:out> 不对xml或html进行转换,直接输出,这样就会在页面上看到红色的Red字符,因为浏览器会解析html数据。
<%
pageContext.setAttribute("name", "jack_P");
request.setAttribute("name", "jack_R");
request.setAttribute("name2", "<font color='red'>你好,中国</font>");
%>
${name } //从小范围到大开始查找<br/>
<c:out value="${name }"></c:out> -------输出标签
<hr/>
<!-- c:out标签一定会让所显示的内容原样输出,避开html的解析 -->
${name2 }<br/> 可以解析html语言<br/>
<c:out value="${name2 }"></c:out> -------不可以解析html语言,原样输出
<c:set>
<c:set/>标签的作用如下:
为String类型的命名变量设置值。
<c:set var=“变量名” value=“变量的值” scope=“page|request|session|application”/>
<c:set var=“name” value=“${param.name}”/>直接从参数中取出数据给name赋值。
如果变量为JavaBean则为这个JavaBean的属性设置值。
<c:set target=“JavaBean的变量名” property=“设置的属性” value=“值”/>
示例:
<jsp:useBean id="person" class="cn.itcast.Person"></jsp:useBean>
<c:set target="${pageScope.person}" property="name" value="Jack"/>
<c:set target="${pageScope.person}" property="age" value="99"/>
如果变量为Map则,给Map中的key设置值。
<c:set target=“代表Map的变量” property=“key” value=“value”/>,示例:
<jsp:useBean id="map" class="java.util.HashMap" scope="request"></jsp:useBean>
<c:set target="${requestScope.map}" property="name" value="Jack"/>
<c:out value="${requestScope.map.name}"/>
为String类型的命名变量设置值。
<c:set var=“变量名” value=“变量的值” scope=“page|request|session|application”/>
<c:set var=“name” value=“${param.name}”/>直接从参数中取出数据给name赋值。
如果变量为JavaBean则为这个JavaBean的属性设置值。
<c:set target=“JavaBean的变量名” property=“设置的属性” value=“值”/>
示例:
<jsp:useBean id="person" class="cn.itcast.Person"></jsp:useBean>
<c:set target="${pageScope.person}" property="name" value="Jack"/>
<c:set target="${pageScope.person}" property="age" value="99"/>
如果变量为Map则,给Map中的key设置值。
<c:set target=“代表Map的变量” property=“key” value=“value”/>,示例:
<jsp:useBean id="map" class="java.util.HashMap" scope="request"></jsp:useBean>
<c:set target="${requestScope.map}" property="name" value="Jack"/>
<c:out value="${requestScope.map.name}"/>
<!-- c:set标签可以设置变量的值 scope默认放在page容器当中-->
<c:set var="a" value="jack中国"></c:set>
${a } <br/>
<!-- 指定范围以后,需要从指定范围去取,不然会自动从小到大开始查找 -->
<c:set var="a" value="jack中国2" scope="request" ></c:set>
${requestScope.a } <br/>
<hr/>
<c:if>
<c:if/>用于实现Java语言中的if语句。它的语法如下:
<c:if test=“逻辑表达式” var=“代表逻辑表达式值的命名变量” scope=../>
示例:
<c:if test=“${name!=‘Jack’}”>
当name的值为Jack时输出此行信息
</c:if>
上面的判断等价于下面的代码片段:
if(pageContext.getAttribute(“name”)!=null && !..equals(“Jack”)){
out.println(“…..”);
}
<hr/>
<c:set var="age" value="20">
</c:set>
<c:if test="${age>25 }" var="aa">
<h2>比25大咯!!</h2>
</c:if>
<c:if test="${!aa }">
<h3>比25小咯!!</h3>
</c:if>
<hr/>
choose,when,otherwise
这几个标签共同使用可以实现Java中的if…else语句的功能。
<c:choose>
<c:when test="${empty param.name}">
用户没有输入name参数
</c:when>
<c:when test="${param.name=='Admin'}">
${param.name}是管理员
</c:when>
<c:otherwise>
用户是:${param.name}
</c:otherwise>
</c:choose>
使用c:when必须遵循以下语法规则:
<c:when/>和<c:otherwise/>不能单独使用,它必须位于<c:choose内。
<c:otherwise/>必须位于c:when之后。
<c:set var="age" value="-18"></c:set>
<c:choose>
<c:when test="${age>20 }">
大于20!!
</c:when>
<c:when test="${age>10 }">
大于10!!
</c:when>
<c:when test="${age<10 }&&${age>0 }">
小于于10!!
</c:when>
<c:otherwise>
这就是属于其他的了 。。。
</c:otherwise>
</c:choose>
<hr/></span>
<c:remove>移除某个标签
<hr/>
<!-- 移除属性 c:remove 默认是从pageScope中移除-->
<c:remove var="a" scope="request"/>
aaa ${requestScope.a }
<hr/>
<c:ForEach>迭代标签
forEach用于遍历集合中的对像。
基本语法:
<c:forEach var=“迭代变量” item=“${集合名称}” varStatus=“迭代下标变量”>
迭代部分
</c:forEach>
forEach的begin(开始索引)、end(结束索引)、step(步长)属性:
<c:forEach begin=0 end=10 step=“2”>…</c:forEach>将输出0,2,4,6,810
<hr/>
<!-- c:forEach 增强for循环 -->
<!-- 普通版本 -->
<c:forEach begin="0" end="10" var="x" step="2">
${x } <br/>
</c:forEach>
<hr/>
<%
String[] a={"小王","晓明 ","小杨","新哥"};
request.setAttribute("a", a);
%>
<c:forEach items="${requestScope.a }" var="i">
${i }<br/> <!-- 一定要注意取值的范围 -->
</c:forEach>
<hr/>
<!-- 演示list用jstl -->
<%
List<String> list=new ArrayList<String>();
list.add("123a");
list.add("123d");
list.add("123b");
list.add("123c");
list.add("123e");
list.add("大新哥");
session.setAttribute("list", list);//后面用el表达式取得是参数
%>
<c:forEach items="${sessionScope.list }" var="li">
${li } <br/>
</c:forEach>
<hr/>
<!-- 采用map的方式演示jstl -->
<%
//演示map采用el表达式
Map<String,Object> map=new HashMap<String,Object>();//存储以hash值存储
map.put("aa", 123);
map.put("cc", 567);
map.put("bb", 345);
map.put("dd", 789);
application.setAttribute("map", map);
%>
<c:forEach items="${ applicationScope.map}" var="mm" varStatus="idx">
${mm.key } ${mm.value }<br/> ${idx.index } ${idx.count }
</c:forEach>
<hr/>
<hr/>
<c:forTokens>对字符进行分割,以某某分割
<!-- 分割字符串,相当于split() -->
<c:forTokens items="aa,bb,cc,dd,ee,ff" delims="," var="x">
${x }
</c:forTokens>
<hr/>
其他标签
<c:import url=“web资源”/>
<c:url/>按特定的方式重写URL。
<c:url value=“/aaa.jsp”/>总是以/开头,如果只使用value属性为直接使用或输出。
<c:url value=“/…” var=“someVar” scope=“…”/>也可以通过这样的方式将重写
<c:redirect/>负责重定向。
<c:redirect url=“重定向到的资源”/>
在使用<c:redirect时可以带更多的参数:
<c:redirect url=“/…”>
<c:param name=“someName” value=“someValue”/>
</c:redirect>
<!-- c:url -->
<a href="<c:url value="/Servlet"></c:url>">调转到土豪界面</a>
<%--
<c:redirect url="/Servlet"></c:redirect>
--%>
<a href="<c:url value='/jsps/jstldemo2.jsp'></c:url>">利用css+jstl技术进行演示</a>
<hr/>