JSP
指令
# 作用:用于配置 JSP 页面,导入资源文件
# 格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
# 分类:
1)page:配置 JSP 页面
* contentType:等同于response.setContentType()
① 设置响应体的 MIME 类型以及字符集
② 设置当前 JSP 页面的编码(只能是高级的 IDLE 才能生效,如果使用低级工具,则需要设置 pageEncoding属性来设置当前页面的字符集)
* import:导包
* errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
* isErrorPage:标识当前页是否为错误页面
* true:是,可以使用内置对象 exception
* false:否,默认值。不可以使用内置对象 exception
2)include:页面包含的,导入页面的资源文件
* 如:<%@include file="top.jsp"%>
3)taglib:导入资源
* 如:<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>
* prefix:前缀,自定义的
注释
# HTML注释:
* <!-- -->:只能注释 HTML代码片段
# JSP注释:推荐使用
* <%-- --%>:可以注释所有
内置对象
# 在 JSP页面中不需要创建,直接可以使用的对象
# 一共9个:
变量名 | 真实类型 | 作用 |
pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求见共享数据 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 输出对象,数据输出到页面上 |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
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
* 获取用户的输入,调用模型,并将数据交给视图进行展示
# 特点:
* 优点:
① 耦合性低,方便维护,利于分工协作
② 代码重用性高
* 缺点:
① 是的项目架构变得复杂,对开发人员的要求更高
EL表达式
EL基础
# 概念:Expression Language:表达式语言
# 作用:替换和简化 JSP页面中的 Java代码的编写
# 语法:${表达式}
# 注意:JSP默认支持 EL表达式
* 如果要忽略 EL表达式,设置 JSP中 page指令:isELIgnored="true" 忽略当前 JSP页面中所有的 EL表达式
* \${表达式}:忽略当前这个 EL表达式
具体使用
# 运算:
1)算术运算符:+ - * / %,其中除法可用 div 表示,取模可用 mod 表示
2)比较运算符:> < >= <= == !=
3)逻辑运算符:&&(and) ||(or) !(not)
4)空运算符:empty
* ${empty list}:判断字符串、集合数组对象是否为 null 或者长度是否为零
* ${not empty str}:与上者相反
# 获取值:
* EL表达式只能从域对象中获取值
* 语法:
1)${域名称 . 键名}:从指定域中获取指定键的值
* 域名称:
① pageScope --> pageContext
② requestScope --> request
③ sessionScope --> session
④ applicationScope --> application(ServletContext)
* 举例:在 request域中存储了 name=张三,获取该对象:${request.name}
2)${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止
3)获取对象、List集合、Map集合的值
* 对象:${域名称 . 键名 . 属性名}:本质上会调用对象的 getter方法
* List集合:${域名称 . 键名[索引]}
* Map集合:
* ${域名称 . 键名 . key名称}
* ${域名称 . 键名["key名称"]}
# 隐式对象
* EL表达式*有 11个隐式对象
* pageContext 可以获取其他 8个内置对象
* ${pageContext . request . contextPath}:动态获取虚拟目录
JSTL
基础入门
# 概念:JavaServer Pages Tag Library JSP标准标签库
* 是由 Apache组织提供的开源的免费的 JSP标签
# 作用:用于简化和替换 JSP上面的 Java代码
# 使用步骤:
1)导入 JSTL相关 jar包
2)引入标签库:taglib指令 <%@ taglib%>
3)使用标签
常用的 JSTL标签
# if:相当于 Java代码中的 if语句
* 属性:test 为必须属性,接收 boolean表达式
* 一般情况下为 true,则显示 if标签体内容,如果为 false,则不显示标签体内容
* 一般情况下,test属性值会和 EL表达式一起使用
* 注意:<c:if> 标签没有 else的情况,如果想要使用 else的情况可以再定义一个 <c:if>标签
# choose:相当于 Java代码中的 switch语句
* 使用 choose标签声明,相当于 switch声明
* 使用 when标签判断,相当于 case
* 使用 otherwise标签做其他情况的声明,相当于 default
# foreach:相当于 Java代码的 for循环
# 练习:
* 在 request域中有一个存有 User对象的 List集合,需要使用 JSTL+EL 将List集合中的数据展示到 JSP页面的表格 table中
三层架构
# 界面层(表示层):用户看到的界面,用户可以通过界面上的组件和服务器进行交互
# 业务逻辑层:处理业务逻辑的
# 数据访问层:操作数据存储文件
案例
# 需求:用户信息的增删改查操作
# 设计:
* 技术选型:Servlet+JSP+MySQL+JDBCTemplate+Druid+BeanUtils+Tomcat
* 数据库设计
create database day17; -- 创建数据库
use day17; -- 使用数据库
create table user( -- 创建表
id int primary key auto_increment,
name varchar(20) not null,
gender varchar(5),
age int,
address varchar(32),
qq varchar(20),
email varchar(50)
);
# 开发:
1)环境搭建:
* 创建数据库环境
* 创建项目,导入需要的 jar包
2)编码
# 测试
# 部署运维