day17 -->(JSP【指令、注释、内置对象】、MVC开发模式、EL表达式、JSTL标签、三层架构) 下接 day18项目
JSP:
1、指令:
作用:用于配置JSP页面,导入资源文件
格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2%>
分类:
1.page : 配置JSP页面的
contentType : 等同于response.setContentType()
1、设置响应体的mime类型以及字符集
2、设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
3、【了解】language = "java" ,支持的语言(目前仅仅支持Java)
4、buffer : 字符输出流,默认 8kb ,可更改
5、import :导包
6、errorPage : 当前页面发生异常后,会自动跳转到指定的错误页面
7、isErrorPage : 标识当前页面是否时错误页面
true : 是,可以使用内置对象exception
false:否,不可以使用内置对象exception
2.include :页面包含的,导入页面的资源文件
<%@include file="top.jsp"%>
3.taglib :导入资源
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix : 前缀,自定义的
2、注释:
1.html 注释: <!-- --> : 只能注释html代码片段
2.jsp注释:<%-- --%> :注释所有 【在jsp文件中推荐使用】
3、内置对象:
在jsp页面中不需要创建,直接使用的对象
一共有9个:
变量名 真实类型 作用
- pageContext PageContext 当前页面共享数据,还可以获取其它8个内置对象
- request HttpServletRequest 一次请求访问的多个资源(转发)
- session HttpSession 一次会话的多个请求间
- application ServletContext 所有用户间共享数据
- response HttpServletResponse 响应对象
- page Object 当前页面(Servlet)的对象
- out JspWriter 输出对象,数据输出到页面上
- config ServletConfig Servlet的配置对象
- exception【声明isErrorPage为true】 Throwable【Exception父类】 异常对象
MVC开发模式:
1.jsp的演变历史:
1.早期只有servlet,只能使用response输出标签数据,非常麻烦
2.后来jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中写大量的Java代码,又写html,造成难于维护,难于分工协作
3.再后来,Java的web开发借鉴MVC开发模式,是的程序的设计更加合理
2.MVC :
1、M :Model ,模型 【JavaBean】
完成具体的业务操作,如:查询数据库,封装对象
2、V :View ,视图 【JSP】
展示数据
3、C :Controller ,控制器 【Servlet】
获取用户的输入
调用模型
将数据交给视图进行展示
优缺点:
优点:
1、耦合性低,方便维护,可以利用分工协作
2、可重用性高
缺点:
1、使得项目的架构变得复杂,对开发人员要求较高
EL表达式 :
1、概念:Expression Language 表达式语言
2、作用:替换和简化jsp页面中Java代码的编写
3、语法: ${表达式}
4、注意:
jsp默认是支持el表达式的。如果要忽略el表达式
1.设置jsp中page指令中的属性 :isELIgnored="true" --> 忽略当前jsp页面中所有的el表达式
2.转义: \${表达式} :忽略当前这个 el 表达式
5、使用:
1.运算 :
运算符 :
1、算数运算符 :+、 - 、*、 /、 %,其中除法可用 div 表示,取模可用 mod 表示
2、比较运算符 :> 、< 、>= 、 <= 、==、 !=
3、逻辑运算符 :&&(and) 、||(or)、 !(not)
4、空运算符 :empty
用于判断字符串、集合、数组对象是否为null 或者 长度是否为0
${empty list}
${not empty list} : 表示判断字符串,集合,数组对象是否为null,或者长度大于 0
2.获取值 :
1、注意事项:el表达式只能从 域对象中获取值 ,如果获取不到则显示的内容为空字符串
2、语法 :
1.${域名称.键名称} : 从指定域中获取指定键的值
域名称:
1.pageScope --> pageContext
2.requestScope --> request
3.sessionScope --> session
4.applicationScope --> application(ServletContext)
例如:在request域中存储了 name = 张三
获取:${requestScope.name}
2.${键名} :表示依次从最小的域中去查找是否有改键所对应的值,知道找到为止
例如 : ${name},pageContext --> request -- > session -- >application
3.获取对象、List集合、Map集合
1、对象:${域名称.键名.属性名}
本质上回去调用对象的getter方法
2、List 集合 :${域名称.键名[索引]}
3、Map集合:${域名称.键名.key}、${域名称.键名["key"]}
3.隐式对象
el表达式中有 11 个隐式对象
pageContext :
1.获取jsp其它8个内置对象
${pageContext.request.contextPath} : 动态获取虚拟目录
JSTL标签:
1.概念:JavaServer Pages Tag Library : JSP 标准标签库
是由Apache组织提供的开源的免费的JSP标签
2.作用:用于简化和替换JSP页面上的Java代码
3.使用步骤:
1、导入jstl相关jar包
2、引入标签库 :taglib指令:<%@ taglib %>
3、使用标签
4.常用的JSTL标签:
1.if 相当于Java代码的 if 语句
2.choose 相当于Java代码的 switch 语句
3.foreach 相当于Java代码的 for 语句
5.练习:
需求:在request域中有一个存有User对象的List集合,需要使用jstl将list集合数据展示到jsp页面的表格table
核心代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Test</title>
</head>
<body>
<%
List list = new ArrayList();
Collections.addAll(list,
new User("张三",24,new Date()),
new User("李四",23,new Date()),
new User("王五",22,new Date())
);
request.setAttribute("list",list);
%>
<h3>遍历list集合</h3>
<table border="1" width="400px">
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
<th>生日</th>
</tr>
<c:forEach var="user" varStatus="s" items="${list}">
<c:if test="${s.count % 2 != 0}">
<tr align="center" bgcolor="aqua">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
<c:if test="${s.count % 2 == 0}">
<tr align="center" bgcolor="#7fff00">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>
三层架构:
1、界面层(表示层) :用户看的到的界面,用户可以通过界面上的组件和服务器进行交互
2、业务逻辑层:处理具体的业务逻辑(功能:登录、注册...)
3、数据访问层:操作数据存储文件的