起初的设计模式:
在服务器端有很多的serlvet组件,用户会发送哀求,而servlet又会访问DAO组件,DAO组件又去调用数据库DB,从数据库查询的数据再依次返回给Servlet,然后Servlet经过Thymeleaf等进行渲染相应给客户端。但这种根本的哀求方式会显得服务器端繁琐,下列进行初步修改
优化设计1(就是多个fruit相关的servlet整合为一个)
第一次修改:
一个哀求过来的时间,我们设想只有一个Servlet,对应的他会有一个service大概dopost,doget方法进行服务,(假设是service方法)在service内部根据你发过来的哀求去调用不同的方法。
优化设计2(通过反射机制获取需要调用的方法执行)
前景引入
在这个FruitServlet里面如果有很多方法,那我们第一次修改的switch-case会很多
(如果要检察某行代码就会显得很难,补充:ctrl+f可以检察关键字)
第二次修改
1.先获取当前类的所有方法
2.再使用for循环获取方法名称
3.找到和operate同名的方法,那么通过反射技术调用它
优化设计3(dispatcherServlet引入)
前景引入
我们在优化设计时使用反射机制来简化代码,但有多个Servlet我们是不是每个Servlet都需要写一个反射
好处:不需要FruitServlet等再继承使用反射,优化代码
第三次修改
将所有的哀求都交给DispatcherServlet,它根据用户哀求的不同去对应不同的Servlet,然后再定位到不同Servlet里面的方法
思绪
1.根据哀求的url获取ServletPash,然后ServletPath去截取字符串,解析出一个名字
2.解析加载我们的配置文件,从配置文件中读取一个个bean,放到map里面去
3.通过刚才得到的ServletPath去map里面找到能处理的对应哀求类。
第一步:通过servletPath获取hello
第二步:加载配置文件,字符串与类对应的map
2.1使用一个配置文件来实现hello对应的是HelloController
2.2在生命周期中调用init方法来实现
2.3init方法的作用说明
第三步:通过hello调用对应的HelloController
小结回顾
我们把之前的FruitServlet等当中的反射代码向前抽取到中央控制器(DispatcherServlet)当中去了,
这里我们假设发送一个哀求,前面的fruit.do,我们这些Controller在内存里面形成一个容器beanMap,这个容器里面会有一个一个组件,FruitController其实就和fruit.do对应,配置文件说明确的,解析了配置文件,把它里面的一个一个bean封装成map对象,再我们获取fruit.do的时间就能找到对应的FruitController
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |