java_第一年_JavaWeb(13)
JSTL标签库——核心标签库
为了弥补html标签的不足,为了更加方便地在jsp页面中使用java逻辑代码,JSTL标签库因运而生,而其中的佼佼者,被恩宠最多的就是核心标签库了;
核心标签库从功能上可分为4类:
- 表达式控制标签:out标签、set标签、remove标签、catch标签
- 流程控制标签:if标签、choose标签、when标签、otherwise标签
- 循环标签:forEach标签、forTokens标签
- URL操作标签:import标签、url标签、redirect标签、param标签
JSP页面引入核心标签库的代码为:<%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<c:out>标签:输出要显示的数据
语法:<c:out value = "要显示的数据对象" [escapeXml="true|false"] [default = "默认值"] />
<c:out value = "要显示的数据对象" [escapeXml="true|false"]>默认值</ c:out>
value属性输出要显示的数据;
escapeXml属性表示是否将<、>、&、'、等特殊符号进行HTML编码后再进行输出,默认为true;
default属性表示当value属性输入为null输出的默认值;
<c:set>标签:将某个对象存到域范围、Map或JavaBean对象中
语法:<c:set value="值" var="名" [scope = "page|request|session|application"] />
<c:set var = "名" [scope = "page|request|session|application"]>值</ c:set>
<c:set value = "值" target="JavaBean对象" property = "属性名" />
<c:set target = "JavaBean对象" property = "属性名">值</ c:set>
1和2是向scope范围内存储一个值,3和4是给指定的JavaBean的一个属性赋值,相信各个属性代表的意义也很容易理解,就不做解释了;
为了不让大家理解错还是举个小栗子吧,可以结合之前引用JavaBean对象所使用的<jsp:useBean>标签,如下所示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<jsp:useBean id="person" class="lzj.learn.Person"/>
<body>
<c:set target = "${person}" porperty = "name">xiao兆</ c:set>
</body>
这里要注意的是需要使用EL表达式代表JavaBean对象,而不能直接使用target = "person";下面两节就会补充EL表达式了^_^;
<c:remove>标签:在域范围或Map、JavaBean对象中移除某个变量的值
语法:<c:remove var = "名" [scope = "page|request|session|application"] />
<c:catch>标签:用于捕获产生异常的代码,可用var属性将所捕获的异常对象保存在page的这个域中
语法:<c:catch var = "表示捕获异常对象的变量名">可能产生异常的代码</ c:catch>;
<c:if>标签:用于判断语句,将结果保存,或判断是否执行标签体,效果和if语句类似
语法:没有标签体时:<c:if test = "判断内容" var = "名" [scope = "page|request|session|application"] />
有标签体时:<c:if test ="判断内容" [var = "名"] [scope = "page|request|session|application"]>标签体,也是判断成功时执行的内容</ c:if>
其中的var属性的值只有true或false,用于储存判断结果;
<c:choose>标签、<c:when>标签、<c:otherwise>标签:这3个标签通常一起使用,choose标签是when和otherwise标签的父标签,其效果大家应该可以感觉出来,类似"if-else if-else"的复杂条件判断结果
语法:<c:choose>
<c:when test = "判断内容">业务逻辑1</ c:when>
<c:when test = "判断内容">业务逻辑2</ c:when>
<c:otherwise>业务逻辑3</ c:othewise>
</ c:choose>
看完其语法相信大家应该可以更好理解其作用;
<c:forEach>:根据循环条件遍历集合中的元素
语法:<c:forEach var = "名" items = "集合名" varStates = "statesname" begin = "begin" end = "end" step = "step" >输出内容</ c:forEach>
var属性:设定变量名储存各元素;
items属性:指定要遍历的集合;
varStates属性:指各个元素在循环中的状态信息
begin属性:表示循环在集合中的起始位置;
end属性:表示循环在集合中的结束位置;
step属性:表示循环时的步长;
这个通过个范例来加深理解:
<%--创建一个集合,并将其放到一个对象名为list中 --%>
<% List<String> list = new ArrayList<String>();
list.add(,xiao);
list.add(,zhao);
list.add(,lin);
list.add(,jia);
request.stAttribute("list" , list); %>
<c:forEach var = "lzj" items = "${list}" varStates =" jzl " begin = "" end = "" step = "" >
<c:out value = "${lzj}" /》的属性:<br>
<%--该元素所在的位置,即索引是多少--%>
<c:out value = "${jzl.index}" />
<%--该元素是不是循环的第一个元素--%>
<c:out value = "${jzl.first}" />
</ c:forEach>
<c:forTokens>标签:用于浏览字符串,根据指定的字符截取字符串
语法:<c:forTokens items = "字符串内容" delims = "分割符号" [var = "值" begin = "begin" end = "end" varStates = "statesname" step = "step"] />
delims属性是用来分割字符串,其余属性的意义和<c:forEach>标签类似,还是通过一个范例加深理解:
<c:forTokens items = "我:是:你:爸:爸" delims = ":" var = "lzj" begin = "" end = "" step = "" varStates = "jzl">
<c:out value = "${lzj}" />的属性:<br>
<c:out value = "${jzl.index}" /><br>
<c:out value = "${jzl.first}" /><br>
</ c:forTokens>
<c:import>标签:用于引入其他静态或动态页面到JSP页面中,可以包含其他web应用的文件,甚至网络资源
语法:<c:import url = "url" [context = "context" var = "string" scope= "page|request|session|application" context = "context" charEncoding = "encoding"] />
url属性:可以是绝对路径也可以是相对路径;
context属性:在使用相对路径时表示资源的前缀路径,比如:在根目录文件下有root的web应用,该应用下有index.jsp文件,引用时,url = "/index.jsp",这时候context = "/root",context属性的“/”表示根目录,url属性的“/”表示context;即相当于url = "/root/index.jsp";
var属性:将所引用的文本内容储存在变量中,可通过变量名进行调用;
在引入资源时会时常和<c:catch>标签配用,当找不到资源时可以捕抓异常;
其余的属性应该不难理解了,范例:
<c:catch value = "error">
<c:import var = "lzj" url = "www.baidu.com" scope = "session" charEncoding = "utf-8" />
<c:out value = "${lzj}" />
</ c:catch>
由于scope定义是session,即var定义的变量接收要导入的文件,并存储在session中,所以当别的页面同样导入该文件时,可直接用var所定义的变量名,即可直接使用<c:out value = ${lzj} />输出;
<c:url>标签:在JSP页面构造一个URL地址,事项URL的重写
语法:<c:url value = "基础的URL" [var = "名" scope = "page|request|session|application" context = "context"] />
value属性:指定基础的URL
var属性:将URL保存到web域中的属性名称
其余属性类似于<c:import>标签;
这个标签可配合<c:param>,给url指定参数及参数值;
范例:
<c:url value = "http://www.baidu.com" var = "lzj" >
<c:param name = "username" value = "lzj" />
<c:param name = "pwd" value = "" />
</ c:url>
<a href = "${lzj}">百度首页</ a>
此时的“百度首页链接”是带有参数的链接;
<c:redirect>标签:实现JSP页面的重定向
语法:<c:redirect url = "url" [context = "context"] />
同样地,是可以和<c:param>标签一起使用,为url添加参数和参数值;
当访问当前JSP页面时,会自动跳转到所写url中,这个比较好理解就不写范例了;
<c:param>标签:为URL地址添加参数
语法:<c:param name = "参数名" value = "参数值" />
用法相信看完前面的应该都了解了,就不多做介绍了;
java_第一年_JavaWeb(13)的更多相关文章
- java_第一年_JavaWeb(14)
EL :EL表达式主要用于获取数据.执行运算.获取对象.调用java方法: 获取数据 语法:"${标识符}" 会调用pageContext.findAttribute方法,从pag ...
- java_第一年_JavaWeb(11)
自定义标签:主要是用来移除JSP页面中的java代码. 先从一个简单的案例了解其怎么移除代码: 一个正常的jsp页面: <%@ page language="java" pa ...
- java_第一年_JavaWeb(15)
Filter过滤器,Servlet API 中提供了一个Filter接口,用于实现用户在访问某个目标资源前对其进行拦截: 拦截原理:web服务器通过Filter接口调用doFilter方法,会传递一个 ...
- java_第一年_JavaWeb(12)
SimpleTag标签 定义了五个方法:setJspContext.setJspBody.setParent和getParent以及最重要的doTag方法(完成了所有的业务逻辑): setJspCon ...
- java_第一年_JavaWeb(10)
JavaWeb的两种开发模式 JSP+JavaBean框架:JavaBean负责封装数据.提供方法,JSP负责处理用户请求和显示数据:只能开发较为简单的业务: JSP+JavaBean+Servlet ...
- java_第一年_JavaWeb(9)
JavaBean是一个遵循某种特定写法的Java类,有以下特点: 必需具有一个无参的构造函数 属性必需私有化 私有化的属性必需通过public类型的方法暴露给其它程序,其方法命名也有一定的规范 范例: ...
- java_第一年_JavaWeb(8)
前面说到,JSP在运行时会被编译成Servlet源代码,通过_jspServlet方法处理请求,此时该方法会传递和提供9个与web开发相关的对象进行使用,开发人员在JSP页面通过对这些变量即可引用这9 ...
- java_第一年_JavaWeb(7)
JSP执行过程 客户端发出请求访问JSP文件 JSP Container将要访问的JSP文件转译为Servlet的源代码(转译时期),并将其编译成.class文件(编译时期): 执行编译后的.clas ...
- java_第一年_JavaWeb(6)
会话 会话:浏览器从打开一个进程访问服务器到该浏览器关闭,我们称之为一个会话: 在浏览器和服务器交互期间,会不可避免地产生一些数据,而为了为每个用户保存其对应的数据,可使用两种技术:Cookie和Se ...
随机推荐
- iptables常用语法与案例
常用命令语法: [root@www ~]# iptables [-t tables] [-L] [-nv] 选项与参数: -t :后面接 table ,例如 nat 或 filter ,若省略此项目, ...
- STM32 JTAG接口SWD下载接线图
- LeetCode--064--最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入:[ [1,3,1], [1,5,1], ...
- docker 安装MongoDB以及设置用户
MongoDB 是一个免费的开源跨平台面向文档的 NoSQL 数据库程序. 1.查看可用的 MongoDB 版本 访问 MongoDB 镜像库地址: https://hub.docker.com/_/ ...
- sh_04_qq号码
sh_04_qq号码 # 1. 定义一个变量记录 QQ 号码 qq_number = " # 2. 定义一个变量记录 QQ 密码 qq_password = " # 注意:在使用解 ...
- python之assert
作用 assert用来验证一个表达式是否正确,如果正确则程序向下执行,如果错误则报错,其中报错信息可以自定义. 例子 表达式没有错误的情况 >>> assert mul(2, 3) ...
- CharacterEncodingFilter详解
字符编码过滤器 (Spring框架对字符编码的处理) 基于函数回调,对所有请求起作用,只在容器初始化时调用一次,依赖于servlet容器. web.xml配置文件 <filter> &l ...
- 转:SpringMVC常见面试题总结(超详细回答)
原文:https://blog.csdn.net/a745233700/article/details/80963758 我略微修改了下某些地方 1.什么是Spring MVC ?简单介绍下你对sp ...
- 最简单的flask项目详解
# 第一部分,初始化:所有的Flask都必须创建程序实例, # web服务器使用wsgi协议,把客户端所有的请求都转发给这个程序实例 # 程序实例是Flask的对象,一般情况下用如下方法实例化 # F ...
- 5个用/不用GraphQL的理由
我在如何使用Gatsby建立博客 / How to build a blog with Gatsby这篇文章中提过GraphQL在Gatsby中的应用.总的来讲,它是一个新潮的技术,在适宜的使用场景威 ...