JSTL标签库
-
什么是JSTL标签库?
-
Java Standard Tag Lib(Java标准的标签库)
-
JSTL标签库通常结合EL表达式一起使用。目的是让JSP中的java代码消失。
-
标签是写在JSP当中的,但实际上最终还是要执行对应的java程序。(java程序在jar包当中。)
-
-
使用JSTL标签库的步骤:
-
第一步:引入JSTL标签库对应的jar包。
-
tomcat10之后引入的jar包是:
-
jakarta.servlet.jsp.jstl-2.0.0.jar
-
jakarta.servlet.jsp.jstl-api-2.0.0.jar
-
-
在IDEA当中怎么引入?
-
在WEB-INF下新建lib目录,然后将jar包拷贝到lib当中。然后将其“Add Lib...”
-
一定是要和mysql的数据库驱动一样,都是放在WEB-INF/lib目录下的。
-
什么时候需要将jar包放到WEB-INF/lib目录下?如果这个jar是tomcat服务器没有的。
-
-
-
第二步:在JSP中引入要使用标签库。(使用taglib指令引入标签库。)
-
JSTL提供了很多种标签,你要引入哪个标签????重点掌握核心标签库。
-
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 这个就是核心标签库。 prefix="这里随便起一个名字就行了,核心标签库,大家默认的叫做c,你随意。"
-
-
第三步:在需要使用标签的位置使用即可。表面使用的是标签,底层实际上还是java程序。
-
-
JSTL标签的原理
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 以上uri后面的路径实际上指向了一个xxx.tld文件。 tld文件实际上是一个xml配置文件。 在tld文件中描述了“标签”和“java类”之间的关系。 以上核心标签库对应的tld文件是:c.tld文件。它在哪里。 在jakarta.servlet.jsp.jstl-2.0.0.jar里面META-INF目录下,有一个c.tld文件。
-
源码解析:配置文件tld解析
<tag> <description>对该标签的描述</description> <name>catch</name> 标签的名字 <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class> 标签对应的java类。 <body-content>JSP</body-content> 标签体当中可以出现的内容,如果是JSP,就表示标签体中可以出现符合JSP所有语法的代码。例如EL表达式。 <attribute> <description> 对这个属性的描述 </description> <name>var</name> 属性名 <required>false</required> false表示该属性不是必须的。true表示该属性是必须的。 <rtexprvalue>false</rtexprvalue> 这个描述说明了该属性是否支持EL表达式。false表示不支持。true表示支持EL表达式。 </attribute> </tag> <c:catch var=""> JSP.... </c:catch>
-
jstl中的核心标签库core当中有哪些常用的标签呢?
-
c:if
-
<c:if test="boolean类型,支持EL表达式"></c: if>
-
<%@page contentType="text/html;charset=UTF-8" %> <%--引入核心标签库--%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%--核心标签库中的if标签--%> <%--test属性是必须的。test属性支持EL表达式。test属性值只能是boolean类型。--%> <c:if test="${empty param.username}"> <h1>用户名不能为空。</h1> </c:if> <%--没有else标签的话,可以搞两个if出来。--%> <%--if标签还有var属性,不是必须的。--%> <%--if标签还有scope属性,用来指定var的存储域。也不是必须的。--%> <%--scope有四个值可选:page(pageContext域)、request(request域)、session(session域)、application(application域)--%> <%--将var中的v存储到request域。--%> <c:if test="${not empty param.username}" var="v" scope="request"> <h1>欢迎你${param.username}。</h1> </c:if> <hr> <%--通过EL表达式将request域当中的v取出--%> <%--v变量中存储的是test属性的值。--%> ${v}
-
-
c:forEach
-
<c:forEach items="集合,支持EL表达式" var="集合中的元素" varStatus="元素状态对象"> ${元素状态对象.count} </c: forEach>
-
<c:forEach var="i" begin="1" end="10" step="2"> ${i} </c: forEach>
-
<%--var用来指定循环中的变量--%> <%--begin开始--%> <%--end结束--%> <%--step步长--%> <%--底层实际上:会将i存储到pageContext域当中。--%> <c:forEach var="i" begin="1" end="10" step="1"> <%--所以这里才会使用EL表达式将其取出,一定是从某个域当中取出的。--%> ${i}<br> </c:forEach> <hr> <%--var="s"这个s代表的是集合中的每个Student对象--%> <%--varStatus="这个属性表示var的状态对象,这里是一个java对象,这个java对象代表了var的状态"--%> <%--varStatus="这个名字是随意的"--%> <%--varStatus这个状态对象有count属性。可以直接使用。--%> <c:forEach items="${stuList}" var="s" varStatus="stuStatus"> <%--varStatus的count值从1开始,以1递增,主要是用于编号/序号。--%> 编号:${stuStatus.count},id:${s.id},name:${s.name} <br> </c:forEach>
-
-
c:choose c:when c:otherwise
<c:choose> <c:when test="${param.age < 18}"> 青少年 </c:when> <c:when test="${param.age < 35}"> 青年 </c:when> <c:when test="${param.age < 55}"> 中年 </c:when> <c:otherwise> 老年 </c:otherwise> </c:choose>
-
-
改造OA
-
使用什么技术改造呢?
-
Servlet + JSP + EL表达式 + JSTL标签。进行改造。
-
-
在前端HTML代码中,有一个标签,叫做base标签,这个标签可以设置整个网页的基础路径。
-
这不是Java的语法,也不是JSP的语法。是HTML中的一个语法。HTML中的一个标签。通常出现在head标签中。
-
< base href="http://localhost:8080/oa/">
-
在当前页面中,凡是路径没有以“/”开始的,都会自动将base中的路径添加到这些路径之前。
-
< a href="ab/def"></ a>
-
等同于:< a href="http://localhost:8080/oa/ab/def"></ a>
-
-
需要注意:在JS代码中的路径,保险起见,最好不要依赖base标签。JS代码中的路径最好写上全路径。
-
<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">
注意html的base标签可能对JS代码不起作用。所以JS代码最好前面写上"/oa"
<script type="text/javascript">
function del(dno) {
var ok = window.confirm("亲,删了不可恢复哦!");
if (ok) {
/*注意html的base标签可能对JS代码不起作用。所以JS代码最好前面写上"/oa" */
document.location.href = "${pageContext.request.contextPath}/dept/delete?deptno=" + dno;
}
}
</script>