目录
1 EL表达式
1.1概念
EL(Expression Language),表达式语言,是包含在Java EE平台中的一种技术,主要的目的是为了能够简化开发者在页面中的一些代码。特点是非常简洁,易懂。
1.2 基本使用
基本语法:${ }
包含的内容:
通过变量名取值: ${变量}
获取对象的属性值“ ${对象名.属性名}
获取集合元素
调用方法 : ${ 对象名.size() }
获取集合中索引的值 : ${对象名【索引】}
获取到map集合中的key所对应的value ${map集合对象名【”key“】}
执行表达式:
算数运算:
${ + - * / %}
/ 可以用div来代替
%可以用mod方法来取代
逻辑运算
&&(and) ||(or) !(not)
关系运算符
> (gt) < (lt) >=(ge) <=(le) !=(ne) == (eq)
empty运算符
empty:代表判断元素是否为null 或者是否包含元素
not empty : 代表判断元素是否不为null ,或者是否不包含元素
获取作用域中的内容以及参数的内容和页面的内容
作用域的访问对象
正常情况下,在使用EL表达式时,需要在表达式中添加对应的作用域,例如:${sessionScope.xxx},如果我们没有书写作用域范围访问对象,此时,EL表达式就会从page向request中查询,如果request没有对应的值,就会找到session查询,如果session范围内查找也没有,就最后找到application,如果几个作用域都不包含要查找的值或对象,就会返回null状态。此时如果我们调用某个对象的某个属性或方法,此时EL表达式如果没有找到对象就会直接输出空白。
按照page > request > session > application 的作用栈一次顺序查找。
参数访问对象
param相当于在页面中调用了request.getParameter("") 来获取参数中对应的内容。
paramValues相当于在页面中调用了request.getParameterValues("")来获取同名对象的多个值,返回一个数组类型。
jsp隐式对象
可以通过pageContext对象获取到该对象中的某个值,同时还可以获取到页面中衍生的各类内置对象,例如可以通过pageContext.request.contextPath获取到当前项目的上下文路劲。
2 JSTL
2.1概念
JSTL(JAVA Server Page Tag Library) , 标准标签库。是为了能够提高 JAVA WEB 的开发效率,以及维护性。
2.2 jstl中常见的两种常用标签库内容:
核心标签:核心标签库是整个JSTL中最常用的部分,主要由以下几个部分组成:
基本输入输出,流程控制,迭代操作和URL操作。负责web应用的常见工作,如循环,表达式赋值,基本输入输出等。
I18N 格式标签库:用来格式化四按时数据工作,如:对不同区域的日期格式化等。
2.3 核心标签库
- 输入输出
步骤1:导入jstl的依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
步骤2:在使用该库的页面中添加指令
格式化库
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/f mt" %>
核心库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/c ore" %>
步骤3:使用标签库
<c:set var="变量名" value="值" scope="request|session|application" />
<c:set var="num" value="100" />
<c:set var="变量名" value="值" scope="request|session|application" />
<c:set var="num" value="100" />
将一个对象中的属性进行修改:
target:代表要修改的对象
property:要修改的对象中的属性
value:要修改的属性值
<c:set target="${userInfo}" property="username" value="zhangsan" />
步骤4:输出内容
<c:out value="${num}" />
<%--
value:代表要输出的内容,如果直接写了内容,就会按照普通输出的方式显示在页面上
default;如果没有找到对应的变量,就会采用default作为值输出
--%>
- 删除属性
<c:remove var="变量" />
- 条件标签 if choose
<c:if test="条件表达式">
</c:if>
if表达式是没有else的相关操作的,如果需要多层判断,则需要多谢一些if的语法
<c:if test="${empty userInfo}">
您还没有登录!
</c:if>
<c:if test="${not empty userInfo}">
您好,${userInfo.username}
</c:if>
<choose>
<c:when test="条件表达式">
//满足条件
</c:when>
<c:otherwise>
//多个条件都不满足,就会执行该段 语句
</c:otherwise>
</choose>
- 循环控制
<c:forEach var="循环时的变量" items="集合|数组" begin="起始值" end="结束值" step="迭代步长" varStatus="循环属性变量">
//循环体
</c:forEach>
//遍历集合
<c:forEach var="str" items="${strings}">
${str}
</c:forEach>
//按普通的值遍历
<c:forEach var="i" begin="0" end="10" step="1">
<a href="#">${i}</a>
</c:forEach>
//遍历map集合
<c:forEach var="m" items="${map}">
${m.key} --- ${m.value}
</c:forEach>
//获取varStatus中的变量内容
<c:forEach var="str" items="${strings}" varStatus="status">
<%--${status.index + 1} ${str}- -%>
${status.last} 5 </c:forEach>
- 格式化
数字格式化
日期格式化
<fmt:formatDate value="${date}" type="both"/>
输出格式: 2010-5-31 23:59:59
总结
3.多表操作
3.1映射关系的建立:
对象关系映射(Object Relation Mapping),指的是 数据库表和对象之间的一种映射关系。在建立对象映射 时,通常情况下会采用以下形式 :
- 一对多:
- 在一的一方,建立多的的一方的集合,由 于考虑到集合中的对象必须是唯一的,所 以通常会采用Set集合实现,由于一对多 的查询方式较为复杂而且不利于维护,所 以通常采用多对一的查询方式。
//一对多关系映射
private Set<Student> students ;
- 多对一
在多的一方,建立对一的一方的引用。
//映射多对一的或者是一对一关系
private Grade grade ;
dao层实现对数据的映射(2种方式)
学生信息存在在年级的字段:private Grade grade ;
第一种方式:
//建立年级信息。
Grade grade = new Grade() ;
grade.setGradeName(rs.getString( "GradeName"));
grade.setGradeDesc(rs.getString( "GradeDesc"));
//建立年级与学生的映射
student.setGrade(grade) ;
第二种方式:通过学生表中的gradeId查询Grade 对象,之后建立两者之间的关系.
//建立年级信息
GradeDao gradeDao = new GradeDaoImpl();
Grade grade = gradeDao.findById(rs.getInt("grad eId")) ;
//建立学生与年级之 间的映射关系
student.setGrade(grade);
第二种方式的实现,本人理解,如果年级中包含大量字段,这是在学生中建立年级信息时,会出现大量允余代码。这是可以直接调用年级的方法,查询到年级的信息。直接建立学生与年级的映射关系。