导读:
最近在看疯狂软件系列Spring+MyBatis企业应用实战,拖拖拉拉前后用了将近10天左右的时间将书籍大概过了一遍,除去书本知识之外,我觉得更为重要的是让我认识到了持久学习的关键性,三天打鱼两天晒网结果就是知识掌握的间断性和模糊性,所以看书要持续,要有持久坚定的韧性,如此才能从书中觅得黄金屋,颜如玉。
JSTL标准库
JSTL全称JavaServer Pages Standard Tag Library,又被业内人士称为JSP标准标签库,由阿帕奇的某一个开发小组维护,在JSP2.0中作为标准支持,一般我们最常用的是以c标签为显著特征的Core标签库。
诞生的背景
在讲JSTL之前我首先来说下他的诞生背景和存在的意义,年前在北京拜读了某大神的HeadFirst JSP&&Servlet(让我爱上了HeadFirst系列),大致对网站开发的历史稍有了解。在我们所谓的分包分层大家耳熟能详的MVC模式诞生之前,那个年代的JSP没有严格的所属层属性限制,通常我们看到的是在JSP页面中直接出现大量的业务逻辑编码(所谓的script),优势是学习成本低,灵活方便,但劣势也很显著,如果是个人小的站点没问题,但如果高大上的企业级Web应用采取这种方式就会漏洞百出,特别是在在出现了MVC这种企业架构模式之后,JSP只负责数据的呈现,但做了这个限制之后JSP的灵活性以及可扩展性就会受到影响,为了让JSP这一前端模板实用性更强,更丰富,JSTL诞生了。
具体类别(Core标签库四类十四个)
- 多用途核心标签:
多用途核心标签主要包括,c:<>out(格式不支持)、c:<>set、c:<>remove、c:<>catch,其中c:<>out标签用于输出作用域中的变量可以设置的属性为value以及default。c:<>remove则是用于删除作用域中的属性,属性scope用于指定作用域范围,而var用于指定该作用域中具体要删除的对象。c:<>catch可以作为根标签用于捕获异常属性var用于指向具体的异常,该属性可以通过${}在JSP的其他页面引用。c:<>set该标签用于设置作用域中属性的值一方面可以添加新的属性,另外一方面可以更改原理属性的value(target的使用)。 - 条件控制标签:
条件控制标签主要包括c,<>if、c:<>choose、c:<>when、c:<>otherwise,明确if标签的基本用法主要就是逻辑判断在if标签表现为在if中添加test,test后边加入具体的判断逻辑。choose,when和otherwise是对if逻辑判断的一个补充,类似于java编码中的if、else结构,需要注意的是choose标签作为根标签里边则是when和otherwise标签。 - 循环控制标签:
循环控制标签顾名思义是处理循环逻辑的标签,主要包括c:<>forEach、c:<>forTakens,该标签最为常用的就是数据的列表化呈现,其中c:<>forEach标签中可以定义起始值,最终值以及遍历的步长值,items为具体的集合变量而var代表的是具体的某一项遍历值,需要强调的是在forEach标签中我们只需要加入单一的列表项。c:<>forTakens类似String.split()方法,可以通过设置delims属性的值将字符串拆分成相应的集合然后循环输出。 - URL相关标签
URL标签主要有四类,分别是c:<>url、c:<>import、c:<>redirect、c:<>param,该类标签一般都和URL操作相关其中c:<>import标签用于在页面中导入其他jsp页面类似Android布局文件中的include。c:<>url用于指定一个或者定义一个Web应用中的具体的资源(变量的作用一次修改多处生效)需要强调的是该标签可以通过设置context的具体值来指向其他Web应用中的资源。
JSTL的优势
JSTL最大的优势就是丰富了JSP页面的数据呈现,使得JSP页面的数据呈现变得更加规范化,简单化,同时丰富了JSP的呈现方式从企业应用的架构角度来说也更加利于项目的分层(JSP作为单独的View数据呈现层), 从总体而言使得JSP这一前端模板更加好用(Themleaf、Velocity、Freemarker)。
EL表达式
EL表达式全程Expression Language,通过使用EL表达式JSP页面可以不使用JSP声明、脚本和表达式经由隐式对象完成和后端进行数据的交互,是数据呈现的一种实现方式。
EL表达式的作用
- 获取数据:
主要用于替换JSP页面的脚本表达式,从各种Web作用域中获取后台传过来的各种数据(Java对象,List集合,Map集合,数组等)。 - 执行运算:
利用EL表达式可以在JSP页面执行一些基本关系、逻辑和算术运算,实现数据的关系,算术,逻辑组合参生可用的新的数据。 - 获取Web开发常用对:
EL表达式中定义了一些个隐式对象,利用这些可以获得Web开发常用对象的引用,进而可以获得这些对象中保存的数据。
EL表达式运算符
- 算术运算符:加(+)、减(-)、乘(*)、除(/)、取余(mod或者%)。
- 逻辑运算符:与(&&和and)、或(||和or)、非(!和not)。
- 关系运算符:等于(=和eq)、大于(>和gt)、小于(<和lt)、大于或等于(>=和ge)、小于或等于(<=和le)、不等于(!=或者ne)。
- empty运算符:判断JSP作用域中是否有相应的数据,如果没有返回为true,反之为false。
四大作用域
四大作用域主要包括:Page、Request、Session、Application
十一大隐式对象
隐式对象 | 描述 |
---|---|
initParam | 指的是所有环境初始化参数相当于ServletContext.getInitParam(“name”) |
A | AValues |
param | 包含的是request中的参数${param.name}相当于request.getParameter(“name”) |
paramValues | 区别于param该对象返回的是一个key为参数名value为字符串数组的Map |
header | // |
headerValues | // |
AScope | BScope |
pageScope | // |
requstScope | // |
sessionScope | 包含session所有属性的Map${sessionScope.name}返回session中名称为name的具体属性value |
applicationScope | // |
A | B |
pageContext | 页面对应的全局变量 |
cookie | 指的是以cookie名称为key,该cookie实例为value的Map${cookie.name.value}为名称是name的cookie实例 |
九大内置对象
内置对象指的是JSP页面的内置对象,区别于隐式对象,隐式对象是针对EL表达式来说的,JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、page、pageContext、config、exception、out,其中需要强调的是exception该内置对象必须在isErrorPa=true的页面才能调用。
总结:
以上内容为EL表达式和JSTL的部分知识总结,正像我之前说过的知识无论如何还是要记忆的,记住了本身便拥有了极大地优势。我们重视实践的作用,但绝不意味着放弃理论的记忆、理解和学习,理论仍然要季要深入理解,当然在此基础之上就是大量的实践。2018是我的技术决胜年,也是人生最为关键的一年,无论遭遇什么,技术修炼学习总结都不会中短,而我也会在后续陆续推出更高质量的博文期待大家的支持!