servlet-优化

发布于:2025-05-01 ⋅ 阅读:(54) ⋅ 点赞:(0)

 起初的设计模式:

在服务器端有很多的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

优化设计4(提取视图资源处理调用代码)

前景引入

在FruitController里面的update、edit、del等方法中有着共同的获取参数行为,只是每个方法获取的可能不太一样。以及这些方法里面还需要做重定向或者转发

接下来围绕这两点进行优化!

1.把update里面的重定向去掉,改成return,并且把方法改成String。

此时update里面就没有资源的重定向,只有字符串返回。返回给谁--->中央控制器(DispatcherServlet)调用的则返回给它。让它统一去做资源的转发和重定向

2.这里也可以删掉,不需要再传。

3.method.invoke是调用controller一个一个方法

4.视图处理

专门创建一个转发或者重定向的服务站,有什么直接找服务站就行,代码冗余减少!

优化设计5(在核心控制器中统一获取参数以及视图处理)

前景引入

上面的代码优化了每个方法的转发和重定向。接下来继续解决获取参数重复部分。

1.首先将参数去掉 修改需要获取参数的地方

最后代码简洁成这样

思路暂时还没跟上,下次回顾更新内容!(最后的代码简洁成这样)


网站公告

今日签到

点亮在社区的每一天
去签到