EL&JSTL

MVC开发模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型): 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
  • View(视图):视图代表模型包含的数据的可视化。
  • Controller(控制器): 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

MVC开发模式

MVC模式菜鸟教程

视频讲解

jsp演变历史:

  1. 早期只有servlet,只能使用response输出标签数据,非常麻烦
  2. 后来又jsp,简化了Servlet的开发。如果过度使用jsp,在jsp中既写大量的java代码,又写html表,造成难于维护,难于分工协作
  3. 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性

MVC开发模式:

  • M:Model,模型。JavaBean
    • 完成具体的业务操作,如:查询数据库,封装对象
  • V:View,视图。JSP
    • 展示数据
  • C:Controller,控制器。Servlet
    • 获取用户的输入
    • 调用模型
    • 将数据交给视图进行展示

MVC开发模式

MVC开发模式优点:

  • 耦合性低,方便维护,可以利于分工协作
  • 重用性高

三层架构

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表示层(UIL)、业务逻辑层(BLL)、数据访问层(DAL)。 区分层次的目的即为了“高内聚,低耦合”的思想。 表示层:通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。

软件三层架构设计

软件三层架构设计

视频讲解

三层架构:软件设计架构

  • 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互
  • 业务逻辑层:处理业务逻辑的
  • 数据访问层:操作数据存储文件

三层架构

EL表达式

表达式语言(Expression Language),或称EL表达式,简称EL,是Java中的一种特殊的通用编程语言,借鉴于JavaScript和XPath。主要作用是在Java Web应用程序嵌入到网页(如JSP)中,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。

EL表达式 (详解)

菜鸟教程

概念:Expression Language 表达式语言

作用:替换和简化jsp页面中java代码的编写

语法:${表达式}

注意:

  • jsp默认支持el表达式的
  • 如果要忽略el表达式,有以下两种方式:
    • 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
    • \${表达式} :忽略当前这个el表达式

EL的使用

视频讲解

  • 运算
  • 获取值

EL运算

运算符:

  • 算数运算符: +-*/%
  • 比较运算符: ><>=<===!=
  • 逻辑运算符: &&||!
  • 空运算符: empty
    • 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
    • ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
    • ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0

EL获取值

视频讲解

注意:el表达式只能从域对象中获取值

jsp九个内置对象、四个域对象及Servlet的三大域对象

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}
  • ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止

  • 获取对象、List集合、Map集合的值

    • 获取对象:${域名称.键名.属性名}(本质上会去调用对象的getter方法)
    • 获取List集合:${域名称.键名[索引]}
    • 获取Map集合:
      • ${域名称.键名.key名称}
      • ${域名称.键名["key名称"]}

EL隐式对象

EL表达式中的11个隐式对象

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代码替换成标签,方便前端人员修改页面)

使用步骤:

  1. 导入jstl相关jar包
  2. 引入标签库:taglib指令: <%@ taglib %>
  3. 使用标签

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语句

菜鸟教程

视频讲解