目录

一、JSP

二、MVC

⭐区分业务对象和数据访问对象

1.DAO中的方法都是单精度方法(细粒度方法)

2.BO中的方法属于业务方法

⚪注册功能

三、IOC

1.耦合/依赖

2.控制反转 IOC/依赖注入 DI

①控制反转

②依赖注入

四、 Filter

1.过滤器的三要素

①拦截

​​​​​​​②过滤

③放行

2.Filter开发步骤

3.过滤器链

4.Filter生命周期

5.过滤器匹配规则

①精确匹配 

②模糊匹配

①前杠后星

②前星后缀

③前杠后缀,星号在中间


一、JSP

JSP = HTML + java

  1. HTML + CSS + JS
  2. java代码:和数据库通信的代码
  3. java代码:将java数据展示在页面上的代码

二、MVC

  • M:model(模型)
  • V:view(视图)
  • C:controller(控制器)

视图层:用于做数据展示和用户交互的一个界面

控制层:能够接受客户端的请求,具体的业务功能还是需要借助于模型组件来完成

模型层:模型层分为很多种,有比较简单的pojo/vo(value object),有业务模型组件,有数据访问层组件

  • pojo/vo:值对象
  • DAO:数据访问对象
  • BO:业务对象

⭐区分业务对象和数据访问对象

1.DAO中的方法都是单精度方法(细粒度方法)

什么是单精度?

一个方法只考虑一个操作,比如添加,那就是insert操作,修改就是update操作,查询就是select操作等......

2.BO中的方法属于业务方法

实际的业务比较复杂,因此业务方法的粒度是比较粗的

⚪注册功能

注册的功能属于业务功能,也就是说注册这个方法属于业务方法

那么这个业务方法中包含了多个DAO方法,也就是说注册这个业务功能需要通过多个DAO方法的组合调用,从而完成注册功能

注册包含的功能?

  • 检查用户是否已经被注册 —— DAO中的select操作
  • 向用户表新增一条新用户记录 —— DAO中的insert操作
  • 向用户积分表新增一条记录(新用户默认初始化积分**分)—— DAO中的insert操作
  • 向系统消息表新增一条记录(×××新用户注册了,需要根据通讯录信息向他的联系人推送消息)——  DAO中的insert操作
  • 向系统日志表新增一条记录
  • ...........

三、IOC

1.耦合/依赖

依赖:某某某离不开某某某

在软件系统中,层与层之间是存在依赖的。我们也称之为耦合

我们在系统架构或者设计的原则是:高内聚,低耦合

层内部的组成应该是高度聚合的,而层与层之间的关 系应该是低耦合的,最理想的情况是0耦合的

2.控制反转 IOC/依赖注入 DI

①控制反转

Ⅰ.之前在Servlet中,我们创建service对象,FruitService fruitService = new FruitServiceImpl()

  • 这句话如果出现在servlet中的某个方法内部,那么这个fruitService的作用域(生命周期)应该就是这个方法级别
  • 如果这句话出现在servlet的类中,也就是说fruitService是一个成员变量,那么这个fruitService的作用域(生命周期)应该就是这个servlet实例级别

Ⅱ. ​​​​​​​之后我们在applicationContext.xml中定义了这个fruitService,然后通过解析xml,产生fruitService实例,存放在beanMap中,这个beanMap在一个BeanFactory中,因此,我们改变了之前的service实例、dao实例等的生命周期,控制权从程序员转移到BeanFactory

②依赖注入

  • 之前我们在控制层出现代码:FruitService fruitService = new FruitServiceImpl()
  • 那么,控制层和service层存在耦合
  • 之后,我们将代码修改成FruitService fruitService = null;
  • 然后在配置文件中配置:
  • <bean id = "fruit" class = "FruitController">
  •          <property name = "fruitService" ref = "fruitService"/>
  • </bean>

四、 Filter

Filter也属于Servlet规范

1.过滤器的三要素

①拦截

过滤器之所以能够对请求进行预处理,关键是对请求进行拦截,把请求拦截下来才能够做后续的操作。而且对于一个具体的过滤器,它必须明确它要拦截的请求,而不是所有请求都拦截。

​​​​​​​②过滤

根据业务功能实际的需求,看看在把请求拦截到之后,需要做什么检查或什么操作,写对应的代码即可。

③放行

过滤器完成自己的任务或者是检测到当前请求符合过滤规则,那么可以将请求放行。所谓放行,就是让请求继续去访问它原本要访问的资源。

2.Filter开发步骤

  • 新建类实现Filter接口,然后实现其中的三个方法Linit、doFilter、destory
  • 配置Filter,可以用注解@WebFilter,也可以使用xml文件<filter><filter-mapping>
  • Filter在配置时,和servlet一样,也可以配置通配符,例如@WebFilter("*.do")表示拦截所以有.do的结尾

3.过滤器链

  • 如果采取的是注解的方式进行配置,那么过滤器链的拦截顺序是按照全类名的先后顺序排序的
  • 如果采取的是xml的方式进行配置,那么按照配置的先后顺序进行排序
  • 多个Filter的拦截范围如果存在重合部分,那么这些Filter会形成Filter链。
  • 浏览器请求重合部分对应的目标资源时,会依次经过Filter链中的每一个Filter。
  • Filter链中每一个Filter执行的顺序是由web.xml中filter-mapping配置的顺序决定的。

4.Filter生命周期

和Servlet生命周期类比,Filter生命周期的关键区别是:在Web应用启动时创建对象

5.过滤器匹配规则

①精确匹配 

指定被拦截资源的完整路径

②模糊匹配

相比较精确匹配,使用模糊匹配可以让我们创建一个Filter就能够覆盖很多目标资源,不必专门为每一个目标资源都创建Filter,提高开发效率。

①前杠后星

在我们配置了url-pattern为/user/*之后,请求地址只要是/user开头的那么就会被匹配。

②前星后缀

下面我们使用png图片来测试后缀拦截的效果,并不是只能拦截png扩展名。

  1. 创建一组img标签
  2. 创建Filter

③前杠后缀,星号在中间

配置方式如下:

<url-pattern>/*.png</url-pattern>

按照这个配置启动Web应用时会抛出异常:

java.lang.IllegalArgumentException: Invalid /*.png in filter mapping

结论:这么配是不允许的!

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐