1.1 EL概述
什么是EL:EL(Expression Language)出现的目的:为了使JSP写起来更加简单。
EL语法:${表达式}
1.2 EL获取域中的数据
1.2.1获取简单的数据
${pageScope|requestScope|sessionScope|applicationScope.属性名}
1.2.2获取复杂的数据
(1)获取数组:
${pageScope|requestScope|sessionScope|applicationScope.属性名[index]}
(2)获取list集合
${pageScope|requestScope|sessionScope|applicationScope.属性名[index]}
(3)获取map集合
${pageScope|requestScope|sessionScope|applicationScope.属性名.键名}
便捷方式:${属性名} 依次从小到大pageContext、request、session、application获取指定名称的属性,找到了则返回,找不到返回””(即空字符串) 弊端:一旦属性名中出现了“.”、“+”、“-”等特殊符号的时候,必须使用${xxxScope[“属性名”]}获取,若使用便捷查找则会报错。
1.2.3获取对象属性值
定义一个类
获取方式:${对象名.属性}
1.3 EL执行运算
(1) + - * / (el里面表达式可以做运算)
注意:+、-、*、/ 只用来做运算,不能用于字符串拼接,无论是整数还是字符串,如果字符串双引号里不是数值,运算则会报错
(2)支持比较运算符>、>=、<、<=、!=、==、&&、||、!
(3)支持三元运算符 条件表达式?值1:值2
(4)empty(掌握) not empty是取反
判断字符串是否为””
如果字符串为””,则返回true;如果字符串不为””,返回false
判断一个容器的长度是否为0
如果容器长度为0,返回true;如果容器长度不为0,返回false
判断一个对象是否为空
如果对象为null,返回true;如果对象不为null,返回false
1.4 EL内置对象:
| 分类 | 内置对象名称 | 描述 |
掌 握 | 作用域 | pageScope | page作用域 |
requestScope | Request作用域 | ||
sessionScope | session作用域 | ||
applicationScope | application作用域 | ||
JSP上下文对象 | pageContext | 获取当前项目名称路径${pageContext.request.contextPath} | |
cookie | cookie | 直接能获取指定cookie ${cookie.名称.value} | |
了 解 | 请求参数 | param | 获得一个参数 |
paramValues | 获得一组参数 | ||
请求头 | header | 获得一个请求头 | |
headerValues | 获得一组请求头 | ||
全局参数 | initParam | 全局初始化参数 |
1.5 jstl标签库
从JSP1.1规范开始,JSP就支持使用自定义标签,使用自定义标签大大降低了JSP页面的复杂度,同时增强了代码的重用性。
JSTL虽然被称为标准标签库,而实际上这个标签是由5个不同功能的标签库共同组成的。
jstl的分类:
core 核心(if-判断、forEach-循环)
fmt 国际化或者格式化(不学了)
sql 和SQL相关的(过时了)
xml 和XML相关的(过时了)
函数库(不学了)
jstl是jsp标准的标签库语言---在jsp上使用jstl标签要引入标签库。
jstl的使用步骤:
(1)导入jar包(两个jar包: jstl.jar和standard.jar)
(2)在页面上导入标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix属性用于指定引入标签库描述符文件的前缀,在jsp文件中使用这个标签库中的某个标签时,都需要使用这个前缀;uri属性用于指定引入标签库描述符文件的URI。
1.6 Core标签库:if标签
语法格式:
<c:if test="el表达式" [var="变量名"]>
标签体(条件成立的时候输出的内容)
</c:if>
test属性用于设置逻辑表达式,var属性用于指定逻辑表达式中变量的名字(可省略不写);test的计算结果为true才会执行标签体。
1.7 Core标签库:forEach标签
语法格式1:
<c:forEach begin="开始" end="结束" step="循环的间隔数" var="给变量起个名称" varStatus="记录循环状态">
${变量名 }
</c:forEach>
注意事项:
varStatus的常用属性:
count---记录当前是第几个,从1开始
Index---表示当前元素在集合中的索引,从0开始
first---判断当前元素是否为第一个
last---判断当前元素是否为最后一个
例如:
<c:forEach begin="1" end="10" step="1" var="i">
${i }
</c:forEach>
语法格式2:高级
<c:forEach items="${el表达式}" var="变量名">
${变量名}
</c:forEach>
1.8 MVC设计模式
MVC(Model-View-Controller)是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的设计方法。它把软件系统分为三个基本部分:模型(Model)、视图(View)、控制器(Controller)。
控制器(Controller):对请求进行处理,负责请求转发。
视图(View):界面设计人员进行图形界面设计。
模型(Model):编写程序应用的功能(实现算法等等)、数据库管理。
MVC可对程序的后期维护和扩展提供了方便,并且使程序某些部分的重用提供了方便,而且MVC也使程序简化,更加直观。
注意:MVC不是java特有的,几乎现在所有B/S结构的软件都采用了MVC设计模式。
1.9 JSP开发模式
JavaWeb经历了JSP model1第一代、JSP model1第二代、JSP model2三个时期。
JSP model1第一代:服务器端只有JSP页面,所有的操作都在JSP页面中,连访问数据库的API也在JSP页面中完成。也就是说,所有的东西都耦合在一起,对后期的维护和扩展极为不利。
JSP model1第二代:业务逻辑的内容放到JavaBean中,而JSP页面负责显示以及请求调度的工作。虽然第二代比第一代好了一些,但还让JSP做了过多的工作,JSP中把视图工作和请求调度(控制器)的工作耦合在一起了。
JSP model2使用到的技术有Servlet、JSP、JavaBean。model2是MVC设计模式在java语言的具体体现。
(1) JSP:视图层,用来与用户打交道,负责接收servlet传递过来的数据,以及显示数据给用户。
(2) Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图。
(3) JavaBean:模型层,完成具体的业务工作。
1.10三层架构
JSP模式是理论基础,但实际开发中,常将服务器端程序,根据逻辑进行分层。一般比较常见的是分为三层,称为经典三层体系架构。分别是表示层、业务逻辑层、数据访问层。
(1)表示层:又称为web层,与浏览器进行数据交互。
(2)业务逻辑层:又称为service层,专门用于处理业务数据。
(3)数据访问层:又称为dao层,与数据库进行数据交互,将数据库的一条记录与JavaBean进行对应。