day17
EL表达式
- 概念:Expression Language 表达式语言
- 作用:替换和简化jsp页面中java代码的编写
- 语法:${表达式}
- 注意:
- jsp默认支持el表达式的,如果要忽略el表达式
- 设置jsp中page指令中:isELIgnored=“true” 忽略当前jsp页面中所有的el表达式
- \${表达式}:忽略当前这个el表达式
- jsp默认支持el表达式的,如果要忽略el表达式
- 使用:
- 运算
- 运算符:
- 算术运算符:+ - * / (div) %(mod)
- 比较运算符:> < >= <= == !=
- 逻辑运算符:&&(and) ||(or) !(not)
- 空运算符:empt
- 功能:用于判断字符串、集合、数组对象是否为null并且长度是否为0
- ${empty list}
- 运算符:
- 获取值
- el表达式只能从域对象中获取值
- 语法:
- ${域名称.键名}:从指定域中获取指定键的值
- 域名称:
- pageScope -->pageContext
- requestScope -->request
- sessionScope -->session
- applicationScope -->application(ServletContext)
- 举例:在request域中存储了name=张三
- 获取:${requestScope.name}
- 域名称:
- ${键名}:表示一次从最小的域中查找是否有该键对应的值,直到找到为止
- 获取对象、List集合、Map集合的值
- 对象:${域名称.键名.属性名}
- 本质上回去调用对象的getter方法
- List集合:${域名称.键名[索引]}
- Map集合:
- ${域名称.键名.key名称}
- ${域名称.键名[“key名称”]}
- 对象:${域名称.键名.属性名}
- ${域名称.键名}:从指定域中获取指定键的值
- 隐式对象:
- el表达式中有11个隐式对象
- pageContext:
- 获取jsp其它八个内置对象
- ${pageContext.request.contextPath}:动态获取虚拟目录
- 运算
JSTL
- 概念:JavaServer Pages Tag Library JSP标准标签库
- 是由Apache组织提供的开源的免费的jsp标签 <标签>
- 作用:用于简化和替换jsp页面上的java代码
- 使用步骤:
- 导入jstl相关jar包
- 引入标签库:taglib指令:<%@ taglib %>
- 使用标签
- 常用的JSTL标签
- if :相当于java代码的if语句
- 属性:
- test 必须属性,接受Boolean表达式
- 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
- 一般情况下,test属性值会结合el表达式一起使用
- test 必须属性,接受Boolean表达式
- 注意:c:if标签没有else情况,想要else情况,则可以再定义一个c:if标签
- 属性:
- choose :相当于java代码的switch语句
- 使用choose标签声明 相当于switch声明
- 使用when标签做判断 相当于case
- 使用otherwise标签做其他情况的声明 相当于default
- foreach :相当于java代码的for语句
- if :相当于java代码的if语句
- 练习:
- 需求:在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中
三层架构:软件设计架构
- 界面层(表示层):用户看到的界面。用户可以通过界面上的组件和服务器进行交互
- 业务逻辑层:处理业务逻辑的
- 数据访问层:操作数据存储文件
案例:用户信息列表展示
-
需求:用户信息的增删改查操作
-
设计:
-
技术选型:Servlet+JSP+MySQL+JDBCTemplate+Duird+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) );
-
开发:
- 环境搭建
- 创建数据库环境
- 创建项目,导入需要的jar包
- 编码
- 环境搭建
-
测试
-
部署运维
-
day 18
综合练习
- 简单功能
- 列表查询
- 登录
- 添加
- 删除
- 修改
- 复杂功能
- 删除选中
- 分页查询
- 复杂条件查询
day 19
Filter:过滤器
-
概念:
- 生活中的过滤器:净水器,空气净化器,土匪x
- web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能
- 过滤器的作用:
- 一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤
-
快速入门:
-
步骤:
- 定义一个类,实现接口Filter
- 复写方法
- 配置拦截路径
- web.xml
- 注解
-
代码:
-
过滤器细节:
-
web.xml配置
<filter> <filter-name>demo1</filter-name> <filter-class>cn.itcast.web.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> <!-- 拦截路径 --> <url-pattern>/*</url-pattern> <filter-mapping>
-
过滤器执行流程
- 执行过滤器
- 执行放行后的资源
- 回来执行过滤器放行代码下边的代码
-
过滤器生命周期方法
- init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
- doFilter:每一次请求被拦截资源时,会执行,且执行多次
- destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次,用于释放资源
-
过滤器配置详解
- 拦截路径配置:
- 具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行
- 拦截目录:/user/* 访问/user下的所有资源时,过滤器都会被执行
- 后缀名拦截:*.jsp 访问所有后缀名为jsp的资源时,过滤器都会被执行
- 拦截所有资源:/* 访问所有资源时,过滤器都会被执行
- 拦截方式配置:资源被访问的方式
- 注解配置:
- 设置dispatcherTypes属性
- REQUEST:默认值。浏览器直接请求资源
- FORWARD:转发访问资源
- INCLUDE:包含访问资源
- ERROR:错误跳转资源
- ASYNC:异步访问资源
- 设置dispatcherTypes属性
- web.xml配置
- 设置<dispatcher></dispatcher>标签即可
- 注解配置:
- 拦截路径配置:
-
过滤器链(配置多个过滤器)
- 执行顺序:如果有两个过滤器:过滤器1和过滤器2
- 过滤器1
- 过滤器2
- 资源执行
- 过滤器2
- 过滤器1
- 过滤器先后顺序问题:
- 注解配置:按照类名的字符串比较规则比较,值小的先执行
- 如:AFilter和BFilter,AFilter就先执行了
- web.xml配置:<filter-mapping>谁定义在上边,谁先执行
- 注解配置:按照类名的字符串比较规则比较,值小的先执行
- 执行顺序:如果有两个过滤器:过滤器1和过滤器2
-
-
案例:
- 案例1_登录验证
- 需求:
- 访问day_17case案例的资源。验证其是否登录
- 如果登录了,则直接放行
- 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"
- 需求:
- 案例2_敏感词汇过滤
- 需求:
- 对day_17case案例录入的数据进行敏感词汇过滤
- 敏感词汇参考《敏感词汇.txt》
- 如果是敏感词汇,替换为 ***
- 分析:
- 对request对象进行增强。增强获取参数相关方法
- 放行。传递代理对象
- 增强对象的功能:
- 设计模式:一些通用的解决固定问题的方式
- 装饰模式
- 代理模式
- 概念:
- 真实对象:被代理的对象
- 代理对象:
- 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的
- 实现方式:
- 静态代理:有一个类文件描述代理模式
- 动态代理:在内存中形成代理类
- 实现步骤:
- 实现步骤:
- 概念:
- 设计模式:一些通用的解决固定问题的方式
- 需求:
- 案例1_登录验证
-