java标签库分分为上述几种,一般经常使用的是核心和函数,接下来会分别讲解这几种,和常见的用法。
一般标签库会和el表达式一起使用,所以在学习标签库前最后也学习下el表达式的使用。
导入后展开
可以从jar包查看相对应的标签库得tld文档,里面会描述每个标签的说明和用法
先从核心标签库开始
tld文档有几个重点,第一个就是uri,这是等下在jsp页面引入标签库时是的uri
基本一个tld文档的重点内容就这么多了,分开看其实也不是很难
1 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
在jsp页面头使用该标签来导入标签库,uri对应tld文档中的uri,prefix标识符
1 <jsp:useBean id="userBean" class="bean.userBean" scope="page"></jsp:useBean><!-- 创建出一个实体bean --> 2 <c:set target="${userBean}" property="name">孤傲苍狼</c:set> 3 获取属性:<jsp:getProperty property="name" name="userBean"/> 4 <!-- 使用核心标签库中的set标签对实体bean赋值 -->
jsp:userBean 使用jsp内置标签库实例化出一个实体类,并且存入page域中(默认page),在使用以c为别名的核心标签库种的set标签进行赋值和取值
target要赋值的对象,记住这里得使用el表达式,对应上面的id名,property要赋值的对象的属性名
记住基本上标签库中的对象和值都是存放在域中的,默认是page。
在使用getProperty标签 name要取值的对象名 property要去值的属性名
<c:remove var="userBean"/><!-- 要移除的对象名,不使用el表达式 --> <c:catch var="errorInfo"><!-- 捕获异常,var异常的信息对象 --> <jsp:getProperty property="name" name="userBean"/> </c:catch> <!-- 异常的信息获取 --> 异常:<c:out value="${errorInfo }"/><br/> 异常 errorInfo.getMessage:<c:out value="${errorInfo.message }"></c:out><br/> 异常 errorInfo.getCause: <c:out value="${errorInfo.cause }"></c:out><br/> 异常 errorInfo.getStackTrace: <c:out value="${errorInfo.stackTrace }"></c:out> <c:if test="${errorInfo ne null }" var="resutl" scope="page"> 结果<c:out value="${resutl}"></c:out> </c:if>
<c:set var="score" value="0"></c:set> <c:choose> <!-- 当test的值为真的时候执行 --> <c:when test="${score>=90 }">牛逼啊</c:when> <c:when test="${score>=70 }">可以啊</c:when> <!-- 其他情况 --> <c:otherwise>弱鸡</c:otherwise> </c:choose>
<c:out value="begin起始位置,items=要循环的对象,var=每次的元素end结束位置,step自增数 varStatus当前信息"></c:out><br/> <c:forEach var="va" items="${list}" begin="0" end="5" step="2" varStatus="s"> 值:<c:out value="${va}"/> 下标:<c:out value="${s.index}" /> 是否是第一: <c:out value="${s.first}" /> 是否是最后一个: <c:out value="${s.last}" /> <br/> </c:forEach>
核心标签库的常用这么多,其他的可以查看tld
函数标签库
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
转换大写
${fn:toLowerCase("Www.CNBLOGS.COM") }
函数标签只能写在el表达式里,大部分都是对字符串的处理,比如格式化成数组,检索indexof等
xml标签库
1 <h3>xml标签库</h3> 2 <c:import url="http://localhost:8080/jspStudey/test.xml" var="bookInfo"/> 3 <c:import url="http://localhost:8080/jspStudey/test.xsl" var="xslt"/> 4 <x:parse xml="${bookInfo }" var="output"/> 5 <%-- <x:out select="$output/books/book[1]/name" /> --%> 6 <x:transform xml="${bookInfo }" xslt="${xslt}"/>
使用import导入xml,在使用 x:parse 进行处理。xml=xml的资源对象 var=处理好的xml对象
x:out 把值输出跟核心的out差不多,xml处理后要输出只能用这个这个输出 select查询,第一个$(没有括号) 处理好的var名 /分割 根节点名 /子节点名
sql标签库
1 <sql:setDataSource var="con" 2 driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" 3 url="jdbc:sqlserver://localhost:1433;databaseName=work" user="sa" password="sasa"/> 4 <sql:query var="result" dataSource="${con }" >select * from stu;</sql:query> 5 <c:forEach var="row" items="${result.rows }"> 6 <c:out value="${row.stuId }"></c:out> 7 <c:out value="${row.stuname }"/> 8 </c:forEach> 9 <%-- <sql:update dataSource="${con }" var="result" >insert into stu values(1006,'gaoxiao2',20,80);</sql:update> --%> 10 <c:set var="empId" value="1003"></c:set> 11 <sql:update dataSource="${con}" var="count" > 12 delete from stu where stuId=?; 13 <sql:param value="${empId}" /> 14 </sql:update> 15 <c:if test="${count eq 0}">没有删除数据</c:if> 16 </body>
本人在学sql标签库很纳闷,额还是觉得在jsp上写sql语句很别扭很不喜欢
setDataSource 设置数据源 var=数据源对象名 driver=驱动类 url=连接语句 user=数据库用户名 password=密码 这里使用的是sqlserver 不同的数据库和版本不同咯
query 查询语句 dataSource=数据源名 中间查询语句
然后循环输出 其他看代码应该看的懂把
国际话标签库
本人觉得这个会比较麻烦点,会讲的详细点
src下的包里的资源文件,最后一个是模版文件,很重要。其他文件的命名必须是 模版文件名_国家名.properties 这是规定,原因是检索的机制
系统会去检索这个资源包下的文件,指定模版文件名,然后会根据当前的国家名,比如中国就时zh,然后它会在模版名后面家上 _ 下划线 然后在加上国家名,
然后去检索这文件名的文件
文件的内容 :以键值对的形式
jsp使用
1 <% 2 //request.getLocale()获取访问用户所在的国家地区 3 ResourceBundle myResourcesBundle=ResourceBundle.getBundle("myproperties.myproperties",request.getLocale()); 4 %> 5 <body> 6 <form> 7 <%=myResourcesBundle.getString("username") %>: <%=myResourcesBundle.getString("password") %> 8 </form> 9 10 <fmt:setBundle basename="myproperties.myproperties" var="bundle"/> 11 <fmt:message bundle="${bundle }" key="username"></fmt:message> : <fmt:message bundle="${bundle }" key="password"></fmt:message>
先贴上代码,在详细的讲,前面是小脚本的写法,后面是fmt国际化标签库得写法,标签库就是这样,把事情写在类了,而在jsp页面上进行精细化,让jsp变的很简洁
小脚本中 先获取当前的国家名 然后2个参数,一个资源的模版文件的路径 ,存放在src根下,第二个是国家名,然后会自动去找他该文件,在通过名字就可以获取到对应的值
标签库更简单,指定名字后就可以直接获取了。
注意的是资源文件,中文的进行转码,jdk中有工具可以进行转码的,native2ascii.exe可以使用这个查询对应的ascall码
差不多就这样了,标签库不是很难,主要的就是得的看的懂el表达式和tld文档,如果看的懂基本上就使用就没问题了。而且在后面自定义标签库时也会轻松很多。
快1点了,第一篇博客差不多该结束了。送上我老师的一句话,拿来主义,共享精神。