EL&JSTL
MVC开发模式
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
- Model(模型): 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
- View(视图):视图代表模型包含的数据的可视化。
- Controller(控制器): 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
jsp演变历史:
- 早期只有servlet,只能使用response输出标签数据,非常麻烦
- 后来又jsp,简化了Servlet的开发。如果过度使用jsp,在jsp中既写大量的java代码,又写html表,造成难于维护,难于分工协作
- 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性
MVC开发模式:
- M:Model,模型。JavaBean
- 完成具体的业务操作,如:查询数据库,封装对象
- V:View,视图。JSP
- 展示数据
- C:Controller,控制器。Servlet
- 获取用户的输入
- 调用模型
- 将数据交给视图进行展示
MVC开发模式优点:
- 耦合性低,方便维护,可以利于分工协作
- 重用性高
三层架构
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表示层(UIL)、业务逻辑层(BLL)、数据访问层(DAL)。 区分层次的目的即为了“高内聚,低耦合”的思想。 表示层:通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
三层架构:软件设计架构
- 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
- 业务逻辑层:处理业务逻辑的
- 数据访问层:操作数据存储文件
EL表达式
表达式语言(Expression Language),或称EL表达式,简称EL,是Java中的一种特殊的通用编程语言,借鉴于JavaScript和XPath。主要作用是在Java Web应用程序嵌入到网页(如JSP)中,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。
概念:Expression Language 表达式语言
作用:替换和简化jsp页面中java代码的编写
语法:${表达式}
注意:
- jsp默认支持el表达式的
- 如果要忽略el表达式,有以下两种方式:
- 设置jsp中page指令中:
isELIgnored="true"
忽略当前jsp页面中所有的el表达式 \${表达式}
:忽略当前这个el表达式
- 设置jsp中page指令中:
EL的使用
- 运算
- 获取值
EL运算
运算符:
- 算数运算符:
+
,-
,*
,/
,%
- 比较运算符:
>
,<
,>=
,<=
,==
,!=
- 逻辑运算符:
&&
,||
,!
- 空运算符:
empty
- 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
${empty list}
:判断字符串、集合、数组对象是否为null或者长度为0${not empty str}
:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
EL获取值
注意:el表达式只能从域对象中获取值
JSP中的四大域对象:
- ServletContext:context域:只能在同一个web应用中使用 (全局的)域作用范围
- HttpServletRequet:request域:只能在同一个请求中使用 (转发)
- HttpSession:session域:只能在同一个会话(session对象)中使用 (私有的)
- PageContext:page域:只能在当前jsp页面使用 (当前页面)
Servlet的三大域对象:
- ServletContext:context域
- HttpServletRequet:request域
- HttpSession:session域
域对象的作用:保存数据,获取数据,共享数据
语法(具体例子看视频讲解):
-
${域名称.键名}
:从指定域中获取指定键的值- 域名称:
- pageScope --> pageContext
- requestScope --> request
- sessionScope --> session
- applicationScope --> application(ServletContext)
- 举例:在request域中存储了name=张三
- 获取:
${requestScope.name}
- 域名称:
-
${键名}
:表示依次从最小的域中查找是否有该键对应的值,直到找到为止-
域对象从大到小:appliaction>session>request>page
-
-
获取对象、List集合、Map集合的值
- 获取对象:
${域名称.键名.属性名}
(本质上会去调用对象的getter方法) - 获取List集合:
${域名称.键名[索引]}
- 获取Map集合:
${域名称.键名.key名称}
${域名称.键名["key名称"]}
- 获取对象:
EL隐式对象
EL表达式中有11个隐式对象,其中pageContext就是其中一个隐式对象
可以通过pageContext来获取jsp其他八个内置对象。比如:
-
获取request对象:
${pageContext.request}
-
获取虚拟目录:
${pageContext.request.contextPath}
JSLT
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别。
- 核心标签
- 格式化标签
- SQL 标签
- XML 标签
- JSTL 函数
概念:JavaServer Pages Tag Library,JSP标准标签库。是由Apache组织提供的开源的免费的jsp标签
作用:用于简化和替换jsp页面上的java代码(java代码替换成标签,方便前端人员修改页面)
使用步骤:
- 导入jstl相关jar包
- 引入标签库:taglib指令:
<%@ taglib %>
- 使用标签
JSTL常用标签
- if
- choose
- foreach
菜鸟教程中有标签的使用方法
if标签
if:相当于java代码的if语句
属性:test 必须属性,接受boolean表达式
- 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
- 一般情况下,test属性值会结合el表达式一起使用
注意:c:if
标签没有else情况,想要else情况,则可以再定义一个c:if
标签
choose标签
choose:相当于java代码的switch语句
- 使用choose标签声明:当于switch声明
- 使用when标签做判断:相当于case
- 使用otherwise标签做其他情况的声明:相当于default
foreach标签
foreach:相当于java代码的for语句