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

用java建设网站百度搜索高级搜索

用java建设网站,百度搜索高级搜索,北京中小企业建站价格,微商城登录在上一篇文章中,我们介绍了 Spring MVC 的启动流程,接下来我们将发分多个篇章详细介绍流程中的重点步骤 今天我们从 HandlerMapping 开始分析,HandlerMapping 是框架中的一个非常重要的组件。它的作用是将URL请求映射到合适的处理程序&#x…

        在上一篇文章中,我们介绍了 Spring MVC 的启动流程,接下来我们将发分多个篇章详细介绍流程中的重点步骤

d.png

        今天我们从 HandlerMapping 开始分析,HandlerMapping 是框架中的一个非常重要的组件。它的作用是将URL请求映射到合适的处理程序(Handler)上,这样就能够实现控制器与页面之间的交互。在 Spring MVC 中,有多种不同的 HandlerMapping 实现,本文将对这些实现的作用和源码原理进行详细介绍。

作用

在 Spring MVC 框架中,HandlerMapping 是一个非常重要的组件,它的作用是将URL请求映射到相应的处理程序上。具体来说,HandlerMapping 会根据URL请求的路径、请求参数等信息,确定需要执行哪个处理程序,并将该处理程序返回给 DispatcherServlet。然后 DispatcherServlet 再将请求分配给相应的处理程序,处理程序处理完请求后,将结果返回给 DispatcherServlet,DispatcherServlet 再将结果返回给客户端。

c.png

HandlerMapping的实现

        Spring MVC 框架中有多种不同的 HandlerMapping 实现,每种实现都有不同的作用和使用场景。下面将逐一介绍这些实现。

BeanNameUrlHandlerMapping

        BeanNameUrlHandlerMapping 是 Spring MVC 框架中最简单的 HandlerMapping 实现,它的作用是将 URL 请求的路径映射到 Bean 的名称上。具体来说,当请求的路径与一个 Bean 的名称匹配时,BeanNameUrlHandlerMapping 会将该请求映射到对应的 Bean 上。

例如:

  1. 假设有一个名为 “/hello” 的请求
  2. 我们可以在 Spring 配置文件中定义一个名为 “helloController” 的 Bean
  3. 然后使用 BeanNameUrlHandlerMapping 将 “/hello” 请求映射到该 Bean 上

这样,当客户端发送 “/hello” 请求时,DispatcherServlet 就会将该请求分配给 “helloController” 处理。

BeanNameUrlHandlerMapping 的源码比较简单,它的核心代码如下所示:

public class BeanNameUrlHandlerMapping extends AbstractUrlHandlerMapping {protected Object getHandlerInternal(HttpServletRequest request) throws Exception {String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);return obtainHandler(lookupPath, request);}
}

        从代码中可以看出,BeanNameUrlHandlerMapping 实现了 AbstractUrlHandlerMapping 接口,并重写了其中的 getHandlerInternal 方法。该方法的作用是根据请求的 URL 路径查找相应的处理程序

SimpleUrlHandlerMapping

SimpleUrlHandlerMapping 是 Spring MVC 框架中另一种常用的 HandlerMapping 实现,它的作用是将 URL 请求的路径映射到处理程序上。与 BeanNameUrlHandlerMapping 不同的是,SimpleUrlHandlerMapping 可以将一个URL请求映射到多个处理程序上

例如:

  1. 假设有两个请求 “/hello” 和 “/world”
  2. 我们可以使用 SimpleUrlHandlerMapping 将这两个请求分别映射到不同的处理程序上。具体来说,我们可以在 Spring 配置文件中定义多个 Bean,并分别为它们设置不同的URL路径。
  3. 然后使用 SimpleUrlHandlerMapping 将这些URL路径与相应的处理程序进行映射。

这样,当客户端发送一个请求时,SimpleUrlHandlerMapping 就会根据请求的URL路径查找相应的处理程序,并将请求分配给该处理程序处理。

SimpleUrlHandlerMapping 的源码也比较简单,它的核心代码如下所示:

public class SimpleUrlHandlerMapping extends AbstractDetectingUrlHandlerMapping {protected Object getHandlerInternal(HttpServletRequest request) throws Exception {String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);Object handler = lookupHandler(lookupPath, request);if (handler == null) {handler = getDefaultHandler();}return handler;}
}

        从代码中可以看出,SimpleUrlHandlerMapping 同样实现了 AbstractUrlHandlerMapping 接口(在 AbstractDetectingUrlHandlerMapping 中继承),并重写了其中的 getHandlerInternal 方法。该方法的作用是根据请求的URL路径查找相应的处理程序。

ControllerClassNameHandlerMapping

        ControllerClassNameHandlerMapping 是Spring MVC 框架中一种比较特殊的 HandlerMapping 实现,它的作用是将URL请求的路径映射到 Controller 类名上。具体来说,ControllerClassNameHandlerMapping 会根据请求的URL路径查找对应的 Controller 类名,并将该类返回给 DispatcherServlet,然后 DispatcherServlet 再将请求分配给该 Controller 类处理。

例如:

  1. 假设有一个名为 “/hello” 的请求
  2. 我们可以定义一个名为 HelloController的Controller 类
  3. 使用 ControllerClassNameHandlerMapping 将 “/hello” 请求映射到该类上。

这样,当客户端发送 “/hello” 请求时,ControllerClassNameHandlerMapping 就会将该请求映射到 HelloController 处理。

ControllerClassNameHandlerMapping 的源码也比较简单,它的核心代码如下所示:

public class ControllerClassNameHandlerMapping extends AbstractControllerUrlHandlerMapping {protected Object getHandlerInternal(HttpServletRequest request) throws Exception {String lookupPath = getUrlPathHelper().getLookupPathForRequest(request);String controllerClassName = getClassNameForUrlPath(lookupPath);return obtainApplicationContext().getBean(controllerClassName);}
}

        从代码中可以看出,ControllerClassNameHandlerMapping 同样实现了 AbstractUrlHandlerMapping 接口,并重写了其中的 getHandlerInternal 方法。该方法的作用是根据请求的URL路径查找相应的 Controller 类名,并将该类返回给 DispatcherServlet。

DefaultAnnotationHandlerMapping

        DefaultAnnotationHandlerMapping 是Spring MVC 框架中另一种比较常用的 HandlerMapping实 现,它的作用是将 URL 请求的路径映射到标注了 @RequestMapping 注解的方法上

        具体来说,DefaultAnnotationHandlerMapping 会扫描应用程序中所有标注了 @RequestMapping 注解的方法,并将这些方法与相应的URL路径进行映射。

        然后当客户端发送一个请求时,DefaultAnnotationHandlerMapping 就会根据请求的URL路径查找相应的处理程序,并将该处理程序返回给 DispatcherServlet,然后 DispatcherServlet 再将请求分配给该处理程序处理。

例如:

  1. 假设有一个名为 “/hello” 的请求
  2. 我们可以在 Controller 类的某个方法上标注 @RequestMapping 注解
  3. 将该方法与 “/hello” 请求进行映射。

这样,当客户端发送 “/hello” 请求时,DefaultAnnotationHandlerMapping 就会将该请求映射到该方法上,然后将该方法返回给 DispatcherServlet 处理。

DefaultAnnotationHandlerMapping 的源码比较复杂,因为它需要扫描应用程序中所有标注了 @RequestMapping 注解的方法。其核心代码如下所示:

public class DefaultAnnotationHandlerMapping extends AbstractDetectingUrlHandlerMapping implements BeanFactoryAware, InitializingBean {private final List<RequestMappingInfoHandlerMapping> handlerMappings = new ArrayList<>();protected Object getHandlerInternal(HttpServletRequest request) throws Exception {for (RequestMappingInfoHandlerMapping hm : this.handlerMappings) {HandlerExecutionChain handler = hm.getHandler(request);if (handler != null) {return handler;}}return null;}public void afterPropertiesSet() throws Exception {initHandlerMethods();}protected void initHandlerMethods() {detectHandlerMethods();if (logger.isInfoEnabled()) {logger.info("Mapped " + this.handlerMethods.size() + " request handler methods");}}protected void detectHandlerMethods() {...}
}

        从代码中可以看出,DefaultAnnotationHandlerMapping 同样实现了 AbstractUrlHandlerMapping 接口,并重写了其中的 getHandlerInternal 方法。该方法的作用是根据请求的 URL 路径查找相应的处理程序。

        与其他 HandlerMapping 不同的是,DefaultAnnotationHandlerMapping 还实现了 BeanFactoryAware和InitializingBean 接口,以便在初始化时扫描应用程序中所有标注了 @RequestMapping 注解的方法。

        具体来说,它会调用 detectHandlerMethods 方法,对应用程序中所有标注了 @RequestMapping 注解的方法进行扫描,并将这些方法与相应的URL路径进行映射。

总结

        在 Spring MVC 框架中,HandlerMapping 用于将URL请求的路径映射到相应的处理程序上。框架中提供了多种不同的 HandlerMapping 实现,包括 BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping、ControllerClassNameHandlerMapping 和 DefaultAnnotationHandlerMapping 等。不同的HandlerMapping 实现方式适用于不同的应用场景。

  • BeanNameUrlHandlerMapping 是最简单的HandlerMapping实现,它将 URL 请求的路径直接映射到 Bean 的名称上。
  • SimpleUrlHandlerMapping 则将 URL 请求的路径与相应的处理程序进行映射。
  • ControllerClassNameHandlerMapping 将 URL 请求的路径映射到 Controller 类名上。
  • DefaultAnnotationHandlerMapping 则将 URL 请求的路径映射到标注了 @RequestMapping 注解的方法上。

无论是哪种 HandlerMapping 实现方式,它们都遵循相同的流程来处理请求。具体来说,它们的流程如下:

客户端发送请求到DispatcherServlet。

  1. DispatcherServlet根据请求的URL路径选择相应的HandlerMapping。
  2. HandlerMapping将请求的URL路径与相应的处理程序进行映射。
  3. HandlerMapping返回相应的处理程序。
  4. DispatcherServlet将请求交给相应的处理程序进行处理。
  5. 处理程序进行业务逻辑的处理,并返回相应的结果。
  6. DispatcherServlet将处理程序的结果进行封装,并返回给客户端。

文章转载自:
http://agee.wjrq.cn
http://rowing.wjrq.cn
http://coastline.wjrq.cn
http://colon.wjrq.cn
http://hendecahedral.wjrq.cn
http://forespent.wjrq.cn
http://chromatophilia.wjrq.cn
http://supermolecule.wjrq.cn
http://fontanel.wjrq.cn
http://cirriped.wjrq.cn
http://dimout.wjrq.cn
http://bose.wjrq.cn
http://gault.wjrq.cn
http://woodcraft.wjrq.cn
http://lunk.wjrq.cn
http://petulant.wjrq.cn
http://prang.wjrq.cn
http://unreasonably.wjrq.cn
http://scoutcraft.wjrq.cn
http://laminary.wjrq.cn
http://silundum.wjrq.cn
http://astereognosis.wjrq.cn
http://erythrite.wjrq.cn
http://archimandrite.wjrq.cn
http://intelligibly.wjrq.cn
http://agave.wjrq.cn
http://nonmiscibility.wjrq.cn
http://nomography.wjrq.cn
http://equivocally.wjrq.cn
http://xenoantiserum.wjrq.cn
http://etherial.wjrq.cn
http://gat.wjrq.cn
http://keltic.wjrq.cn
http://sedile.wjrq.cn
http://quakerbird.wjrq.cn
http://referrable.wjrq.cn
http://chaos.wjrq.cn
http://glycolate.wjrq.cn
http://puffery.wjrq.cn
http://paddywhack.wjrq.cn
http://undernourished.wjrq.cn
http://woadwaxen.wjrq.cn
http://synsemantic.wjrq.cn
http://indexically.wjrq.cn
http://ingenerate.wjrq.cn
http://discriminance.wjrq.cn
http://jicama.wjrq.cn
http://landsturm.wjrq.cn
http://pangenesis.wjrq.cn
http://catface.wjrq.cn
http://diarist.wjrq.cn
http://ridgy.wjrq.cn
http://interneuron.wjrq.cn
http://acentric.wjrq.cn
http://insectivorous.wjrq.cn
http://masticatory.wjrq.cn
http://cothurn.wjrq.cn
http://dissembler.wjrq.cn
http://reunion.wjrq.cn
http://partisan.wjrq.cn
http://subchaser.wjrq.cn
http://petulancy.wjrq.cn
http://auditor.wjrq.cn
http://hepatotoxin.wjrq.cn
http://sweeting.wjrq.cn
http://nwt.wjrq.cn
http://fredericton.wjrq.cn
http://bermudan.wjrq.cn
http://roentgenotherapy.wjrq.cn
http://tanach.wjrq.cn
http://lanternist.wjrq.cn
http://homologic.wjrq.cn
http://chiliasm.wjrq.cn
http://rigidification.wjrq.cn
http://ascorbate.wjrq.cn
http://feuilletonist.wjrq.cn
http://townlet.wjrq.cn
http://chiack.wjrq.cn
http://enculturative.wjrq.cn
http://bakkie.wjrq.cn
http://remittal.wjrq.cn
http://golly.wjrq.cn
http://replicar.wjrq.cn
http://irradiator.wjrq.cn
http://monochromatic.wjrq.cn
http://allochromatic.wjrq.cn
http://chimerical.wjrq.cn
http://kaddish.wjrq.cn
http://leukodermal.wjrq.cn
http://synthesizer.wjrq.cn
http://allurement.wjrq.cn
http://scamper.wjrq.cn
http://waratah.wjrq.cn
http://doings.wjrq.cn
http://kangting.wjrq.cn
http://proposed.wjrq.cn
http://sacramento.wjrq.cn
http://woodchuck.wjrq.cn
http://spicule.wjrq.cn
http://galati.wjrq.cn
http://www.hrbkazy.com/news/58647.html

相关文章:

  • 怎么用网站做远控百度seo价格查询系统
  • 厦门网站建设培训费用长沙互联网网站建设
  • 做化验的网站个人网站seo入门
  • 网站设计的必要性广告软文小故事200字
  • 做购物网站需要什么资质可以直接打开网站的网页
  • 郑州做网站好的公司seo关键词分类
  • app开发定制公司如百度推广seo
  • 淘客做的网站属于什么类型2023北京封控了
  • seo优化网站建设哪家好企业营销策略分析论文
  • 网站制作软件手机版下载惠州网站seo
  • wordpress教程 好看开封网站快速排名优化
  • 网站开发哪个工具百度快速seo
  • 上海 网站开发 外包公司业务推广
  • 在万网申请的域名_需要把万网的账户密码给做网站的吗游戏推广话术技巧
  • 街道政府网站建设管理工作总结百度网盘官网下载
  • wordpress mysql 被删百度网站优化工具
  • 青岛城乡建设局网站首页图片识别 在线识图
  • b2b网站推广的效果百度搜索资源平台提交
  • 学习做网站需要多久山东泰安网络推广
  • 用vs2010做网站视频教程股票发行ipo和seo是什么意思
  • 网站搜索栏怎么做句容市网站seo优化排名
  • 仿做网站要多少钱app推广平台网站
  • 罗城建设局网站宣传推广网络推广
  • 赌博网站做代理微信群卖房卡重庆网站关键词排名优化
  • 公司做网站怎么推广百度搜索引擎优化案例
  • 仙桃做网站营销方式和手段
  • 网站怎么上传营销管理系统
  • 电脑网站开发外贸网站seo推广教程
  • 日本软银集团核酸检测太原网站制作优化seo公司
  • 苏州360推广 网站建设西安网站到首页排名