动态页面技术
一、JSP
1. 简介
-
JSP:Java Server Page,Java服务器端页面技术,是Sun公司提供的一套规范。表面上是HTML+Java,但是JSP的本质是Servlet
-
JSP和Servlet的对比:
-
JSP:擅长页面显示的内容(直接写HTML代码);不擅长于功能逻辑的处理(在JSP里嵌套Java代码)
-
Servlet:擅长于功能逻辑的处理(就是Java类);不擅长于页面显示的内容(response.getWriter().print())
-
-
实际开发中,是JSP+Servlet配合使用
2. 原理
-
了解JSP的运行原理(运行过程)
-
JSP必须要部署在服务器软件里:由服务器软件把JSP文件,翻译转换成Servlet,实际运行的是Servlet的代码
-
过程:
-
jsp文件 ------翻译----->Java文件(Servlet)------编译------>class文件(Servlet)------>有客户端访问,Tomcat就调用这个Servlet的代码
-
-
什么时候,Tomcat会把JSP翻译成Servlet?
-
第一次访问时
-
3. 语法(了解)
3.1 JSP的注释
<%-- JSP的注释,可以注释JSP文件里的一切内容 --%>
3.2 JSP里嵌套Java代码
-
嵌套Java表达式:
<%=Java表达式 %>
, 被EL表达式代替了-
用于把Java表达式的结果,显示到页面上
-
-
嵌套Java代码片段:
<% Java代码片段 %>
, 被JSTL代替了-
通常用于写if判断、for循环等逻辑代码
-
-
嵌套Java声明:
<%! Java声明 %>
,不使用这种方式-
声明的是Servlet类的成员变量或者成员方法
-
二、EL
1. 什么是EL
-
EL:Expression Language,EL表达式。目的是用于:代替
<%=Java表达式 %>
,向页面输出显示内容 -
基本语法:
${表达式内容}
2. EL的使用
2.1 从域对象里取数据并显示到页面
${pageScope.key} <!-- 从pageContext里取key对应的数据,显示到页面上 --> ${requestScope.key} <!-- 从request里取key对应的数据,显示到页面上 --> ${sessionScope.key} <!-- 从session里取key对应的数据,显示到页面上 --> ${applicationScope.key} <!-- 从ServletContext里取key对应的数据,显示到页面上 --> ${key} <!-- 从四个域对象, 按从小到大的顺序,查找key对应的数据 -->
-
${key[索引].key}
:根据索引找,使用[索引]
。.key
可以是获取键值对里key对应的值,也可以是方法getKey()
的值
2.2 可以进行数据运算
-
基本数学运算:
+, -, *, /, %
-
比较运算:
>,<,>=,<=,==,!=
或者gt, lt, ge, le, eq, ne
-
逻辑运算:
&&, ||, !
或者and, or , not
-
判空:
empty
-
三元运算:
判断条件?结果为true的值:结果为false的值
三、JSTL
1. 简介
-
JSTL:JSP Standard Tag Library, JSP标准标签库。提供了一些标签,这些标签有逻辑功能,比如:if判断、forEach循环等等。可以用来代替JSP里
<% Java代码片段 %>
-
JSTL标签库包含5个子库,但是目前还用的上的只剩一个:core核心库,提供了if判断和循环遍历的标签
2. 引入JSTL
-
引入jar包
-
在JSP里引入要使用标签库:在JSP里page指令下增加代码
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3. JSTL的标签使用
JSTL标签本身,不具备从域里取数据的能力,也不具备数据运算的能力。需要配合EL表达式来完成功能
3.1 c:if
标签
-
作用:用来进行判断的
-
语法:
<c:if test="判断条件,使用EL表达式进行判断"> 如果判断为true,这里的内容会生效 </c:if>
-
示例:
<c:if test="${age < 18}"> <span style="color:red;">未成年</span> </c:if> <c:if test="${age >= 18}"> <span style="color:green;">已成年</span> </c:if>
3.2 c:forEach
标签
-
作用:用来进行循环遍历的
-
基本for循环
-
语法:
<c:forEach var="变量名" begin="变量开始值" end="变量结束值" step="步长,每次循环加几"> 当前值是:${变量名} </c:forEach>
-
示例:
<c:forEach var="i" begin="1" end="10" step="1"> <span style="color:red;">${i}</span> </c:forEach>
-
-
增强for循环
-
语法:
<c:forEach items="循环遍历的对象,使用EL表达式获取到" var="变量名" varStatus="vs"> 当前对象:${变量名}, 当前序号:${vs.count}, 当前索引:${vs.index}, 当前是否第一个:${vs.first}, 当前是否最后一个:${vs.last} </c:forEach>
-
示例:
<table border="1" width="500px" cellspacing="0"> <tr> <th>序号</th> <th>索引</th> <th>姓名</th> <th>年龄</th> </tr> <!-- 把域里的用户信息,循环显示到表格里。每个用户是一行 --> <c:forEach items="${userList}" var="user" varStatus="vs"> <tr> <td>${vs.count}</td> <td>${vs.index}</td> <td>${user.name}</td> <td>${user.age}</td> </tr> </c:forEach> </table>
-
四、JSP开发模式
1. MVC模式
-
Model1阶段的第一代:JSP
-
JSP:负责一切,数据库操作、功能逻辑、页面的显示
-
-
Model1阶段的第二代:JSP+JavaBean
-
JavaBean:数据库实体封装
-
JSP:功能逻辑、页面的显示
-
-
Model2阶段:JSP+JavaBean+Servlet
-
JavaBean:数据库实体封装
-
JSP:负责页面的显示
-
Servlet:功能逻辑
-
-
MVC思想:Model2阶段符合MVC模式的
-
M:Model模型层,JavaBean
-
V:View视图层,JSP
-
C:Controller控制层,Servlet
-
2. JavaEE三层架构
指服务端代码的分层:
-
web层(表现层、表示层):和客户端交互的,对应一个package(web),放Servlet
-
service层(业务逻辑层):完成功能逻辑的,对应一个package(service),放XXXService
-
dao层(数据访问层、持久层):操作数据库的,对应一个package(dao),放XXXDao
-
domain包:放JavaBean
-
util包:放工具类
3.练习
内容回顾
-
理解JSP的运行原理(运行过程)
JSP---->Java文件(Servlet)---->class文件
客户端访问JSP时,Tomcat会调用class(Servlet代码)
-
能够使用EL表达式从域里获取数据:
${key[索引].key}
-
能够使用EL表达式进行运算:基本数学运算、比较运算、逻辑运算、empty判空和三元运算
-
能够使用JSTL的if标签,进行判断
-
能够使用JSTL的forEach标签,进行基本for循环和增强for循环
-
能够按照JavaEE三层架构进行开发