JavaWeb(JSTL)

JSTL学习:
作用:提升jsp中的逻辑代码编写效率,使用标签来学习。
使用:
    JSTL的核心标签库
    JSTL的格式化标签库
    JSTL的SQL标签库
    JSTL的函数标签库
    JSTL的xml标签库
JSTL的核心标签库使用:
1.导入jar包:需要先到官网http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/下载jstl的包,解压后,将里面的jstl.jar和standard.jar两个包复制到项目----->Webcontent------>lib的目录下。
2.声明jstl标签库的引入(核心标签库)

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

这个也就是上一章说的jsp的taglib指令的使用方式。


3.内容:
基本标签学习:

<c:out value="数据" default="默认值"></c:out>

数据可以为常量,也可以是EL表达式。
作用:将数据输出给客户端, 其实直接使用el表达式它就会自己输出了,但是好处是,使用标签会使整个页面变得和谐一点,而且它在输出变量的情况下,还可以设置默认值,就是万一找不到这个变量,就会输出默认值,默认值可以不设置。



<c:set var="键名" value="数据" scope="指定作用域"></c:set>

<c:set>标签,就是往作用域里面存进去值的,作用域有四个,分别是page,request,session,applicatiopn.
作用:存储数据到作用域中
var:表示存储的键名
value:表示存储的数据的值
scope:表示要存储的对象pageContext,request,session,applicatiopn.

<c:remove var="hello" scope="page"></c:remove>

<c:remove>标签,表示删除作用域中指定的数据
var:表示要删除的键的名字
scpoe:表示要删除的作用域(可选)
注意:
    如果不在指定的作用域的情况下使用该标签删除数据,则它会将四个作用域对象中符合删除条件(键名与var后面的数据一致)的数据全部删除。

<!-- 基本标签学习 -->
<c:out value="数据" default="默认值"></c:out>
<c:set var="变量名" value="变量值" scope="指定作用域"></c:set>

<c:set var="hello" value="hello pageContext" scope="page"></c:set>
<c:set var="hello" value="hello request" scope="request"></c:set>
<c:set var="hello" value="hello session" scope="session"></c:set>
<c:set var="hello" value="hello application" scope="application"></c:set>
<c:remove var="hello" scope="page"></c:remove>
<c:out value="${hello}"></c:out>
<c:out value="${requestScope.hello}"></c:out>
<c:out value="${sessionScope.hello}"></c:out>
<c:out value="${applicationScope.hello}"></c:out>

上面设置了多个hello变量,但是他们的值和作用域是不一样的,如果把那一句<c:renove>标签注释掉,将会输出如下图:
在这里插入图片描述
1.因为四个set,分别把四个对应的数据存进去对应的作用域了,那么,输出的时候,想第一句,没指定作用域,为什么输出“hello pageContext”呢?因为,一旦你要输出,tomcat服务器就会从这四个区域里面查找,按从小到大查找,一旦找到了,也就不再往下寻找了,如果后面三个out不指定输出作用域,那么四句话都将会输出“hello pageContext”。但是后面三个out标签指定了对应的作用域,那么tomcat服务器将会去里面寻找对应的值。
2.如果remove那一句去掉,那么输出结果就是
在这里插入图片描述
为什么?因为remove指定的作用域为page,把page这个作用域里面的名为hello的数值删了,tomcat服务器在page作用域没找到hello,他就会去request作用域里面找,找到了,就不再往下了,后面那三个是因为他们都指定作用域了。

<c:remove var="hello" ></c:remove>

如果把remove这一句写成这样,那么四个都不会有输出,因为全被删了(符合删除条件)。
对于out标签,也可以在value标签里面直接填充一个字符串,那么它就会照着字符串输出。


逻辑标签学习:
<c:if>标签
传统方式在jsp里面做判断并输出一句话,与jstl在jsp里面输出一句话

<!-- 传统方式 -->
<%
	int num=4;
	if(num>3)
	{
%>
<p>今天天气真好!!!</p>
<%
} 
%>
<!-- jstl方式 -->
<c:set var="n" value="4"></c:set>
<c:if test="${n>3}">
<b>今天天气真好!</b>
</c:if>
<!-- 相当于java里面的单分支判断 -->

<c:if test="${表达式}">
前端代码
</c:if>
作用:进行逻辑判断,相当于java的单分支判断
注意:逻辑判断标签的表达式需要依赖于EL表达式的逻辑运算,也就是涉及到表达式中的数据必须从作用域中获取(EL表达式只能获取作用域的数值),所以,使用这个if标签,通常要和set标签联合起来使用。

<c:choose test="${表达式}">
  <c:when test=""></c:when>
  <c:when test=""></c:when>
  <c:when test=""></c:when>

<c:choose>
<c:choose>标签,相当于java里面的多分支判断

<!-- java里面的多分支判断,test后面的值依赖于el表达式,只能做作用域中取 -->
<c:set var="score" value="85"></c:set>
<c:choose>
<c:when test="${score>80}"><b>优秀!</b></c:when>
<c:when test="${score>70 && score<=80}"><b>良好!</b></c:when>
<c:when test="${score>60}"><b>及格!</b></c:when>
<c:otherwise><b>不及格!</b></c:otherwise>
</c:choose>

与if标签类似,类似于java里面的多标签判断。只会执行一个when标签(java里面也是只会执行一个if条件),test后面的值依赖于el表达式的逻辑判断,他的值也只能从作用域中取,otherwise就相当于else标签,上面的条件都不符合,它就会执行最后的otherwise标签。


循环标签学习:
静态循环
<c:forEach begin=“1” end=“4” step=“2”>
循环体
<c:forEach>
作用:循环内容进行处理
使用:
begin:声明循环开始位置
end:声明循环结束位置
step:声明步长,举个栗子,如果step=“2”,相当于for循环里面i=i+2;
varStaus:声明变量记录每次循环的数据(下标,次数,是否是第一次循环,是否是最后一次循环)
var:声明变量,记录每次循环的结果
    注意:数据存储在作用域中,需要使用EL表达式获取
例如:

<c:forEach begin="2" end="4" step="1" varStatus="vs">
1111--->${vs.index}---->${vs.count}--->${vs.first}--->${vs.last}<br>
</c:forEach>

这个就是获得上面说的数据的应用。
动态循环

<c:forEach items="${list}" var="str">
   bbb   ${str}<br/>
</c:forEach>

items会把一个对象的长度从1开始循环一次,var设置的不是一个变量的名字,是存储每次循环变量所用的数据。

<!-- jstl的循环标签 -->
<!-- 传统表格方式 -->
<table border="1">
<tr>
	<td>课程名称</td>
	<td>教师</td>
	<td>价格</td>
	<td>重要性</td>
</tr>
<%
	for(int i=0;i<3;++i)
	{
%>
<tr>
	<td>java</td>
	<td>张老师</td>
	<td>免费</td>
	<td>很重要</td>
</tr>
<%} %>
</table>

<!-- 使用jstl标签完成循环 -->
<!-- begin是起始数数值,end是结束数值,step是步长 varStatus里面设置的是一个变量名
相当于上面循环的i,因为我们只有起始值和结束值,但是万一要用到这个值进行逻辑判断,这个就是
变量名,index打印的当前循环所在的下标,count打印的是次数 ,也就是说count的值永远从1开始
而index的值从begin开始,first和last是判断你是否在第一次循环和最后一次循环-->
<!-- 常量循环 -->
<c:forEach begin="2" end="4" step="1" varStatus="vs">
1111--->${vs.index}---->${vs.count}--->${vs.first}--->${vs.last}<br>
</c:forEach>

<!-- 动态循环 -->
<%
ArrayList<String> list=new ArrayList<String>();//记得导入java.util.ArrayList;
list.add("a");
list.add("b");
list.add("c");
list.add("d");
request.setAttribute("list", list);//把list放到作用域里面
%>
<!-- str类似于一个变量,它每次的值是对应的下标的数据-->
<c:forEach items="${list}" var="str">
   bbb   ${str}<br/>
</c:forEach>
<table border="1">
<tr>
	<td>java</td>
	<td>张老师</td>
	<td>免费</td>
	<td>很重要</td>
</tr>
//着重注意var的使用
<c:forEach items="${list}" var="s">
<tr>
<td>${s}</td>
<td>${s}</td>
<td>${s}</td>
<td>${s}</td>
</tr>
</c:forEach>
</table>

<!-- 遍历map -->
<%
HashMap<String,String>map=new HashMap<String,String>();
map.put("a1","哈哈哈");
map.put("a2", "嘻嘻嘻");
request.setAttribute("map",map);//把map放到作用域里面,前面的键名,后面是对象名
%>
<c:forEach items="${map}" var="m" >
${m}<br>//把m整个打印出来,键名=数据
${m.key}<br><!-- 拿到当前的m对象的键名 -->//只打印键名
${m.value}<br><!-- 拿到当前的m对象的值 -->//只打印数据
</c:forEach>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值