JSTL(jsp standard tag Library) jsp标准标签库,它是apache对el表达式的扩展,jstl与el结合可以完成更强大的功能。
JSTL它是一种标签语言,它不是jsp内置标签,所以在使用JSTL需要导入相关的jar包。
核心标签库一共有12个:
标签名 | 功能 | 备注 |
set | ||
if | ||
forEach | ||
out | ||
remove | ||
redirect | 用于重定向 | |
choose when otherwise | ||
forToken | ||
url 和 param | ||
catch | ||
import |
1、set标签:
<body> <c:set scope="request" value="tom" var="name"></c:set> <%--上述jstl标签相当于是request.setAttribute("name","tom") --%> ${requestScope.name} <%-- scope:域范围 value:设置值 var:设置的名称 --%> <br> <% User user = new User(); user.setUsername("fox"); request.setAttribute("user", user); %> <c:set property="username" target="${user}" value="james" /> ${user.username} <%-- 上述的jstl代码,相当于 从request域中获了到user对象, 并给user对象赋值username=james, 备注,User是一个实体类, user.setUser("james"); --%> </body>
2、if标签:
<body> <c:if test="false"> hello </c:if> <hr> <% request.setAttribute("a", 10); request.setAttribute("b", 20); %> <c:if test="${a>b}"> <!--这个地方不能写${a}>${b}, 也不能写${a>${b}}--> ${a } </c:if> <c:if test="${a<b}"> ${b } </c:if> <%-- if标签必须有test属性,并且它的值必须是true/false --%> </body>
3、forEach标签:
c:forEach基本使用1 <br> <c:forEach begin="1" end="10" var="n" step="1"> ${n}<br> </c:forEach> <%-- 上述代码相当于是 for(int n=1;n<=10;n++){ out.println(n); } begin:循环开始变量 end:循环结束变量 var:定义一个变量,用于接收循环 step:步长 --%> <hr> c:forEach基本使用2 <br> <c:forEach begin="1" end="10" var="n" step="1" varStatus="vs"> ${n}--${vs.count }--${vs.index}--${vs.first}--${vs.last}--${vs.current}<br> </c:forEach> <%-- varStatus它是用于记录循环状态,它是一个对象,可使用的属性有 count:用来记录循环的元素的个数 index:用来记录所循环的容器中的元素的下标 first:判断当前是否是第一个元素 last:判断当前是否是最后一个元素 current:代表当前循环的元素 --%> </body>
<body> c:forEach高级使用: <hr> <h1>遍历数组</h1> <% String[] st = { "aaa", "bbb", "ccc" }; request.setAttribute("st", st); %> <c:forEach items="${st}" var="s" varStatus="vs"> ${s}---${vs.index }<br> </c:forEach> <%-- items:用于接收一个容器 var:它是用于接收从容器中迭代出来元素 上面代码相当于增强for循环 for(String s:st){ } --%> <hr> <h1>遍历List集合</h1> <% List<String> list = new ArrayList<String>(); list.add("111"); list.add("222"); list.add("333"); request.setAttribute("list", list); %> <c:forEach items="${list}" var="n"> ${n}<br> </c:forEach> <hr> <h1>遍历Map集合</h1> <% Map<String,String> map=new HashMap<String,String>(); map.put("one", "111"); map.put("two", "222"); request.setAttribute("map", map); %> <c:forEach items="${map}" var="entry"> ${entry.key}--${entry.value}<br> </c:forEach> <%-- 对map集合遍历,它相当于是使用entrySet()方法遍历 Set<Map.Entry<String,String>> entry=map.entrySet(); for(Map.Entry<String,String> me:entry){ me.getKey() me.getValue(): } --%> </body>
4、out标签:
<body> <% request.setAttribute("msg", "<font color='red'>hello world</font>"); %> <c:out value="${msg}" default="good" escapeXml="true"/> <%-- value:代表要输出的信息 default:默认值 escapeXml:它的值如果是false,信息会被浏览器解析,如果为true,代表信息原样输出。 --%> </body>
5、remove标签:
<body> <% User user = new User(); user.setUsername("fox"); request.setAttribute("user", user); %> ${user} <!-- 获取user并打印 --> <c:remove var="user" scope="request"/> <%--上述代码相当于 request.removeAttribute("user")--%> ${user} <!-- 这里获取不到user,因为已经被删除了 --> </body>
6、redirect标签:
<body> <c:redirect context="/jstl" url="/demo1.jsp"/> <%-- 相当于response.sendRedirect("/jstl/demo1.jsp"); --%> </body>
7、choose when otherwise标签:
<body> <% int day = 50; switch (day) { case 1: out.println("周1"); break; case 2: out.println("周2"); break; case 3: out.println("周3"); break; case 4: out.println("周4"); break; case 5: out.println("周5"); break; case 6: out.println("周6"); break; case 7: out.println("周7"); break; default: out.print("无此天"); } %> <hr> <% request.setAttribute("day", 50); %> <c:choose> <c:when test="${day==1}">周1</c:when> <c:when test="${day==2}">周2</c:when> <c:when test="${day==3}">周3</c:when> <c:when test="${day==4}">周4</c:when> <c:when test="${day==5}">周5</c:when> <c:when test="${day==6}">周6</c:when> <c:when test="${day==7}">周7</c:when> <c:otherwise> 无此天 </c:otherwise> </c:choose> </body>
8、forToken标签:
<body> <% request.setAttribute("str", "aa,bb,cc"); %> <c:forTokens items="${str}" delims="," var="n"> ${n}<br> </c:forTokens> </body>
9、url 标签 和 param标签:
<body> <c:url context="/jstl" scope="request" value="/hello" var="myurl"> <c:param name="username" value="张三"></c:param> </c:url> ${requestScope.myurl} <%-- content它相当于工程名 scope:域范围 value:访问的资源路径 var:声明一个变量 --%> <%-- param就是描述参数 它的优点是可以直接将汉字进行url编码 --%> </body>
10、catch标签:
<body> <c:catch var="e"> <% int i=0; int n=10/i; %> </c:catch> ${e} </body>
11、import标签:
<body> <c:import url="demo1.jsp"></c:import> <%--相当于include操作, 静态导入 --%> </body>