映射器&适配器的功能与构造

版权声明: https://blog.csdn.net/qq_39263750/article/details/89706968

饭前插曲:

在这里插入图片描述
一个习惯,只要是从客户端发送的请求,都可以加上这个项目的名字,这样就方便以后找这个文件

url-pattern修改为.do后缀后的操作

在这里插入图片描述
在这里插入图片描述
若改成.do 自定义注解里面也要变更
然后现在输入地址的时候在地址栏输入/user/add.do

在这里插入图片描述
得到用于传入的所有参数,以键值对的方式返回

单独提出映射路径和方法
在这里插入图片描述
把适配器和映射器分出来,重构代码。提高维护效率

在这里插入图片描述
问题:在实际操作传输数据的时候,除了这两个req,resp,后面的传入参数可能会千变万化(比如string name,int id date da bobby hb[数组]))所以要设计适配器,来处理这些问题。 首先要设计映射器。

映射器的构造方法:

建立一个映射器,只负责找controller

在这里插入图片描述
1.创建一个映射器。
初始化ioc容器,handlerMapping,controllerMap用来存放路径和方法、对象的关系。
在这里插入图片描述
构建get /set Method,供适配器(或者其他工具)调用映射器的方法
在这里插入图片描述2.将dispahter里面的doinstance复制过来
在这里插入图片描述
3。同样的,初始化映射器也拷贝过来,改名。
在这里插入图片描述
4. 映射器里面的根据url找对象这个功能, 之后的映射适配器里面可能会用到,所以在servlet里面定义一个全局变量。(在dispatchServlet里)

在这里插入图片描述
5.在dispatchServlet下面初始化映射器。
在这里插入图片描述

适配器的构造方法

创建一个映射器适配器。
目的:适配到controller对象中的方法,功能:反射调用

1.创建一个适配器对象(适配器中)。
在这里插入图片描述

2.自定义一个构造方法(适配器中),
在这里插入图片描述
3.初始化适配器名称,是一个全局变量。
在这里插入图片描述
4.把dispatcher里面的doDispatcher(本来的适配模块)分出去(dispatcherServlet里面),并且修改Dispather里面的handlerMapping路径。

在这里插入图片描述
在这里插入图片描述
5.适配器里面的部分。直接粘贴过来。
在这里插入图片描述
在这里插入图片描述

6.在Dispather里面初始化适配器,传入参数。
在这里插入图片描述


完善适配器Adapter

现在来解决开头的问题:当获取的用户输入的内容不止一个而是很多个,改怎么办

现在就来完善Adapter适配器的功能,让他可以处理多个数据。
直接在controller里面的 修改
在这里插入图片描述
当在地址栏输入不止name = xiaowang 若传入一个name=xiaowang &pwd=333的时候
在这里插入图片描述
在这里插入图片描述
参数有两个字符串,第一个字符串它知道是小王,但是由于是数组,随便取出来的值,所以多个字符串的情况下取值会有问题
在这里插入图片描述
所以现在要做的:取出map里面的key和你输入的属性进行适配,适配成功即可

获取method的参数名称(全程在适配器里面操作,完善适配器的功能)

在这里插入图片描述
这个时候就可以把传入的参数的名字 和map中的名字进行匹配了

考虑到传参的时候可能传过来一个数组,如何封装?
在这里插入图片描述
在这里插入图片描述

先传参测试:
在这里插入图片描述
在这里插入图片描述
匹配成功。
如果传入了一个int 这时候会报错:因为传入传出的默认是String, 传入的时候被转换成String了,但是传出int的时候发现操作的是一个 int
在这里插入图片描述
所以既要适配参数个数,也要适配参数类型

解决方法:建立一个工具MVCUtil: 里面包含一个修改参数类型的方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个习惯:把字符串写在前面去匹配。因为传入的typeName可能传入空值,这时候如果拿空值去匹配“int”这些数据类型的话,就成了空指针。

针对传入日期类的处理:

为了满足用户输入的各种各样的日期格式19-1-1 19-01-01 19/1/1,我们要提供一个配置文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再写一个日期工具
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
实验:
在这里插入图片描述
成功
在这里插入图片描述
现在,需要添加什么属性的值,在AddController里面添加即可。
在这里插入图片描述


在这里插入图片描述
自己拓展

猜你喜欢

转载自blog.csdn.net/qq_39263750/article/details/89706968