回顾
EL
- 语法 ${ 表达式 }
- EL 域对象,以及查找规则
- pageScope
- requestScope
- sessionScope
- applicationScope
- EL 中 pageContext 对象有啥作用
- 可以获取其它对象
- ${ pageContext.request.contextPath }
- EL 如何显示 Student 的属性、list 中的元素、map 的元素
- ${ 学生对象.属性名 }
- ${ list[索引] }
${ map.key }
或${ map["key"] }
- name-abc
- 1
- EL 中的 empty 运算符
- 判断变量是否 null
- 字符串 “”
- 集合没有元素
JSTL
-
<%@ taglib uri=".../jsp/jstl/core" prefix="c" %>
-
条件判断标签
<c:if test="${条件}"></c:if>
-
循环标签
<c:forEach items="${ 集合或数组 }" var="每个元素对应的临时变量名"> ${临时变量名} </c:forEach>
mvc 概念
- model 模型(数据)例如 student
- view 视图(展示数据) 例如 jsp
- controller 控制器 (联系模型和视图)例如 servlet
- 它们如何结合
过滤器
-
定义和配置过滤器
@WebFilter("/过滤的资源路径") public class 过滤器类 implements Filter { public void doFilter(request, response, FilterChain chain) { // 放行 chain.doFilter(request, response); } }
-
如何放行请求,如何拦截请求
-
多个过滤器的拦截顺序
- 按过滤器的类名字排序,从小到大依次过滤(注解方式)
今日内容
1. 过滤器 xml 配置(*)
<filter>
<filter-name>名</filter-name>
<filter-class>类的全路径</filter-class>
<init-param>
<param-name>初始化参数名</param-name>
<param-value>初始化参数值</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>名</filter-name>
<url-pattern>/过滤资源路径</url-pattern>
</filter-mapping>
-
xml 方式的过滤器执行顺序就是 filter-mapping 的先后顺序(*)
-
FilterConfig.getInitParameter(“初始化参数名”) 返回 初始化参数值
2. 过滤器拦截位置(了解)
- request
- forward
- include
- error
- async
<error-page>
<exception-type>异常类型</exception-type>
<location>/错误页面</location>
</error-page>
<error-page>
<error-code>错误状态码(404,500)</error-code>
<location>/错误页面</location>
</error-page>
3. 监听器的分类(了解)
事件(应用程序启动、应用程序停止、request对象创建,session对象创建,session对象销毁)
-
ServletContextListener(*)
@WebListener public class 监听器类 implements ServletContextListener{ public void contextInitialized(ServletContextEvent event) { // event 获取刚刚创建的 ServletContext 对象 event.getServletContext(); } public void contextDestroyed(ServletContextEvent event) { // event 获取即将被销毁的 ServletContext 对象 } }
合称 web 三大组件(servlet,filter,listener)也可以xml方式来配置监听器:
<listener> <listener-class>监听器类全路径</listener-class> </listener>
-
HttpSessionListener
-
ServletRequestListener
-
ServletContextAttributeListener
-
HttpSessionAttributeListener
-
ServletRequestAttributeListener
- 当 调用 setAttribute、removeAttribute 时就会触发以上监听器相应的事件
-
HttpSessionBindingListener
// Student stu = new Student()
// session.setAttribute("student", stu);
// session.removeAttribute("student");
public class Student implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
// 当此对象被放入 session 域时执行
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
// 当此对象从 session 域移除时执行
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IxaBoZmz-1597661201142)(imgs/image-20200817113039273.png)]
类似于 Student 这样的对象如果要存入 session,必须实现 Serializable 接口,否则不能配合钝化和活化的功能使用了(了解)
mysql
sql 结构化 structured 查询 query 语言
- oracle
- mysql
- sql server
1. 介绍及安装
mysql 客户端软件
- sqlyog
- navicat
database 数据库
table 表
row record 行
column 列
data 数据
dba database administrator
2. SQL 语句
ddl - 创建库表,修改库表,删除库表
create database [if not exists] 库名 [character set 字符集];
alter database 库名 character set 新字符集
drop database [if exists] 库名;
show databases; -- 查看所有库表
show create database 库名; -- 查看某个库建库语句
use 库名;
查看表的字符集
show create table user \G
表数据类型(*)
int - 4个字节的整数
tinyint - 1个字节 - byte
smallint - 2个字节 - short
bigint - 8个字节 - long
varchar(最大长度) - 字符串 例如 varchar(10) 意思就是最多能存储10字符
datetime 范围较大
timestamp 不推荐,范围小
重点
create table 表名 (
列1 类型 [约束],
列2 类型 [约束],
...
列n 类型 [约束]
) [character set 字符集];
了解(都可以通过图形界面完成)
alter table 表名 rename to 新表名; -- 修改表名
alter table 表名 add 新列名 类型 [约束]; -- 添加列
alter table 表名 modify 列名 新类型 [新约束]; -- 修改列
alter table 表名 drop 列名; -- 删除列
alter table 表名 change 旧列名 新列名 新类型 [新约束]; -- 修改列
desc 表名; -- 查看表中有哪些列
drop table [if exists] 表名;
show tables; -- 查看有哪些表
show create table 表名; -- 查看建表语句(包括字符集)
dml - 增删改数据(*)
dql - 查询数据(*)
dcl - 权限管理
3. 约束
dify 列名 新类型 [新约束]; – 修改列
alter table 表名 drop 列名; – 删除列
alter table 表名 change 旧列名 新列名 新类型 [新约束]; – 修改列
desc 表名; – 查看表中有哪些列
drop table [if exists] 表名;
show tables; – 查看有哪些表
show create table 表名; – 查看建表语句(包括字符集)
6. 多表
- 多表关系
- 一对一 外键加在哪一边都可以,但是外键必须配合唯一约束一起使用
- 多对一 外键必须加在多的的一方
- 多对多 引入一张中间表,中间表中有两个外键,分别引用另两张表的主键(被拆分为两个一对多关系)