当前位置: 首页 > news >正文

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

http://www.xdnf.cn/news/118711.html

相关文章:

  • ASP.NET Core 主机模型详解:Host、WebHost与WebApplication的对比与实践【代码之美】
  • 实现优雅的分页导航:从原理到最佳实践
  • Java查询数据库表信息导出Word
  • C++ STL priority_queue 详解:从基础到自定义类型
  • Spring Boot YML配置值“011“在代码中变为9的问题解析
  • 济南国网数字化培训班学习笔记-第二组-4节-输电线路工程安全管理
  • 二分小专题
  • 1Panel+Halo快速部署:简化服务器管理与网站搭建流程探索
  • MySQL 报错解析:SQLSyntaxErrorException caused by extra comma before FROM
  • 美团获全国首张低空物流全境覆盖运营合格证,其第四代无人机具备全域环境适应能力
  • redis经典问题
  • Redis 基础和高级用法入门
  • 【每天一个知识点】熵(Entropy)
  • Redis 核心应用场景
  • Linux 网络基础三 (数据链路层协议:以太网协议、ARP 协议)
  • Linux系统的延迟任务及定时任务
  • 济南国网数字化培训班学习笔记-第二组-6-输电线路现场教学
  • 一个开源且具有直观视觉界面的 API,可实现 DeepSeek 与 SillyTavern 的非官方集成。
  • 关于QT信号、槽、槽函数的讲解
  • Flutter Dart 循环语句 for while do..while break、continue
  • 第二章、安全认证
  • JavaWeb:Web介绍
  • 【Java实战经验】泛型-类型灵活使用与限制
  • 在线地图工具geojson.io
  • 【数据可视化-28】2017-2025 年每月产品零售价数据可视化分析
  • 第53讲 农学科研中的AI伦理与可解释性——探索SHAP值、LIME等可解释工具与科研可信性建设之道
  • 【嵌入式系统设计师(软考中级)】第二章:嵌入式系统硬件基础知识(3)
  • Linux的时间函数
  • 【k8s】k8s是怎么实现自动扩缩的
  • 移动通信行业术语