springmvc框架的理解(如何深入 spring mvc)

2025-04-15 10:20:02 0

springmvc框架的理解(如何深入 spring mvc)

本文目录

如何深入 spring mvc

SpringMVC是一个轻量级的MVC框架,SpringMVC由于其轻量级的实现以及与Spring框架的无缝整合等诸多优势,近年来在MVC框架中脱颖而出,受到诸多开发人员的青睐,学习SpringMVC势在必行。

Web环境中使用SpringMVC:SpringMVC提供了可插拔式的框架嵌入形式,将SpirngMVC插入或者从Web项目中卸载只需要简单的修改配置文件即可。

  • 配置前端控制器,SpringMVC的入口程序为一个全局的Servlet,该Servlet拦截指定的一组请求交给SpringMVC框架执行后续的处理操作,在Web.xml中配置如下字段。

  •  view plain copy

  • 《!-- SpingMVC的前端控制器 --》  

  • 《servlet》  

  • 《servlet-name》dispatcher《/servlet-name》  

  • 《servlet-class》org.springframework.web.servlet.DispatcherServlet《/servlet-class》  

  • 《!-- 配置SpringMVC的IOC容器 --》  

  • 《init-param》  

  • 《param-name》contextConfigLocation《/param-name》  

  • 《param-value》/WEB-INF/root-context.xml《/param-value》  

  • 《/init-param》  

  • 《load-on-startup》1《/load-on-startup》  

  • 《/servlet》  

  • 《!-- 配置拦截所有的请求 --》  

  • 《servlet-mapping》  

  • 《servlet-name》dispatcher《/servlet-name》  

  • 《url-pattern》/《/url-pattern》  

  • 《/servlet-mapping》《/span》《/span》  

  • 创建SpringMVC IOC容器的配置文件root-context.xml并定义视图解析器,位置/WEB-INF/

  •  view plain copy

  • 《!-- 配置自动扫面的包 --》  

  • 《context:component-scan base-package=“cn.com.xiaofen“ /》  

  • 《!-- 定义视图解析器 --》  

  • 《bean  

  • class=“org.springframework.web.servlet.view.InternalResourceViewResolver“》  

  • 《property name=“prefix“ value=“/WEB-INF/view/“》《/property》  

  • 《property name=“suffix“ value=“.jsp“》《/property》  

  • 《/bean》  

  • 《!-- 《mvc:default-servlet-handler /》《mvc:annotation-driven /》 --》《/span》《/span》  

  • 定义控制器,SpringMVC中定义方法来响应客户端请求,内存开销更小效率更高。

  •  view plain copy

  • @Controller  

  • @RequestMapping(“/T“)  

  • public class T {  

  • @RequestMapping(“/t_1“)  

  • public String t_1() {  

  • System.out.println(“t_1“);  

  • return “index“;  

  • }  

  • }  

  • 定义视图,根据实际的视图解析器完成相关视图的配置,当前配置视图应该在/WEB-INF/view/ 下且文件类型为JSP文件,具体的应该在该目录下新建一个名称为index的jsp文件名称。

  • SpringMVC处理请求的工作流:DispatcherServlet作为SpringMVC框架的入口程序,负责调度SpringMVC框架响应用户的请求,如下图为宏观上SpingMVC处理一次请求大概需要经过以下调度过程。

  • 请求进入由前端控制器(DispatcherServlet )拦截。

  • 前端控制器分析请求将请求委托至具体的控制器来处理。

  • 控制器处理请求返回逻辑视图(Model)。

  • 前端控制器得到逻辑视图对象,调度视图解析器,解析视图模版给用户响应。

  • 返回前端控制器。

  • SpringMVC请求流程(部分源码分析):由DispatcherServlet的doService()方法入手,篇幅关系,下文仅列出核心的代码,下文的代码并并保证时间上的顺序性。

  • DispatcherServlet 调用doDispatch处理请求。

  •  view plain copy

  • try {  

  • /*逻辑视图及上文提到的Model*/  

  • ModelAndView mv = null;  

  • Exception dispatchException = null;  

  • try {  

  • /*文件上传预处理*/  

  • processedRequest = checkMultipart(request);  

  • multipartRequestParsed = (processedRequest != request);  

  • /*确定当前请求的处理者*/  

  • mappedHandler = getHandler(processedRequest);  

  • /*请求资源未发现*/  

  • if (mappedHandler == null || mappedHandler.getHandler() == null) {  

  • noHandlerFound(processedRequest, response);  

  • return;  

  • }  

  • /*确定当前请求的处理者适配器*/  

  • HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());  

  • //...............  

  • /*请求调度前应用的拦截器*/  

  • if (!mappedHandler.applyPreHandle(processedRequest, response)) {  

  • return;  

  • }  

  • /*调用处理程序*/  

  • mv = ha.handle(processedRequest, response, mappedHandler.getHandler());  

  • //......  

  • /*请求调度后应用的拦截器*/  

  • mappedHandler.applyPostHandle(processedRequest, response, mv);  

  • }  

  • catch (Exception ex) {  

  • dispatchException = ex;  

  • }  

  • /*解析视图给用户响应*/  

  • processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);  

  • }  

  • 理解HandlerMapper,一个HandlerMapper代表一个请求到到处理对象的映射,该对象的创建依据是请求响应关系。getHandler方法部分源码分析如下。

  •  view plain copy

  • protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {  

  • 遍历查找满足条件的HandlerMapping  

  • for (HandlerMapping hm : this.handlerMappings) {  

  • if (logger.isTraceEnabled()) {  

  • logger.trace(  

  • “Testing handler map  in DispatcherServlet with name ’“ + getServletName() + “’“);  

  • }  

  • HandlerExecutionChain handler = hm.getHandler(request);  

  • if (handler != null) {  

  • 存在  

  • return handler;  

  • }  

  • }  

  • 不存在  

  • return null;  

  • }  

  • 理解HandlerAapter,SpringMVC 中通过HandlerAdapter的handler方法来调用实际的处理请求的函数。getHandlerAapter 部分源码如下。

  •  view plain copy

  • protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {  

  • for (HandlerAdapter ha : this.handlerAdapters) {  

  • if (logger.isTraceEnabled()) {  

  • logger.trace(“Testing handler adapter “);  

  • }  

  • 是否支持处理当前的HandlerMapper  

  • if (ha.supports(handler)) {  

  • return ha;  

  • }  

  • }  

  • 当前的HandlerMapper不能被处理报异常  

  • throw new ServletException(“No adapter for handler [“ + handler +  

  • “]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler“);  

  • }  

  • Model到视图,SpringMVC 中ModelAndView保存了逻辑视图与真实视图的关系,确定了当前请求为用户返回的View,processDispatchResult 源码分析如下。

  •  view plain copy

  • private void processDispatchResult(HttpServletRequest request, HttpServletResponse response,  

  • HandlerExecutionChain mappedHandler, ModelAndView mv, Exception exception) throws Exception {  

  • boolean errorView = false;  

  • /*处理异常信息*/  

  • if (exception != null) {  

  • if (exception instanceof ModelAndViewDefiningException) {  

  • logger.debug(“ModelAndViewDefiningException encountered“, exception);  

  • mv = ((ModelAndViewDefiningException) exception).getModelAndView();  

  • }  

  • else {  

  • Object handler = (mappedHandler != null ? mappedHandler.getHandler() : null);  

  • mv = processHandlerException(request, response, handler, exception);  

  • errorView = (mv != null);  

  • }  

  • }  

  • /*渲染视图,返回响应*/  

  • if (mv != null && !mv.wasCleared()) {  

  • render(mv, request, response);  

  • if (errorView) {  

  • WebUtils.clearErrorRequestAttributes(request);  

  • }  

  • }  

  • else {  

  • if (logger.isDebugEnabled()) {  

  • logger.debug(“Null ModelAndView returned to DispatcherServlet with name ’“ + getServletName() +  

  • “’: assuming HandlerAdapter completed request handling“);  

  • }  

  • }  

  • }  

spring-mvc是什么框架

一、IoC(Inversionofcontrol):控制反转1、IoC:概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean二、AOP(Aspect-OrientedProgramming):面向方面编程1、代理的两种方式:静态代理:针对每个具体类分别编写代理类;针对一个接口编写一个代理类;动态代理:针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类2、AOP的主要原理:动态代理Spring工作原理Spring已经用过一段时间了,感觉Spring是个很不错的框架。内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xmlSpring的配置文件来动态的创建对象,和调用对象里的方法的。Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置内部通过反射去动态的组装对象)要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式)Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了也就基本上掌握了Spring.

springmvc和其他mvc框架有什么区别

spring 是是一个开源框架,是为了解决企业应用程序开发,功能如下◆目的:解决企业应用开发的复杂性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能◆范围:任何Java应用简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。Spring的两大核心AOP与IOC,可以单独用于任何应用,包括与Struts等MVC框架与Hibernate等ORM框架的集成,目前很多公司所谓的轻量级开发就是用 Spring + Struts(2)+Hibernate。 Spring MVC就是一个MVC框架,个人觉得Spring MVC annotation式的开发比Struts2方便,可以直接代替上面的Struts(当然Struts的做为一个非常成熟的MVC,功能上感觉还是比Spring强一点,不过Spring MVC已经足够用了)。当然spring mvc的执行效率比struts高,是因为struts的值栈影响效率spring mvc类似于struts的一个MVC开框架,其实都是属于spring,spring mvc需要有spring的架包作为支撑才能跑起来如果有人问你什么事控制反转(spring的核心面试常问道):你就回答,本来程序是由我们new 出来的嘛,后来交给程序控制进行new出来了嘛,这就是控制反转嘛,打了那么多手都麻了,看在我那么辛苦的份上给分吧

springmvc框架的理解(如何深入 spring mvc)

本文编辑:admin

更多文章:


论坛源码完整版(论坛源码怎么装)

论坛源码完整版(论坛源码怎么装)

本文目录论坛源码怎么装求C#.NET的bbs论坛源代码论坛源码怎么装1:将你的域名用A记录解析到空间IP(本地调试不用); 2:下载论坛源码,比如dz pw 程序源码,并将源码用FTP软件上传到空间根目录;3:运行你的域名进行安装(安装过程

2025年3月7日 00:20

css外部样式表代码(调用.css的外部样式文件)

css外部样式表代码(调用.css的外部样式文件)

本文目录调用.css的外部样式文件css中什么是外部样式表CSS样式代码有没有简单的方法记住调用.css的外部样式文件CSS是一门指定文档该如何呈现给用户的语言。一、CSS帮助您将文档信息的内容和如何展现它的细节相分离创建html文档创建样

2025年4月7日 22:00

加密解密工具(你们会用加密软件吗)

加密解密工具(你们会用加密软件吗)

本文目录你们会用加密软件吗公司文件必须加密,请问文件夹加密工具哪个好用php加密文件解密php 方面大家一般用哪些工具进行代码加密zend加密PHP后可以解密吗php怎样用Zend Guard加密你们会用加密软件吗肯定要用的,尤其是企业,因

2025年2月19日 18:40

nextsibling和nextelementsibling(javascript获取dom的下一个节点方法)

nextsibling和nextelementsibling(javascript获取dom的下一个节点方法)

本文目录javascript获取dom的下一个节点方法javascript用nextSibling获取节点为什么 在火狐走的这就不往下走了呢 mark.nextSibling.style.display = ““; if(type ===

2025年2月25日 20:50

后台ui设计(后台ui设计注意什么)

后台ui设计(后台ui设计注意什么)

本文目录后台ui设计注意什么ui设计师是干嘛的UI设计这个专业好吗学UI设计的方法UI设计怎么设计后台界面显得高大上后台ui设计注意什么设计师在进行UI设计时,总有自己的想法与设计方案,但是,无论是多么创意的设计,在基本的几个方面,还是要遵

2025年2月10日 10:40

最小的中文linux(有图像界面的linux系统,最小的是哪个版本(支持中文的),有多大)

最小的中文linux(有图像界面的linux系统,最小的是哪个版本(支持中文的),有多大)

本文目录有图像界面的linux系统,最小的是哪个版本(支持中文的),有多大体积小的linux带图像界面的linux系统,最小的是哪个版本(支持中文的),有多大最小巧且支持中文的LINUX系统是哪个我要个很轻量的中文LINUX桌面OS,安装后

2025年3月11日 23:40

specialise(specialise是什么意思)

specialise(specialise是什么意思)

本文目录specialise是什么意思specialise,specialist有什么区别英语语法:有specialise in sth那有没有specialise sth捏望高手帮忙Waitingspecialist是什么意思specia

2025年3月29日 14:40

有哪些比较好的学习编程的网站?国外学编程网站有哪些

有哪些比较好的学习编程的网站?国外学编程网站有哪些

本文目录有哪些比较好的学习编程的网站国外学编程网站有哪些什么是scratch编程软件这个软件有什么功能和作品请问:哪个少儿编程培训机构好一点国内少儿编程网课教育有哪些奥数停赛了,有家长建议我们家孩子去学编程,请问各位,少儿编程现在值得学么有

2025年4月9日 19:10

数据中台特征?如何区别数据库、数据中台、数据湖

数据中台特征?如何区别数据库、数据中台、数据湖

本文目录数据中台特征如何区别数据库、数据中台、数据湖数据湖是什么东东 数据湖的四个最佳实践数据湖和数据仓库的区别是什么数据湖的历史数据保存如何搭建数据湖架构什么是数据湖泊数据中台特征数据中台是中台的核心平台之一,简单来说就是数据仓库,是将传

2025年3月18日 13:00

prosperity的动词(“flourish”与 “prosperity”有什么区别)

prosperity的动词(“flourish”与 “prosperity”有什么区别)

本文目录“flourish”与 “prosperity”有什么区别英语share the prosperity怎么翻译sperity是什么意思社会主义核心价值观用英语怎么说flourish与 prosperity有什么区别关于定语从句 A

2025年3月14日 01:00

div css居中(Div 与 CSS 如何实现上下居中)

div css居中(Div 与 CSS 如何实现上下居中)

本文目录Div 与 CSS 如何实现上下居中Div+Css如何实现整体居中Div 与 CSS 如何实现上下居中方法1:.parent {          width:800px;          height:500px;       

2025年3月7日 10:40

java数组降序(java数组如何排序)

java数组降序(java数组如何排序)

本文目录java数组如何排序Java中对数组升序排列用Arrays.sort( )方法,那降序排列用什么方法java编程将一组数组元素按照由大到小降序排列.java数组如何排序如果是升序可以使用 Arrays.sort(数组名)(注意:要使

2025年3月13日 04:40

del键是什么意思(计算器上的“DEL”是什么意思)

del键是什么意思(计算器上的“DEL”是什么意思)

本文目录计算器上的“DEL”是什么意思键盘列表中DEL键在哪里键盘上“DEL”键是什么功能电脑的DEL按键在哪个位置del键的功能是什么平板键盘计算器上的“DEL”是什么意思删除的意思详细解释:1,DEL是删除键,是delete的简写,如果

2025年4月3日 14:20

product怎么读(产品英文怎么读)

product怎么读(产品英文怎么读)

本文目录产品英文怎么读product是什么意思产品英文怎么读product 英 复数:productsproduct是什么意思1、(经加工可出售的)作品,产品       dairy products 奶制品2、(经化学、自然

2025年2月18日 02:40

alphago(和柯洁对战的AlphaGO和之前的AlphaGO有什么区别)

alphago(和柯洁对战的AlphaGO和之前的AlphaGO有什么区别)

本文目录和柯洁对战的AlphaGO和之前的AlphaGO有什么区别AlphaGo的棋路对我们目前的围棋理论有什么启示如何评价alphago自我对弈的50盘棋鼎盛时期的吴清源会有希望战胜AlphaGo吗和柯洁对战的AlphaGO和之前的Alp

2025年3月24日 07:20

ip协议是什么之间通信的协议(IP协议是什么协议)

ip协议是什么之间通信的协议(IP协议是什么协议)

本文目录IP协议是什么协议什么是IP通信协议tcp是传输控制协议ip协议是什么IP协议是什么之间的通信协议Ip协议是一个什么的网络协议IP协议是什么协议IP是英文Internet Protocol(网络之间互连的协议)的缩写,中文简称为“网

2025年3月2日 08:50

网页图片特效(用div怎样制作网页特效)

网页图片特效(用div怎样制作网页特效)

本文目录用div怎样制作网页特效如何快速制作网页特效网页效果图怎么制作现在网页中出现图片的灯光效果,淡入淡出,滤镜效果,是通过什么实现的制作网页怎样做图片切换效果最好详细代码!用div怎样制作网页特效启动dreamweaver cs5,执行

2025年4月6日 05:40

字节是什么意思(字节什么意思)

字节是什么意思(字节什么意思)

本文目录字节什么意思计算机里的字节是什么意思一个字节是什么意思byte是什么意思字节什么意思字节(Byte):字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间

2025年2月16日 01:50

null啥意思医学(体检单上印象null是什么意思)

null啥意思医学(体检单上印象null是什么意思)

本文目录体检单上印象null是什么意思null翻译中文null中文是什么意思体检单上印象null是什么意思Null,读音。本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。中文名Null读音/nʌl/本意空的形容词

2025年4月5日 05:50

structure怎么记忆(Structure是什么意思怎么读)

structure怎么记忆(Structure是什么意思怎么读)

本文目录Structure是什么意思怎么读自考英语词汇记忆的规律如何把握Structure是什么意思怎么读structureKK: DJ: n.1. 结构;构造;组织We visited the museum, a steel and gl

2025年4月3日 00:00

近期文章

本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:20
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:7
标签列表

热门搜索