java引入core标签库_JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

什么是JSTL

JSTL全称为 JSP Standard Tag Library 即JSP标准标签库。

JSTL作为最基本的标签库,提供了一系列的JSP标签,实现了基本的功能:集合的遍历、数据的输出、字符串的处理、数据的格式化等等!

为什么要使用JSTL

EL表达式不够完美,需要JSTL的支持!在JSP中,我们前面已经用到了EL表达式,体会到了EL表达式的强大功能:使用EL表达式可以很方便地引用一些JavaBean以及其属性,不会抛出NullPointerException之类的错误!但是,EL表达式非常有限,它不能遍历集合,做逻辑的控制。这时,就需要JSTL的支持了!

Scriptlet的可读性,维护性,重用性都十分差!JSTL与HTML代码十分类似,遵循着XML标签语法,使用JSTL让JSP页面显得整洁,可读性非常好,重用性非常高,可以完成复杂的功能!

在JSP中不推荐使用scriptlet输出,推荐使用JSP标签。

使用JSTL标签库步骤:

导入jstl.jar和standard.jar开发包

在JSP页面中用tablib指令引入需要用到的JSTL标签

core标签库

core标签库是JSTL的核心标签库,实现了最基本的功能:流程控制、迭代输出等操作!

core标签库的前缀一般是c

c:out

CdF8QKU.png

简单使用一下

session.setAttribute("name", "zhongfucheng");

%>

//标签支持标签体,default属性上的数据可以写在标签体中

//您要的数据找不着

我们发现上面的代码实现的效果和EL表达式是一样的,它出色的地方就多了两个属性,default和escapeXml属性。如果我们用到这两个属性,我们就使用该标签,如果没有用到这两个属性就用EL表达式就可以了。

c:set

Jm5Q3JT.png

该标签有5个属性,用起来有稍微有些复杂了!现在要记住的就是:var属性操作的是Integer、Double、Float、String等类型的数据,target属性操作的是JavaBean或Map对象的数据,scope代表的是Web域,value是值,property是对象的属性!

使用var属性

既然var属性只能操作Integer、Double、String等类型,那么存在var属性就一定没有property属性(property代表的是对象的成员属性,Integer、String这些类型哪来的成员变量呀)

下面的代码流程是这样的:创建了一个name的变量,设置的值为zhongfucheng,范围是page

${name}

效果:

SqImweG.png

当然了,set标签也支持标签体,value的值可以写在标签体里边

zhongfucheng

使用var属性和scope属性实现计数器

Integer sessionCount = 0;

Integer applicationCount = 0;

%>

效果:

6WMD6vI.png

使用target属性

使用target属性与之配对的是property属性,target属性只能操作JavaBean或Map对象,property就是对应的成员变量或key了。。

既然target属性操作的是JavaBean或Map对象,那么一定是通过EL表达式来获取到对象了。taget属性如果获取不到数据会抛出异常!使用target属性就一定没有scope属性(scope属性代表的是保存范围,target的值都是获取来的,难道你还能改变人家的范围?)

${person.age}

效果:

XfiIVe2.png

c:remove

remove标签就相当简单了,只有var和scope属性,代表的是删除域范围的属性

下面简单来测试一下吧:

${person.age}

${person.age==null?"存在session的person对象被删除了!":"我还在呢!"}

效果:

55cc4071c9d76f0379b7069dfde9edd2.png

c:catch

该标签主要用来处理程序中产生的异常。

catch标签也十分简单,只有一个var属性,var属性封装了异常的信息!

${message}

效果:

9283a797e0bde563647b480e623556a1.png

c:if

2d328be0e9e3911eaa31beb164a39cbe.png

JSTL提供了if标签完成分支语句的实现,test属性是不可或缺的。

var和scope属性我看来好像没什么用的(保存执行结果有什么用?)

根据传递过来的参数的不同显示不同的页面!

用户名:

密码:

用户名:

密码:

注意地址栏的参数!

0aa7e642a8e4810f21e2f66d706fd818.png

e0421c07fdf27d96734ee074e74a0a23.png

c:choose

if标签没有else的功能,如果需要类似于java中的if else流程就需要使用choose标签。

choose标签需要联合when和otherwise标签一起使用!

你好啊,zhongfucheng

你好啊,ouzicheng

你是谁啊?别随便过来!

效果:

6e29c94c5477407079ea3858ca4ab271.png

bac596bf5ce50113aacd55a04d744e19.png

c:forEach

d491c532762ff43de2ba2359ded01c20.png

forEach为循环标签,相当于Java中的while和for

之前我们在使用EL表达式获取到集合的数据,遍历集合都是用scriptlet代码循环,现在我们学了forEach标签就可以舍弃scriptlet代码了。

向Session中设置属性,属性的类型是List集合

List list = new ArrayList<>();

list.add("zhongfucheng");

list.add("ouzicheng");

list.add("xiaoming");

session.setAttribute("list", list);

%>

遍历session属性中的List集合,items:即将要迭代的集合。var:当前迭代到的元素

${list}

效果:

TNTgv4o.png

遍历Map对象有稍微地不一样,我们来看一下,var属性保存的不是每个迭代的对象,而是Map.Entry。

Map map = new HashMap();

map.put("1", "zhongfucheng");

map.put("2", "xiaohong");

map.put("3", "xiaoming");

session.setAttribute("map",map);

%>

${me.key} ${me.value}

13380e07a6054ba006d96f18e4fd0071.png

begin默认从0开始、end默认为集合的最后一个元素、step默认为1

varStatus代表着当前对象被迭代的信息,它有以下的属性。

index【返回当前是第几个对象,从0开始计数】

count【已经遍历多少个对象了,从1开始计数】

first【是否是第一个】

last【是否是最后一个】

current【当前被迭代的对象】

begin【开始的位置】

end【最后的位置】

step【步长】

${list}您的下标是:${varStatus.index}

效果:

7a2b0441c4c144789ab4d91b6119ad4b.png

c:forTokens

该标签类似于String类的split()和for循环的一种集合

它与forEach标签非常相似,都有begin、end、step、items、var、varStatus属性,不同的是forTokens标签的items属性里面是字符串,这个字符串会被delims属性的内容分割成多个字符串!

${name}

效果图:

EiLtDGY.png

c:import

import标签类似于JSP行为和JSP指令

import标签的属性:

url【指定要包含的路径,Internet所有的url都可以】

context【访问同一个web容器的其他资源,以"/"开头】

var【保存导入的文件的内容,以String类型存储】

socpe【保存的范围,默认是page】

charEncoding【字符编码】

varReader【保存导入文件的内容,以Reader类型存储】

当然了,import标签功能更加更大!强大在哪里呢?import标签可以引入Internet网页上的内容,也就是说,csdn也可以引入进来!

我们来用一下把!

我们一看,是没有样式的:

cek1jNi.png

打印csdn的源代码:

CSDN的源码是:

效果:

56e49903aa440dd65c4c3b913d7716b6.png

c:param

在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。

c:url

url标签十分实用!在浏览器禁用Cookie的时候,我们之前学Servlet时解决办法是:response.encodeURL()。url标签也可以实现这样的功能,再配合param标签使用,就十分实用了!

4c43a991167b1e1ae5b68da573c11c29.png

我们配合param标签来使用一下吧!

我经过了URL地址重写!

效果:

iRt1vnk.png

c:redirect

redirect标签用于实现Redirect功能,当然了,此标签也能够配合param标签使用!

0540eaf6f160d80994682d242be10546.png

简单使用一下,重定向到2.jsp,带了一个参数:

在2.jsp中获取到参数

yJ0pBZn.png

fmt标签库

fmt标签库也叫做国际化标签库。这里就不详细说明了,等我讲到Web 国际化的时候才讲吧!

fn方法库

fn方法库也叫做EL函数库、fn标签库。这个在讲解EL表达式的时候有详细的说明,可转移到我EL表达式的博文中!

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章的同学,可以关注微信公众号:Java3y

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值