当前位置:首页 > 代码 > 正文

springmvc源代码(springMVC源码)[20240425更新]

admin 发布:2024-04-25 18:07 126


今天给各位分享springmvc源代码的知识,其中也会对springMVC源码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

配置Spring+Spring MVC+Hibernate需要哪些jar包

1.下载SpringMvc, 选择最新最稳定的3.2.3.RELEASE版本。(使用SpringMvc需同时下载dist包和依赖包,但自从spring-framework-3.0.2后spring已经不提供依赖包下载了,实际上真正部署的时候,dist包就够了,spring只依赖很少的几个jar包,而spring老版本之前提供的依赖包有100多M,里面各种实现,90%的包我们都用不到,我们手动下载jar即可)

2.下载SpringMvc的依赖包,jstl.jar,standard.jar,commons-logging.jar。前面两个是JSTL表达式需要的(如果不使用JSTL,可以不下载),后面一个是日志需要的。也就是说,实际上SpringMVC只依赖一个包。都可以在MVN的仓库里找到。

3.把第一步下载的dist包里lib下的jar和第二步下载来的三个依赖jar包都拷贝到此工程的lib目录下。偷懒的话就全部拷贝,有点追求的的话,拷贝下面几个就够了:

spring-aop-3.2.3.RELEASE.jar

spring-aspects-3.2.3.RELEASE.jar

spring-beans-3.2.3.RELEASE.jar

spring-context-3.2.3.RELEASE.jar

spring-core-3.2.3.RELEASE.jar

spring-expression-3.2.3.RELEASE.jar

spring-jdbc-3.2.3.RELEASE.jar

spring-tx-3.2.3.RELEASE.jar

spring-web-3.2.3.RELEASE.jar

spring-webmvc-3.2.3.RELEASE.jar

有些包,可能现在用不上,但后期可能有用,10个包也不多,就留着吧。加上之前的三个依赖jar包,总共13个包,也就5M左右。

spring mvc配置方法解释器后,启动Tomcat报错!

异常很明显,是你创建的Bean初始化失败了。再就是你提供的setter方法无效。你仔细检查下看你property name里面的值是否是一一对应的

Spring系列(一)Spring MVC bean 解析、注册、实例化流程源码剖析

最近在使用Spring MVC过程中遇到了一些问题,网上搜索不少帖子后虽然找到了答案和解决方法,但这些答案大部分都只是给了结论,并没有说明具体原因,感觉总是有点不太满意。

更重要的是这些所谓的结论大多是抄来抄去,基本源自一家,真实性也有待考证。

那作为程序员怎么能知其所以然呢?

此处请大家内心默读三遍。

用过Spring 的人都知道其核心就是IOC和AOP,因此要想了解Spring机制就得先从这两点入手,本文主要通过对IOC部分的机制进行介绍。

在开始阅读之前,先准备好以下实验材料。

IDEA 是一个优秀的开发工具,如果还在用Eclipse的建议切换到此工具进行。

IDEA有很多的快捷键,在分析过程中建议大家多用Ctrl+Alt+B快捷键,可以快速定位到实现函数。

Spring bean的加载主要分为以下6步:

查看源码第一步是找到程序入口,再以入口为突破口,一步步进行源码跟踪。

Java Web应用中的入口就是web.xml。

在web.xml找到ContextLoaderListener ,此Listener负责初始化Spring IOC。

contextConfigLocation参数设置了bean定义文件地址。

下面是ContextLoaderListener的官方定义:

翻译过来ContextLoaderListener作用就是负责启动和关闭Spring root WebApplicationContext。

具体WebApplicationContext是什么?开始看源码。

从源码看出此Listener主要有两个函数,一个负责初始化WebApplicationContext,一个负责销毁。

继续看initWebApplicationContext函数。

在上面的代码中主要有两个功能:

进入CreateWebAPPlicationContext函数

进入determineContextClass函数。

进入configureAndReFreshWebApplicaitonContext函数。

WebApplication Context有很多实现类。 但从上面determineContextClass得知此处wac实际上是XmlWebApplicationContext类,因此进入XmlWebApplication类查看其继承的refresh()方法。

沿方法调用栈一层层看下去。

获取beanFactory。

beanFactory初始化。

加载bean。

读取XML配置文件。

XmlBeanDefinitionReader读取XML文件中的bean定义。

继续查看loadBeanDefinitons函数调用栈,进入到XmlBeanDefinitioReader类的loadBeanDefinitions方法。

最终将XML文件解析成Document文档对象。

上一步完成了XML文件的解析工作,接下来将XML中定义的bean注册到webApplicationContext,继续跟踪函数。

用BeanDefinitionDocumentReader对象来注册bean。

解析XML文档。

循环解析XML文档中的每个元素。

下面是默认命名空间的解析逻辑。

不明白Spring的命名空间的可以网上查一下,其实类似于package,用来区分变量来源,防止变量重名。

这里我们就不一一跟踪,以解析bean元素为例继续展开。

解析bean元素,最后把每个bean解析为一个包含bean所有信息的BeanDefinitionHolder对象。

接下来将解析到的bean注册到webApplicationContext中。接下继续跟踪registerBeanDefinition函数。

跟踪registerBeanDefinition函数,此函数将bean信息保存到到webApplicationContext的beanDefinitionMap变量中,该变量为map类型,保存Spring 容器中所有的bean定义。

Spring 实例化bean的时机有两个。

一个是容器启动时候,另一个是真正调用的时候。

相信用过Spring的同学们都知道以上概念,但是为什么呢?

继续从源码角度进行分析,回到之前XmlWebApplication的refresh()方法。

可以看到获得beanFactory后调用了 finishBeanFactoryInitialization()方法,继续跟踪此方法。

预先实例化单例类逻辑。

获取bean。

doGetBean中处理的逻辑很多,为了减少干扰,下面只显示了创建bean的函数调用栈。

创建bean。

判断哪种动态代理方式实例化bean。

不管哪种方式最终都是通过反射的形式完成了bean的实例化。

我们继续回到doGetBean函数,分析获取bean的逻辑。

上面方法中首先调用getSingleton(beanName)方法来获取单例bean,如果获取到则直接返回该bean。方法调用栈如下:

getSingleton方法先从singletonObjects属性中获取bean 对象,如果不为空则返回该对象,否则返回null。

那 singletonObjects保存的是什么?什么时候保存的呢?

回到doGetBean()函数继续分析。如果singletonObjects没有该bean的对象,进入到创建bean的逻辑。处理逻辑如下:

下面是判断容器中有没有注册bean的逻辑,此处beanDefinitionMap相信大家都不陌生,在注册bean的流程里已经说过所有的bean信息都会保存到该变量中。

如果该容器中已经注册过bean,继续往下走。先获取该bean的依赖bean,如果镩子依赖bean,则先递归获取相应的依赖bean。

依赖bean创建完成后,接下来就是创建自身bean实例了。

获取bean实例的处理逻辑有三种,即Singleton、Prototype、其它(request、session、global session),下面一一说明。

如果bean是单例模式,执行此逻辑。

获取单例bean,如果已经有该bean的对象直接返回。如果没有则创建单例bean对象,并添加到容器的singletonObjects Map中,以后直接从singletonObjects直接获取bean。

把新生成的单例bean加入到类型为MAP 的singletonObjects属性中,这也就是前面singletonObjects()方法中获取单例bean时从此Map中获取的原因。

Prototype是每次获取该bean时候都新建一个bean,因此逻辑比较简单,直接创建一个bean后返回。

从相应scope获取对象实例。

判断scope,获取实例函数逻辑。

在相应scope中设置实例函数逻辑。

以上就是Spring bean从无到有的整个逻辑。

从源码角度分析 bean的实例化流程到此基本接近尾声了。

回到开头的问题,ContextLoaderListener中初始化的WebApplicationContext到底是什么呢?

通过源码的分析我们知道WebApplicationContext负责了bean的创建、保存、获取。其实也就是我们平时所说的IOC容器,只不过名字表述不同而已。

本文主要是讲解了XML配置文件中bean的解析、注册、实例化。对于其它命名空间的解析还没有讲到,后续的文章中会一一介绍。

希望通过本文让大家在以后使用Spring的过程中有“一切尽在掌控之中”的感觉,而不仅仅是稀里糊涂的使用。

spring mvc源码长按ctrl键为什么不跳转

在使用Eclipse进行java编程时,有时我们需要查看一些类的源代码,这时ctrl+鼠标左键是个很常用的操作,但有时我们发现这个操作实现不了,经常显示找不到源

工具/原料

Eclipse

方法/步骤

1

打开eclipse,新建一个测试类testObject

2

选中Object类名,按住ctrl+鼠标左键,这时会进入到找不到源的页面文件,不要紧,点击连接源代码

3

在此对话框下,选择”External location“。

4

找到路径为安装java JDK时的路径,关键是在此路径下,找到src.zip,就行了。

5

Look,现在就可以查看源文件对此类的说明了吧,是不是很简单~

详解Spring mvc工作原理及源码分析

Model 模型层 (javaBean组件 = 领域模型(javaBean) + 业务层 + 持久层)

View 视图层( html、jsp…)

Controller 控制层(委托模型层进行数据处理)

springmvc是一个web层mvc框架,类似struts2。

springmvc是spring的部分,其实就是spring在原有基础上,又提供了web应用的mvc模块。

实现机制:

struts2是基于过滤器实现的。

springmvc是基于servlet实现的。

运行速度:

因为过滤器底层是servlet,所以springmvc的运行速度会稍微比structs2快。

struts2是多例的

springmvc单例的

参数封装:

struts2参数封装是基于属性进行封装。

springmvc是基于方法封装。颗粒度更细。

⑴ 用户发送请求至DispatcherServlet。

⑵ DispatcherServlet收到请求调用HandlerMapping查询具体的Handler。

⑶ HandlerMapping找到具体的处理器(具体配置的是哪个处理器的实现类),生成处理器对象及处理器拦截器(HandlerExcutorChain包含了Handler以及拦截器集合)返回给DispatcherServlet。

⑷ DispatcherServlet接收到HandlerMapping返回的HandlerExcutorChain后,调用HandlerAdapter请求执行具体的Handler(Controller)。

⑸ HandlerAdapter经过适配调用具体的Handler(Controller即后端控制器)。

⑹ Controller执行完成返回ModelAndView(其中包含逻辑视图和数据)给HandlerAdaptor。

⑺ HandlerAdaptor再将ModelAndView返回给DispatcherServlet。

⑻ DispatcherServlet请求视图解析器ViewReslover解析ModelAndView。

⑼ ViewReslover解析后返回具体View(物理视图)到DispatcherServlet。

⑽ DispatcherServlet请求渲染视图(即将模型数据填充至视图中) 根据View进行渲染视图。

⑾ 将渲染后的视图返回给DispatcherServlet。

⑿ DispatcherServlet将响应结果返回给用户。

(1)前端控制器DispatcherServlet(配置即可)

功能:中央处理器,接收请求,自己不做任何处理,而是将请求发送给其他组件进行处理。DispatcherServlet 是整个流程的控制中心。

(2)处理器映射器HandlerMapping(配置即可)

功能:根据DispatcherServlet发送的url请求路径查找Handler

常见的处理器映射器:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping,

ControllerClassNameHandlerMapping,DefaultAnnotationHandlerMapping(不建议使用)

(3)处理器适配器HandlerAdapter(配置即可)

功能:按照特定规则(HandlerAdapter要求的规则)去执行Handler。

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展多个适配器对更多类型的处理器进行执行。

常见的处理器适配器:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter,AnnotationMethodHandlerAdapter

(4)处理器Handler即Controller(程序猿编写)

功能:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。

(5)视图解析器ViewReslover(配置即可)

功能:进行视图解析,根据逻辑视图名解析成真正的视图。

ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

springmvc框架提供了多种View视图类型,如:jstlView、freemarkerView、pdfView...

(6)视图View(程序猿编写)

View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)

引入相关依赖:spring的基本包、springmvc需要的spring-webmvc,日志相关的slf4j-log4j12,jsp相关的jstl、servlet-api、jsp-api。

因为DispatcherServlet本身就是一个Servlet,所以需要在web.xml配置。

一、使用默认加载springmvc配置文件的方式,必须按照以下规范:

①命名规则:-servlet.xml ==== springmvc-servlet.xml

②路径规则:-servlet.xml必须放在WEB-INF下边

二、如果要不按照默认加载位置,则需要在web.xml中通过标签来指定springmvc配置文件的加载路径,如上图所示。

将自定义的 Controller 处理器配置到 spring 容器中交由 spring 容器来管理,因为这里的 springmvc.xml 配置文件中处理器映射器配置的是 BeanNameUrlHandlerMapping ,根据名字可知这个处理器映射器是根据 bean (自定义Controller) 的 name 属性值url去寻找执行类 Handler(Controller) , 所以bean的name属性值即是要和用户发送的请求路径匹配的 url 。

根据视图解析路径:WEB-INF/jsps/index.jsp

功能:根据bean(自定义Controller)的name属性的url去寻找执行类Controller。

功能:自定义的处理器(Controller)实现了Controller接口时,适配器就会执行Controller的具体方法。

SimpleControllerHandlerAdapter会自动判断自定义的处理器(Controller)是否实现了Controller接口,如果是,它将会自动调用处理器的handleRequest方法。

Controller接口中有一个方法叫handleRequest,也就是处理器方法。

因此,自定义的Controller要想被调用就必须实现Controller接口,重写Controller接口中的处理器方法。

《看透SpringMVC源代码分析与实践》pdf下载在线阅读,求百度网盘云资源

《看透Spring MVC》(韩路彪)电子书网盘下载免费在线阅读

资源链接:

链接:

提取码:e5xd

书名:看透Spring MVC

作者:韩路彪

豆瓣评分:6.8

出版社:机械工业出版社

出版年份:2016-1-1

页数:309

内容简介:

国内资深Web开发专家根据Spring MVC全新技术撰写,基于实际生产环境,从基础知识、源代码和实战3个维度对Spring MVC的结构和实现进行详细讲解

全面介绍Spring MVC的架构、原理、核心概念和操作,通过案例完整呈现Tomcat的实现,系统总结Spring MVC九大组件的处理以及常用的技巧和实践

在大型网站和复杂系统的开发中,Java具有天然的优势,而在Java的Web框架中Spring MVC以其强大的功能以及简单且灵活的用法受到越来越多开发者的青睐。本书不仅详细地分析Spring MVC的结构及其实现细节,而且讲解网站的不同架构及其演变的过程,以及网络底层协议的概念及其实现方法,帮助读者开发更高效的网站。

通过本书,你将:

系统学习网站的各种架构以及每种架构所针对的问题。

深入分析Web底层协议及其实现方法。

系统理解Spring MVC框架,为灵活开发高质量产品打下坚实基础。

深入理解Spring MVC的编程技巧和设计理念,提高综合思考、整体架构的能力。

学习作者自研的源代码分析方法——器用分析法,高效学习程序源代码。

springmvc源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于springMVC源码、springmvc源代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://www.ahzz.com.cn/post/575.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载