当先锋百科网

首页 1 2 3 4 5 6 7
JSTL学习笔记自己整理:
第一部分:c标签
1.doctype的引入
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


2.标签的引入:
prefix 前缀 uri 寻找的地址:在Myeclipse工程中的JavaEE 5 Libraries 下jstl-1.2.jar
打开该路径下的META-INF文件夹,打开c.tld这个文件 找到c标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


3.c:out 标签
直接输出一个常量
<c:out value="hello,world"></c:out>,这样就可以在页面上看到输出的hello,world


4.从index.jsp页面定位到首页面的方法
<jsp:forward page="/WEB-INF/login.jsp"></jsp:forward>


5.如何使用c:out输出pageContext request session application 中的数据
eg: 
request.setAttribute("abc","nihao");
使用c:out 输出request中的内容
<c:out value="${abc}"></c:out>
注意:如果上面的四个域对象中都有名叫abc的值,那么这个标签的查找范围是:pageContext--->request--->session--->application
如果在某一个中找到了,那么查找停止,直接输出,不再往下面继续查找了(查找范围是从小到大)
如果在四个域对象中都没有找到名字为“abc”的对象,那么不输出任何东西,注意不会报错,
因为c:out标签有一个默认的属性 相当于该属性为空,如下
<c:out value="${abc}" default=""></c:out>
如果希望使用c:out标签输出的时候,没有任何值,可以使用default=“没有值”


6.如果有如下的情况:request.setAttribut("abc","你好<a href='www.baidu.com'>百度</a>")
<c:out value="${abc}"></c:out>
如果这种情况不做任何处理,那么输出结果是:你好<a href='www.baidu.com'>百度</a>
但是有些情况,我们需要输出的结果是个超链接,那么可以使用如下的方法设置:
<c:out value="${abc}" default="没有值" escapeXml="false"></c:out>
那么加上了escapeXml="false"(默认是true 表示把超链接以文本形式显示)属性后,上面的结果会以超链接的形式显示出来


7.如果request等域对象中存放的是对象,想在另外一个jsp页面取出该对象,如何取出?
方法:
比如request.setAttribute("userInfor",user);//后面的user是一个对象具有name、age属性
输出对象的方法是:
<c:out value="${userInfor.name}"></c:out>
<c:out value="${userInfor.age}"></c:out>


使用EL表达式直接输出也是可以的(直接使用):${userInfor.name} &&&${userInfor.age*20}


8.如何查找JSP文件被解析后的地址:
在tomcat的安装路径下\work\Catalina\localhost\jstl\org\apache\jsp\WEB-002dINF\c_005fout_jsp.java


9.<c:set> 标签用于向某个范围设置某个值,scope 表示需要设置哪个域范围下(用处其实较少 )
<c:set var="abc" value="中国北京"></c:set>
然后就可以使用c:out标签取出刚刚设置的值了
<c:out value="${abc}"></c:out>


10.<c:remove>标签,这个标签用于删除某个变量或是属性
属性:
var: 需要被删除的变量名
scope:变量的作用范围,若没有指定,默认为全部查找(可选)
实例:
<c:remove var="sampleValue" scope="session" />
${sessionScope.sampleValue}
该示例将存在于session中的名为sampleValue的变量删除,下一句话输出该变量时,由于已经被删除了,该变量已经不存在了 


11.<c:catch>这个标签用于捕获嵌套在它内部的标签抛出的异常
示例:当c:catch块中的内容出现异常的时候,会将异常信息存放到var 变量中
<c:catch var="myexcption">
<% int i=9/0; %>
</c:catch>
<c:out value="${myexcption}"></c:out>
访问时,会打印出java.lang.ArithmeticException:/by zero
//或者使用如下的方式,打印出的信息更加详细
<c:out value="${myexcption.message}"></c:out>


第二部分:条件标签
1.<c:if>标签 用于进行条件判断,如果它的test属性为true,那么就去处理它的body
request.setAttribute("a","hello");
request.setAttribute("age","56");
<c:if test="${a=='hello'}">
ok!
</c:if>
<c:if test="${a!='hello'}">
no ok!
</c:if>


//数字的判断,直接使用如下的方法,不用类型转换
<c:if test="${age==56}">
ok!
</c:if>


<c:if test="${age>10 and age<34}">
ok!
</c:if>
2.如果某个对象的属性值中为数字,可以使用如下的方法判断该属性
假如:有个Cat类 具有name,age 属性
现在需要判断Cat对象中age的大小
用法如下:
Cat cat1 = new Cat();
//注意在这里使用cat1.age 不是直接访问的age属性,而是访问的cat1.getAge()方法
<c:if test="${cat1.age>3}"> 
 输出:猫的年龄大于3!
</c:if>


3.<c:choose>用于条件的选择,它和<c:when> <c:otherwise>一起使用
<c:when> 代表<c:choose>的一个条件分支,使用它的限制条件:
1.必须以<c:choose>作为它的父标签
2.必须在<c:otherwise>之前出现
<c:otherwise>代表了<c:choose>的最后一个分支,使用它的限制条件:
1.必须以<c:choose>作为它的父标签
2.必须是<c:choose>的最后分支出现


4.一个JSP页面中可以有多个page指令
即:<%@ page import="java.util.*" %>可以有多个


第三部分:迭代标签
1.加强for循环的用法:
for(Cat cat:al){
out.println(cat.getName()+"  "+cat.getAge());
}
for(要循环的类型定义 :需要被循环的对象)
如:
int arr[]={1,23,3,4,5};
for(int i:arr){
System.out.println(i);
}


Collection collection = new ArrayList();
c.add(new String("aaa"));
c.add(new String("bbb"));
c.add(new String("ccc"));
for(Object obj:collection){
System.out.println(obj);
}


2.
<c:foreach>具有的属性:begin end var varStatus items step
items:指的是对象名称,如request.setAttribute("allCats",al),指的是allCats,al是ArrayList对象
var:是从items中取出来的一条信息,需要放到一个变量中去,就是var定义的变量


request.setAttribute("allCats",al);
<c:foreach items="${allCats}" var="cat">
<c:out value="${cat.name}"/>
<c:out value="${cat.age}"/>
</c:foreach>


3.<c:foreach> 在一个Collection钟迭代计算他的body内容,或是重复迭代固定的次数
<c:foreach>使用的范围:
 简单迭代,迭代固定的次数,指定集合中的迭代范围,迭代的状态,迭代不同的数据类型


实例1:
<c:foreach var="i" begin="1" end="10" >   //10次
<c:out value="${i}" />
</c:forEach>
实例2:
<c:foreach var="i" begin="1" end="10" step="3">
<c:out value="${i}" />   //打印出1 4 7……
</c:forEach>


4.<c:forTokens>标签可以根据某个分隔符分隔指定字符串,相当于java.util.StringTokenizer类
实例1:
delims:代表要分隔的那个符号
<c:forTokens items="aa,bb,cc,dd" begin="0" end="2" step="2" delims="," var="aValue">
${aValue}
</c:forTokens>
分析:需要分隔的字符串为:"aa,bb,cc,dd",分隔符是","
begin属性指定从第一个","开始分隔
end属性指定分隔到第三个","
aValue是循环变量名,步长为2, 结果为:aa cc


实例2:
演示:items可以是变量
request.setAttribute("abc","aa,bb,cc,dd,你好,mdf,好啊");
<c:forTokens items="abc" delims="," var="aValue">
${aValue}
</c:forTokens>
输出结果:abc aa bb cc dd 你好 mdf 好啊