热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springmvc之配置式开发

1.SimplUrlHandlerMapping01.在applicationContext.xml中配置:02.定义控制器03.web.xml中的配置还如上篇博客2.Handll

1.SimplUrlHandlerMapping

01.在applicationContext.xml中配置:






firstController




02.定义控制器

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("username","Spring-MVC");
mv.setViewName("index"); //逻辑视图名
return mv;
}
}

03.web.xml中的配置还如上篇博客

2.HandllerMapping执行流程

请求过来先碰见中央调度器(前端调度器)

技术分享

技术分享

技术分享

对当前请求决定交给哪个handler, 当前请求地址过来

技术分享

处理器执行链处理请求,接着我们去找getHandler的实现

hm是HandlerMapping对象,下图选定位置调用HandlerMapping的getHandler()方法通过请求找到Handler,但是返回值为HandlerExecutionChain(执行链)

技术分享

技术分享

这个servlet所支持的处理器映射器的集合,这里有N个处理器映射器。hm就是指HandlerMapping ,下面的if中的代码是指记录日志,日志跟踪。HandlerMapping处理器映射器中有N个拦截器,处理客服端请求的处理器只有一个,就是handler处理器。

getHandler我们跟进去,

技术分享

看过来的handler是不是执行链,要是就把handler强转成执行链,如果不是我new出一个执行链并且把handler给执行链。

技术分享

HandlerInterceptor是处理器的拦截器。而且不是一个是多个拦截器(this.adaptedInterceptors),然后做了一个操作。如果当期拦截器,是映射用的拦截器,就把他给强转成处理器映射器。

然后做了一个匹配,和查找的路径做匹配。然后加到了执行链拦截器中。那么如果不是就直接用一个的参数来添加。所有可以看出HandlerExecutionChain中只包含一个handler。包含N个拦截器。在把这个对象返回给了中央调度器。

 HandlerMapping总结:

DispatcherServlet

--->doDispatcher()

---->getHandler(request):

---->HandlerExecutionChain

------> hm.getHandler(request)-----》方法体中

----->ExecutionChain executiOnChain= getHandlerExecutionChain(handler, request);

----->new HandlerExecutionChain(handler)

----->chain.addInterceptor(interceptor);

HandlerMapping:处理器映射器
作用:根据【请求】找到【处理器Handler】,但并不是简单的返回处理器,而是
将处理器和拦截器封装,形成一个处理器执行链(HandlerExecuteChain)。

4..DispatcherServlet 拿着执行链去寻找对应的处理器适配器(HandlerAdapter)
为什么要引入适配器?

因为处理器(Handler)有很多种,DispatcherServlet没办法统一管理,所以出现了适配器。让适配器统一处理Handler,而DispatcherServlet统一处理适配器。根据请求去找对应的handler

 3.HandlerAdapto执行流程

1.0在DispatcherServlet中找到getHandlerAdapter()方法

 技术分享

2.0进入getHandlerAdapter()具体的方法实现内

技术分享

3.0获取ModelAndView:

技术分享

4.0真正的执行者:

技术分享

4.HashMap和LinkedHashMap

    HashMap底层是通过一个Entry []  table,接下来单个entry数据类型:是HashMap静态内部类。静态内部类中有一个成员变量:Entry next :通过该成员变量,其底层用的是单向链表,性能低。

技术分享

 

    LinkedHashMap:底层也是一个Entry数组,接下来单个Entry数据类型Entry  before,after;(双向链表)

技术分享

5.AbstractController:

    若处理器继承自AbstractController类,那么该控制类就具有了一些新功能。因为AbstractController类还继承自一个父类WebControllerGenerator, WebControllerGenerator具有supportMethods属性,可以设置支持的HTTP数据提交方式。默认支持GET/POST/HEAD

01.AbstractController限定请求提交方式
















6.MultiActionController默认方法名称解析器















7.PropertiesMethodNameResolveer属性方法名称解析器













doFirst
doSecond








  

 

  

 

  

 

  

  


推荐阅读
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 使用Jsoup解析并遍历HTML文档时,该库能够高效地生成一个清晰、规范的解析树,即使源HTML文档存在格式问题。Jsoup具备强大的容错能力,能够处理多种异常情况,如未闭合的标签等,确保解析结果的准确性和完整性。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
author-avatar
顽石1129_659
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有