jsp页面是为了显示数据,如果嵌入java代码,就会使得可读性差,java代码也难以重用和维护。为了不在jsp页面里面写java脚本,我们使用了jsp内置的行为、指令,也使用el表达式来获取对象和值,但是这些并没有提供循环遍历的功能,所以我们就需要用到jstl标签库。
引入方式
要使用jstl标签库,我们需要用到tablib指令引入。
core标签库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
引入这个标签库,我们能使用:<c:out/>、<c:set/>、<c:remove/>、<c:if test=""/>、<c:choose />、<c:forTokens />、<c:catch /> 、<c:url />、 <c:redirect />、<c:forEach/>等标签。
- <c:out/>标签
<c:out value="" default="" escapeXml />
作用:将指定内容输出到浏览器,默认支持el表达式,
value:输出的值,可以为EL表达式
default:如果value属性的值不存在,会输出default属性值
excapeXml:如果为true,则会为value中的特殊字符进行转义,默认为true
<c:out value="${user.name}" default="不存在这个值" /> <br/>
<c:out value="${empty user}" /> <br/>
<c:out value="字符串" /> <br/>
<c:out value="<b>不转义</b>" escapeXml="false"/> <br/>
image.png
第一行不存在user.name , 所以显示的是default里面的内容;
第四行选择不转义,所以<b></b>这些字符没有显示,并且内容加粗了
- <c:set/>标签
- <c:set var="" value="" [scope="{ page|request|session|application }"]></c:set>
这种var不能接受EL表达式,只能是字符 - <c:set target="" property="" value="" />
target:跟var类似,但是它只能够接受EL表达式,可以是一个对象,一个map等,和var进行互补
property:对象中的属性名
value:属性赋值
<c:set var="hello" value="hello page" scope="page"></c:set>
<c:set var="hello" value="hello request" scope="request"></c:set>
<c:out value="${hello}"></c:out><br/>
<c:out value="${requestScope.hello}"></c:out><br/>
<jsp:useBean id="user" class="bean.user" scope="page"/>
<c:set target="${user}" property="name" value="hello world"></c:set>
<c:out value="${user.name}"></c:out><br/>
image.png
- <c:remove />标签
<c:remove var="" scope=""/>
移除page域中的hello,显示时依次找page、request、session、application中的hello,所以最后显示的是request中的hello
<c:remove var="hello" scope="page"/>
<c:out value="${hello}"></c:out><br/>`
image.png
- <c:if test=""/>标签
<c:if test="${not empty user.name }">
<c:out value="username: ${user.name}"></c:out><br/>
</c:if>
image.png
- <c:choose />标签
<c:choose />相当于switch的作用
<c:when />相当于case的作用
<c:otherwise />相当于default的作用
<c:set target="${user }" property="age" value="15"/>
<c:choose>
<c:when test="${user.age<10 }">小于10岁</c:when>
<c:when test="${user.age<20 }">大于等于10岁小于20岁</c:when>
<c:otherwise>大于等于20岁</c:otherwise>
</c:choose>
image.png
- <c:forTokens > 标签
将自定义字符串,按照指定字符进行分割,并遍历输出
items:自定义字符串
delims:指定字符
var:遍历的变量名。
<c:forTokens items="lin-jia-qian" delims="-" var="s">
${s }<br/>
</c:forTokens>
image.png
- <c:catch > 标签
相当于try catch
<c:catch var="e">
<c:set target="cuowudefuzhi" property="hi" value="dfdvc"/>
</c:catch>
<c:if test="${not empty e }">
${e }<br/>
</c:if>
image.png
- <c:forEach/>标签
<c:forEach items="" var="" />
items:需要遍历的对象
var:用于存放遍历的每一项内容,存放在page作用域,只能在循环体中使用
普通for循环:
<c:forEach var="num" begin="0" end="10" step="2">
${num }
</c:forEach>
image.png
forEach list集合:
<%
List<String> list=new ArrayList<String>();
list.add("item1");
list.add("item2");
list.add("item3");
pageContext.setAttribute("list", list);
%>
<c:forEach items="${list }" var="str" >
${str}<br/>
</c:forEach>
image.png
forEach map映射:
<%
Map<String,String> map=new HashMap<String,String>();
map.put("1","hello");
map.put("2","world");
pageContext.setAttribute("map", map);
%>
<c:forEach items="${map }" var="item">
${item.key }=${item.value }<br/>
</c:forEach>
image.png
- <c:url />标签
<c:url value="" var="" scope="" />
value:要进行重写的url
var:如果写了该变量,那么就会将其重写后的url存入作用域中,默认是page,以scope属性值为准
scope:作用域范围,默认是page
<c:url value="/index.jsp" var="beanNameUrl" scope="page">
<c:param name="userName" value="lin"></c:param>
</c:url>
<a href="${ beanNameUrl}">点击跳转</a>
image.png
这个可以用于浏览器把cookie功能关闭时传递sessionid。
- <c:redirect />标签
<c:redirect url="/index.jsp">
</c:redirect>
- <c:import />标签
类似于JSP的include行为和include指令,JSTL也提供了include功能的标签<c:import/>,不过import标签功能更强大,甚至可以把Internet上的网页包含进来。
<c:import url="http://www.baidu.com" charEncoding="utf-8"/>
fmt标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
是一些辅助性功能标签,就讲解一个把,用的不多
fn方法库
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
提供一些方法,函数,例如字符串查找,截取之类。
必须在el表达式中使用
格式:fn:methodName()的格式,比如:fn:contains()
1、fn:contains(string, substring)
如果参数string中包含参数substring,返回true。
2、fn:containsIgnoreCase(string, substring)
如果参数string中包含参数substring(忽略大小写),返回true
3、fn:endsWith(string, suffix)
如果参数 string 以参数suffix结尾,返回true。
4、fn:escapeXml(string)
将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回。
5、fn:indexOf(string, substring)
返回参数substring在参数string中第一次出现的位置。
6、fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
7、fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。
8、fn:replace(string, before, after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果。
9、fn:startsWith(string, prefix)
如果参数string以参数prefix开头,返回true。
10、fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置。
11、fn:substringAfter(string, substring)
返回参数substring在参数string中后面的那一部分字符串。
12、fn:substringBefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串。
13、fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回。
14、fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回。
15、fn:trim(string)
去除参数string 首尾的空格,并将其返回。
其他库
除此之外,还有sql库和xml库,不过一般不会在里面用
网友评论