我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring和SpringMvc详细讲解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring和SpringMvc详细讲解

 

🏆今日学习目标:

🍀Spring和SpringMvc详细讲解
创作者:林在闪闪发光
⏰预计时间:30分钟
🎉个人主页:林在闪闪发光的个人主页

 🍁林在闪闪发光的个人社区,欢迎你的加入: 林在闪闪发光的社区

 springMvc

目录

1. 什么是Spring ?

2. 为什么使用Spring ?

2. 什么是IoC,为什使用IoC ?

3. 什么是AOP,为什么使用AOP ?

4. 什么是Spring的事务管理?

5. Spring框架支持以下五种bean的作用域:

6. 什么是Spring的MVC框架?

7. 如何启用注解:

8. Spring MVC的请求流程:

9. web.xml的配置 

10. 注解的处理器映射器和适配器

11. spring 与 mybatis整合过程

13. 视图解析器配置前缀和后缀:  

14. sqlMapConfig.xml,mybatis自己的配置文件。 

 15. 配置数据源:

16. 事务控制(applicationContext-transaction.xml),在applicationContext-transaction.xml中使用spring声明式事务控制方法。

 17. 加载spring配置

22. Spring MVC 和 Struts2 对比

23. 乱码处理

24. 集合类型绑定

27. 异常处理

30. 拦截器:


1. 什么是Spring ?

Spring是分层的 Java SE/EE应用full- stack轻量级开源框架,以IoC(Inversion of Control:反转控制)和AOP( Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC和持久层 Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE企业应用开源框架。

2. 为什么使用Spring ?

    1). 方便解耦,简化开发

         通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。

    2). AOP编程的支持

       通过Spring提供的AOP功能,方便进行面向切面的编程,如性能监测、事务管理、日志记录等。

    3). 声明式事务的支持

    4). 方便集成各种优秀框架

    5). 降低Java EE API的使用难度

         如对JDBC,JavaMail,远程调用等提供了简便封装

2. 什么是IoC,为什使用IoC ?

    IoC全称Iversion of Controller,控制反转。

    这概念是说你不用创建对象,而只需要描述它如何被创建你不在代码里直接组装你的组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。

    它能指导我们如何设计出松耦合、更优良的程序。

3. 什么是AOP,为什么使用AOP ?

    AOP全称:Aspect-Oriented Programming,面向切面编程。

     AOP,面向切面编程,就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中,比如事务管理权限控制日志记录、性能统计等。

    AOP并没有帮助我们解决任何新的问题,它只是提供了一种更好的办法,能够用更少的工作量来解决现有的一些问题,使得系统更加健壮,可维护性更好。

4. 什么是Spring的事务管理?

    事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。

    开发中为了避免这种情况一般都会进行事务管理。

    Spring的声明式事务通常是指在配置文件中对事务进行配置声明,其中包括了很多声明属性,它是通过Spring Proxy帮你做代理,自己不用额外的写代码,只要在Spring配置文件中声明即可;通常用在数据库的操作里面;

    编程式事务就是指通过硬编码的方式做事务处理,这种处理方式需要写代码,事务中的逻辑可以自己定制;可以是数据库的东东,也可以是其他的操作。

    Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理可以通过Spring的注入来完成此功能。

5. Spring框架支持以下五种bean的作用域:

    singleton : 默认值,bean在每个Spring ioc 容器中只有一个实例。

    prototype:一个bean的定义可以有多个实例。

    request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。 

    session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

    global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

6. 什么是Spring的MVC框架?

    Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。

    spring mvc是一个基于mvc的web框架。spring mvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。

7. 如何启用注解:

   

    如果使用  则上面内容可以省略 

8. Spring MVC的请求流程:

    第一步:发起请求到前端控制器(DispatcherServlet)

    第二步:前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找

    第三步:处理器映射器HandlerMapping向前端控制器返回Handler

    第四步:前端控制器调用处理器适配器去执行Handler

    第五步:处理器适配器去执行Handler

    第六步:Handler执行完成给适配器返回ModelAndView

    第七步:处理器适配器向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一个底层对象,包括 Model和view

    第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)

    第九步:视图解析器向前端控制器返回View

    第十步:前端控制器进行视图渲染。视图渲染将模型数据(在ModelAndView对象中)填充到request域

    第十一步:前端控制器向用户响应结果

9. web.xml的配置 

10. 注解的处理器映射器和适配器

      spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。

      在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

      使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置

11. spring 与 mybatis整合过程

      第一步:整合dao层

         mybatis和spring整合,通过spring管理mapper接口。

         使用mapper的扫描器自动扫描mapper接口在spring中进行注册。

      第二步:整合service层

         通过spring管理 service接口。

         使用配置方式将service接口配置在spring配置文件中。

         实现事务控制。

      第三步:整合springmvc

         由于springmvc是spring的模块,不需要整合。

      主要配置有:

      1). mybatis配置文件sqlMapConfig.xml配置别名自动扫描(实体类)

      2). mapper扫描器(接口,数据库访问接口)

      3). 数据库连接池配置

      4). 声明式事务配置

      5). 启用注解扫描:

      6). 配置注解映射器和适配器: 

      7). 视图解析器:

      8). 配置控制类: DispatcherServlet前端控制器

      9). 配置spring配置文件加载类:ClassLoadListener

12. 前端控制器从上边的文件中加载处理映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,使用默认加载的 DispatcherSerlvet.properties。 

13. 视图解析器配置前缀和后缀:  

 

 

14. sqlMapConfig.xml,mybatis自己的配置文件。 

 

 15. 配置数据源:

 

16. 事务控制(applicationContext-transaction.xml),在applicationContext-transaction.xml中使用spring声明式事务控制方法。

 17. 加载spring配置

 

 

18. 静态资源访问不被拦截:

      

     

     

19. @RequestMapping的作用

      1). url映射

      2). 窄化请求映射

      3). 限制http请求方法

20. controller方法的返回值

      20.1 返回ModelAndView 

              需要方法结束时,定义ModelAndView,将model和view分别进行设置。 

     20.2 返回string

               如果controller方法返回string,

               1). 表示返回逻辑视图名。真正视图(jsp路径)=前缀+逻辑视图名+后缀

               2). redirect重定向:返回字符串格式为:"redirect:queryItem.action"

               3). forward页面转发:返回字符串格式为:“forward:queryItem.action”

      20.3 返回void

               在controller方法形参上可以定义request和response,使用request或response指定响应结果:

               1). 使用request转向页面,如下:request.getRequestDispatcher("页面路径").forward(request, response);

               2). 也可以通过response页面重定向:response.sendRedirect("url")

               3). 也可以通过response指定响应结果,例如响应json数据如下:

                    response.setCharacterEncoding("utf-8");

                    response.setContentType("application/json;charset=utf-8");

                    response.getWriter().write("json串");

21. 参数绑定:

      21.1 默认支持的类型

               直接在controller方法形参上定义下边类型的对象,就可以使用这些对象。在参数绑定过程中,如果遇到下边类型直接进行绑定。

               1). HttpServletRequest:通过request对象获取请求信息

               2). HttpServletResponse:通过response处理响应信息

               3). HttpSession:通过session对象得到session中存放的对象

               4). Model/ModelMap:model是一个接口,modelMap是一个接口实现 。作用:将model数据填充到request域。

      21.2 简单类型

              通过@RequestParam对简单类型的参数进行绑定。

              如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。

              如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。

              通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,会报错。

      21.3 pojo绑定

              页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo。(usename,age;不需要user.username,user.age)

      21.4 自定义参数绑定实现日期类型绑定

              对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。将请求日期数据串转成 日期类型,要转换的日期类型和pojo中日期属性的类型保持一致。

22. Spring MVC 和 Struts2 对比

      1). Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC 就容易实现restful url

      2). 由上边原因,SpringMVC的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量,而Struts2搞的就比较乱,虽然方法

           之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个Action对象对应一个request上下文。

      3). 由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。

      4). SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己

           写代码集成进去,使用起来也相对不方便。

      5). springmvc面向方法开发的(更接近service接口的开发方式),struts2面向类开发。

      6). springmvc可以单例开发,struts2只能是多例开发。

23. 乱码处理

      1). post乱码

           在web.xml添加post乱码filter:CharacterEncodingFilter

      2). 对于get请求中文参数出现乱码解决方法有两个:

           a. 修改tomcat配置文件添加编码与工程编码一致,如下:

               

           b. 对参数进行重新编码:

               String userName = new  String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

               ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码

24. 集合类型绑定

      1). 数组绑定:

           controller方法参数使用:(Integer[] itemId)

           页面统一使用:itemId 作为name

      2). list绑定:

           pojo属性名为:itemsList

           页面:itemsList[index].属性名

      3). map 绑定:

           pojo属性名为:Map itemInfo = new HashMap(); 

           页面: 姓名:"text"name="itemInfo['name']"/>

25. spring 校验           

      1). 项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。

      2). springmvc使用hibernate的校验框架validation(和hibernate没有任何关系)。

           校验思路:页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。

26. 数据回显 

      1). @ModelAttribute还可以将方法的返回值传到页面:在方法上加注解@ModelAttribute

      2). 使用最简单方法使用model,可以不用@ModelAttribute:model.addAttribute("id", id);

      3). springmvc默认对pojo数据进行回显。pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)

      4). public String testParam(PrintWriter out, @RequestParam("username") String username) { //out直接输出

27. 异常处理

      springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。

      系统遇到异常,在程序中手动抛出,dao抛给service、service给controller、controller抛给前端控制器,前端控制器调用全局异常处理器。

 

28. 上传图片

      1). 在页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析。

      2). 在springmvc.xml中配置multipart类型解析器。

  3). 方法中使用:MultipartFile attach (单个文件上传) 或者  MultipartFile[] attachs (多个文件上传)

29. Json处理

       1). 加载json转换的jar包:springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用下边的包进行json转)

       2). 配置json转换器。在注解适配器RequestMappingHandlerAdapter中加入messageConverters。如果使用 则会自动加入。

       3). ajax

 

    4). Controller (ResponseBody、RequestBody)

 

  5). 注意ajax中contentType如果不设置为json类型,则传的参数为key/value类型。上面设置后,传的是json类型。 

30. 拦截器:

      1). 定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。

            a. preHandle :进入 Handler方法之前执行,用于身份认证、身份授权,比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行

            b. postHandle:进入Handler方法之后,返回modelAndView之前执行,应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图

            c. afterCompletion:执行Handler完成执行此方法,应用场景:统一异常处理,统一日志处理

      2). 拦截器配置:

           a. 针对HandlerMapping配置(不推荐):springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler

               最终使用该 拦截器。  (一般不推荐使用)

           b. 类似全局的拦截器:springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中

 

 

 

来源地址:https://blog.csdn.net/weixin_68829137/article/details/128781482

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring和SpringMvc详细讲解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring事务管理详细讲解

事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就 回退到事务开始未进行操作的状态。事务管理是Spring框架中最为常用的功能之一,我们在使用Spring Boot开发应用时,大部分情况下也都需要使用事务
2022-11-13

Spring超详细讲解注解开发

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势。本文将通过示例为大家详细讲讲Spring如何实现注解开发,感兴趣的可以学习一下
2022-11-13

Spring @Conditional注解示例详细讲解

@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean,这篇文章主要介绍了Spring @Conditional注解示例详细讲解,需要的朋友可以参考下
2022-11-13

Spring Service功能作用详细讲解

service层测试较简单,目前大多数测试主要是针对public方法进行的。依据测试方法划分,可以分为两种:基于mock的隔离测试和基于dbunit的普通测试
2022-12-08

Spring超详细讲解IOC与解耦合

IoC就是比方说有一个类,我们想要调用类里面的方法(不是静态方法),就要创建该类的对象,使用对象调用方法来实现。但对于Spring来说,Spring创建对象的过程,不是在代码里面实现的,而是交给Spring来进行配置实现的
2022-11-13

Spring集成Mybatis过程详细讲解

mybatis-plus是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生,下面这篇文章主要给大家介绍了关于SpringBoot整合Mybatis-plus案例及用法实例的相关资料,需要的朋友可以参考下
2023-03-19

Spring IOC容器使用详细讲解

IOC-Inversion of Control,即控制反转。它不是什么技术,而是一种设计思想。这篇文章将为大家介绍一下Spring控制反转IOC的原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-12-21

Spring@ComponentScan注解使用案例详细讲解

@ComponentScan注解的作用可以简述为:将项目中所有被@Component注解直接或者间接标记的类---->组装成BeanDefinition---->然后以key=beanName,value=BeanDefinition的形式存储,为后续生成bean对象做准备
2023-03-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录