勿忘初心做自己 发表于 前天 11:26

servlet-优化

 起初的设计模式:

在服务器端有很多的serlvet组件,用户会发送哀求,而servlet又会访问DAO组件,DAO组件又去调用数据库DB,从数据库查询的数据再依次返回给Servlet,然后Servlet经过Thymeleaf等进行渲染相应给客户端。但这种根本的哀求方式会显得服务器端繁琐,下列进行初步修改
https://i-blog.csdnimg.cn/direct/b76492d146134d0a85863a1f9ef1231e.png
https://i-blog.csdnimg.cn/direct/a51dd7e3ba604efdba4f191548bb40cb.png
优化设计1(就是多个fruit相关的servlet整合为一个)

第一次修改:

一个哀求过来的时间,我们设想只有一个Servlet,对应的他会有一个service大概dopost,doget方法进行服务,(假设是service方法)在service内部根据你发过来的哀求去调用不同的方法。
https://i-blog.csdnimg.cn/direct/1549e29d7d2e4faabc70e4ab2c262b0d.png
https://i-blog.csdnimg.cn/direct/0c8f3531d66f4ef9b478b672cae5ca89.png
https://i-blog.csdnimg.cn/direct/e7706e9412124009a76ab285cb8fc1be.png
优化设计2(通过反射机制获取需要调用的方法执行)

前景引入

在这个FruitServlet里面如果有很多方法,那我们第一次修改的switch-case会很多
(如果要检察某行代码就会显得很难,补充:ctrl+f可以检察关键字)

https://i-blog.csdnimg.cn/direct/1549e29d7d2e4faabc70e4ab2c262b0d.png
第二次修改

1.先获取当前类的所有方法

2.再使用for循环获取方法名称

3.找到和operate同名的方法,那么通过反射技术调用它

https://i-blog.csdnimg.cn/direct/77fe700f1df64aaca0eb403d77ba3058.png
优化设计3(dispatcherServlet引入)

前景引入

我们在优化设计时使用反射机制来简化代码,但有多个Servlet我们是不是每个Servlet都需要写一个反射
好处:不需要FruitServlet等再继承使用反射,优化代码
https://i-blog.csdnimg.cn/direct/7131e2a34eda4237b9abd743792f8bcb.png
第三次修改

将所有的哀求都交给DispatcherServlet,它根据用户哀求的不同去对应不同的Servlet,然后再定位到不同Servlet里面的方法
https://i-blog.csdnimg.cn/direct/7987ca6e48e4481facdcc8916548bd95.png
思绪

1.根据哀求的url获取ServletPash,然后ServletPath去截取字符串,解析出一个名字
2.解析加载我们的配置文件,从配置文件中读取一个个bean,放到map里面去
3.通过刚才得到的ServletPath去map里面找到能处理的对应哀求类。
第一步:通过servletPath获取hello

https://i-blog.csdnimg.cn/direct/51e9ff43727d436d814f3f32138077aa.png
第二步:加载配置文件,字符串与类对应的map

2.1使用一个配置文件来实现hello对应的是HelloController
https://i-blog.csdnimg.cn/direct/e8c82dfb09c74c748259e9235da46d69.png
2.2在生命周期中调用init方法来实现
https://i-blog.csdnimg.cn/direct/51019153919e442a967ccdd7ee6b2b41.png
https://i-blog.csdnimg.cn/direct/408040b77211430d818767248c323157.png
2.3init方法的作用说明
https://i-blog.csdnimg.cn/direct/b0248751108c4736b797af3247700e5c.png
第三步:通过hello调用对应的HelloController

https://i-blog.csdnimg.cn/direct/14c3a6f1fe444521be023ea62258b424.png


小结回顾
https://i-blog.csdnimg.cn/direct/9b629b9a00d743a1960e2d7d3b78f815.png
我们把之前的FruitServlet等当中的反射代码向前抽取到中央控制器(DispatcherServlet)当中去了,
这里我们假设发送一个哀求,前面的fruit.do,我们这些Controller在内存里面形成一个容器beanMap,这个容器里面会有一个一个组件,FruitController其实就和fruit.do对应,配置文件说明确的,解析了配置文件,把它里面的一个一个bean封装成map对象,再我们获取fruit.do的时间就能找到对应的FruitController
https://i-blog.csdnimg.cn/direct/d74413972fe0460a9eae51a79f7254a7.png





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: servlet-优化