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_登录验证 
      
 
-  










