servlet-优化
起初的设计模式:
在服务器端有很多的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