一、什么是springmvc?

      我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交道,而前面刚写的mybatis跟hibernate一样,与数据库打交道在dao层的另一个框架,而今天所要讲解的springmvc是在web层的另一个框架。

      springmvc全名是spring web mvc,springmvc是spring的一个模块,并且看名字即可知道,springmvc是一个基于mvc设计模式的前端web框架。

      mvc:m(model模型)、v(view视图)、c(control控制)

      mvc的运用概念图

          

二、springmvc的入门程序

      通过这个来快速了解springmvc大概的开发流程,其实通过上面的mvc分析图,差不多就知道了如何开发了。重点就是三步。

        1、在web.xml中配置一个serlvet,用来控制,

        2、编写一个handler(controller)类,用来做业务处理。

        3、编写jsp或者别的视图,用来展示数据

      思路已经有了,那么就开始编写把。

      问题描述:使用springmvc来完成前端请求的处理

      2.1、创建web工程

          

      2.2、添加jar包

          

      2.3、编程步骤

        前面三步只是通过mvc图的分析出最关键的三步,其中实现的时候步骤应该更多,比如spring的配置文件,但关键的重点还是那三个。

        1、创建po类

        2、配置前端控制器,DispatcherServlet

        3、创建springmvc的配置文件

        4、开发handler(controller)

        5、在springmvc的配置文件中(取名为springmvc.xml)配置handler

        6、开发jsp或者别的视图

        8、部署测试

      2.4、创建po类

          

            

      2.5、配置前端控制器

          

 前端控制器的配置

      2.6、创建springmvc的配置文件

        在config目录下,创建springmvc.xml文件

           

 springmvc.xml

      2.7、开发handler(controller)类,也就是处理业务逻辑的类,

      2.8、在springmvc.xml中配置handler类,也就是spring帮我们创建该类的实例,所以需要配置。

        注意:2.7和2.8一起讲解,因为开发handler类讲解三种方式,所以配置也连在一起讲解,以免分开来,看不清楚

        Springmvc开发handler有多种方式,我们只讲解三种:实现HttpRequestHandler接口、实现Controller接口、使用注解开发(掌握)               

        实现HttpRequestHandler接口

          

 实现HttpRequestHandler接口

        springmvc.xml中配置该处理器

          通过localhost:8080/项目名/queryItems01.do 就能够访问到DispatcherSerlvet,该servlet就会帮我们找到你对应的处理器(依据就是通过下面的这行配置,queryItems01对应了一个处理器的class,也就能够找到)

            

 配置实现HttpRequestHander接口的处理器

        实现Controller接口        

          

 实现Controller接口

        配置该handler类

          

 实现Controller接口的配置

        使用注解开发

          

        注解的配置,就是配置一个扫描器,扫描使用了注解的地方

          

 注解的配置,扫描器

            

      2.9、开发jsp

        在WEB-INF/jsp/items/下创建jsp:itemsList.jsp

          

 itemList.jsp

      2.10、部署测试

        测试上面三种采用不同的方式编写的处理类。能够成功访问即成功

三、springmvc框架原理图分析

      前面了解了springmvc的mvc设计模式的运用并且还编写了一个简单的实例,关键点就几个,配置DispatcherServlet,编写处理类以及配置,jsp,就mvc的三个关键点,但是这也是粗略的使用一下springmvc,并不知道其中运行的原理,比如

        springmvc是如何找到处理器的?

        springmvc如何执行处理器的?

        springmvc如何查找到视图对象的?

      看图即可

          

        1、发起请求到前端控制器(DispatcherServlet),该控制器中就会过滤出你哪些请求可以访问该servlet哪些不可以,就是url-pattern的作用,并且会加载springmvc.xml配置文件

        2、前端控制器会找到HandlerMapping(处理器映射器),通过HandlerMapping完成url到controller映射的组件,通俗点讲,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,实际上是用一个map集合来保存这种映射关系,map<url,handler>; 这样,就将所有的这种映射关系都记录保存了下来

        3、通过HandlerMapping有了这些映射关系,并且找到了url对应的处理器,HandlerMapping就会将其处理器(图中红色标明的handler)返回,在其返回之前,在加上很多的拦截器,其作用后面

进行讲解,这里知道在返回的处理器前会有很多的拦截器即可。

        4、DispatcherServlet拿到了handler之后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并且执行处理器。

          这里会有人会有疑惑,为什么需要处理器适配器,我们都获得了处理类了,直接调用不就行了吗?

            不行,因为我们只知道处理类在哪里,并不知道执行处理类中的哪个方法,其实也就是不知道处理类是通过哪种方式创建出来的,实现HttpRequestHandler?还是注解方式,或者是           其他方式,我们不知道,所以需要HandlerAdapter来帮我们确认调用哪个方法。

        5、执行处理器

        6、处理器会返回一个ModelAndView对象给HandlerAdapter

        7、通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)

        8、前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象

        9、返回视图对象到前端控制器。

        10、视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。

        11、通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回即可。

      通过上面的图和分析过程,就能够完美解答上面的三个问题了。理解了图,那么springmvc就会用了。很简单把,跟struts2差不多,记住原理图即可。

四、组件分析(默认组件和手动配置组件)

      通过图可以看到

        前端控制器:对其他组件进行解耦,这样就增加了组件的可扩展性 无需开发直接配置      

        处理器映射器:无需开发,直接用,作用见上面

        处理器适配器:无需开发,

        处理器:需要开发,方式很多

        视图解析器:无需开发

        视图:需要开发

      就这么点东西,真正需要写的就两个(处理器+视图)和一个配置(前端控制器),就是mvc中的三个重点,在第二小节中就是这样编写的,第三小结就是解释其中的原理。

      处理器映射器、处理器适配器、视图解析器这三个是默认配置的,在下面位置中可以查看

          

      DispatchServlet.properties

                 

      上面是使用默认的,如果没有配置这几个组件,那么就使用默认的,我们也可以手动指定。

      4.1、非注解的处理器映射器和处理器适配器  [看看即可]

        BeanNameUrlHandlerMapping:映射器    

          在springmvc配置文件中,配置BeanNameUrlHandlerMapping

                  

          他的作用是找到在springmvc.xml中配置的url和处理器的bean 

            

        HttpRequestHandlerAdapter:适配执行实现了HttpRequestHandler接口的处理类的方法

          在springmvc配置文件中,配置HttpRequestHandlerAdapter 

            

          它的作用就是适配实现了HttpRequestHandler接口的处理类,也就是找到该处理类对应的方法

            如何适配,就是需要看源码了,可以百度一下讲解该适配器的源码。

        SimpleControllerHandlerAdapter:适配执行实现了Controller接口的处理类的方法

          在springmvc配置文件中,配置SimpleControllerHandlerAdapter

            

      总结:这就是非注解的组件的配置方式,很简单,注意

         处理器映射器和处理器适配器可以配置多个

         处理器映射器和处理器适配器可以混用

    

      

      4.2、配置注解的处理器映射器和适配器(掌握)

        org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping 是在spring3.1之前使用的注解映射器        

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

        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter 是在spring3.1之前使用的注解适配器

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

        注意:

        1、注解方式的映射器和适配器在3.1版本前后是不一样的,使用3.1之后的

        2、注解方式的处理器映射器和处理器适配器必须配对使用,不能与非注解的处理器映射器和适配器混用(用了注解的就不能在配置非注解的,二选一)

        配置方式有两种:

          1、使用bean标签配置

            

          2、使用mvc标签(推荐)

            

      4.3、视图解析器

        4.3.1、JSP视图解析器(默认的就是使用该解析器)

            

          其中两个配置的意思是:prefix:前缀    suffix:后缀  。 配置之后在指定视图时,就不用写这前缀和后缀了,直接写关键代码即可。看下图

            

          虽然指定视图只写 items/itemsList  但是会帮我们加上我们配置的前缀和后缀,也就是变为了 /WEB-INF/jsp/items/itemsList.jsp

        4.3.2 Freemarker视图解析器

            org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver 

            等什么时候使用到了在学习把。

五、requestMapping注解的三种功能

      requestMapping有三种功能:映射请求url、窄化请求、限制请求方法

      5.1、映射请求url

        也就是写在方法上,上面我们已经用过了这种功能,这里详细讲解一下

        @RequestMapping(value="/item,/user")或@RequestMapping("/item”) value是数组,可以将多个url映射到同一个方法上,用逗号隔开即可。如果value中只有一个属性,则可以省去value,就像这样:@RequestMapping(value="/item ")写成@RequestMapping("/item”)

      5.2、窄化请求

        在class上面加上requestmapping注解,可以对url进行分类管理,这样也实现了请求的窄化 

          加在class上       

            

          加在方法上

             

          访问路径为:http://localhost:8080/xxx/items/queryItems.do

      5.3、限制请求方法

        限制访问该方法必须是get或者post方式,相当于对请求进行过滤。

          限定GET方法,也就是只能允许get请求方式过来的请求访问

            @RequestMapping(method = RequestMethod.GET)

            

            如果post请求方式的过来访问,则报错 HTTP Status 405 - Request method 'POST' not supported

              

          限定post方法。

            @RequestMapping(method = RequestMethod.POST)

            

            如果get请求方式过来访问,报错  HTTP Status 405 - Request method 'GET' not supported

          get、post都可以

            @RequestMapping(method={RequestMethod.GET,RequestMethod.POST})

            

          

六、controller类中的方法返回值问题

      同样有三种:ModelAndView对象、void、String

      6.1、返回ModelAndView对象

        controller方法中定义ModelAndView对象并返回,对象中可添加model数据、指定view。 然后通过视图解析器对其进行解析。上面用的就是这个。不用在过多的解释了

      6.2、void

        如果返回值为void的时候,可以在controller方法形参上定义request和response,使用request或response指定响应结果(这里在形参上定义request和response,还没讲到。但是可以这样用,相当于controller方法上默认有这两个形参。加上去就可以使用)

        使用request转向页面,如下

          request.getRequestDispatcher("页面路径").forward(request, response)

        通过response页面重定向

          response.sendRedirect("url")

        可以通过response指定响应结果,例如响应json数据如下

          response.setCharacterEncoding("utf-8");

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

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

      6.3、String

        使用一:返回逻辑视图

          

        解释:形参中有Model对象,该对象也是默认形参,只要声明了,就可以拿过来用,该Model对象的作用就是添加属性到request作用域中的,就跟ModelAndView对象添加值到request作用域中一样,只是model对象不能够指定视图。正好其model就是modelAndView的一半,很好理解。 其次,因为没有采用modelAndView对象,所以不能够指定视图,但是可以直接返回视图地址即可,效果是跟使用modelAndView对象一样的。

        

        使用二:请求转发

          

文章转载至:https://www.cnblogs.com/shitaotao/p/7653286.html

springmvc框架原理分析和简单入门程序的更多相关文章

  1. springmvc(一) springmvc框架原理分析和简单入门程序

    springmvc这个框架真的非常简单,感觉比struts2还更简单,好好沉淀下来学习~ --WH 一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解 ...

  2. SpringMVC学习(一)———— springmvc框架原理分析和简单入门程序

    一.什么是springmvc? 我们知道三层架构的思想,并且如果你知道ssh的话,就会更加透彻的理解这个思想,struts2在web层,spring在中间控制,hibernate在dao层与数据库打交 ...

  3. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  4. SpringMVC系列(一)SpringMVC概述和搭建SpringMVC的第一个helloWord入门程序

    一.SpringMVC 概述 • Spring为展现层提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架之一 • Spring3.0 后全面超越 Struts2,成为最优秀的 MVC ...

  5. SpringMVC学习笔记之---简单入门

    SpringMVC简单入门 (一)什么是MVC设计模式 (1)model:模型数据,业务逻辑 (3)view:呈现模型,与用户进行交互 (3)controller:负责接收并处理请求,响应客户端 (二 ...

  6. MyBatis - 介绍、简单入门程序

    JDBC编程中的问题     1. 将SQL语句硬编码到Java代码,不利于系统维护.         设想如何解决:将SQL单独抽取出来,在配置文件(xml方式.properties文件)进行配置. ...

  7. springmvc框架原理分析

    第一步:用户发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping查找Handler,可以根据xml配置,注解进行查找 第三步:处理器映射器Ha ...

  8. Java爬虫——Gecco简单入门程序(根据下一页一直爬数据)

    为了完成作业,所以学习了一下爬虫Gecco,这个爬虫集合了以往所有的爬虫的特点,但是官方教程中关于Gecco的教程介绍的过于简单,本篇博客是根据原博客的地址修改的,原博客中只有程序的截图,而没有给出一 ...

  9. DirectShow简单入门程序

    1.首先确认已安装过相关工具及配置环境,然后打开vs2010,新建一对话框应用程序 取名为Player_test1,然后打开菜单->项目->属性-> 添加strmmiids.lib库 ...

随机推荐

  1. 【LDAP】LDAP注入漏洞与防御

    0x01 前言 前两天爆了一个LDAP漏洞,据说存在了8年现在才被发现,感概一下,不知这8年来有多少站被搞了... 想着复现这个漏洞,就先复习一下LDAP注入的相关知识吧,差了很多资料,记一下笔记. ...

  2. Docker 容器的隔离性

    Docker 容器的隔离性 就是 使用Linux namespace 来隔离运行环境和成 cgroup 限制容器使用的资源.  namespace 可以顾名思义 命名空间:所以可以理解为每个独立的容器 ...

  3. 内容分享-迅为IMX6开发板编译问题及解决方法

    [经验分享]IMX6开发板编译问题及解决方法本文转自迅为IMX6开发板售后讨论群,分享给大家~ 物理主机 win10 64 位专业版.虚拟机 VM12 Pro.开发环境采用迅为提供的开发环境: Ubu ...

  4. 第28月第5天 uibutton交换方法

    1. //交换系统的方法 @implementation UIControl (MYButton) + (void)load { Method a = class_getInstanceMethod( ...

  5. 第26月第7天 mac如何matplotlib中文乱码问题

    1.mac如何matplotlib中文乱码问题 先查看 ~/.matplotlib/fontList.json 添加SimHei字体(simhei.ttf文件)到 /Library/Framework ...

  6. 第25月第6天 apachecn视频(机器学习实战)

    1.apachecn视频(机器学习实战) https://github.com/apachecn/AiLearning https://space.bilibili.com/97678687/#/ch ...

  7. Hive思维导图之Hive优化

  8. 安装confluence5.10.0版本

    1.confluence也是atlassian公司的一应用 2.安装步骤和jira类似 3.破解jar 将/export/atlassian/confluence/confluence/WEB-INF ...

  9. vue-CLI踩坑记

    vue init webpack vue-demo 使用 windows 7 DOS命令行和gitbash都有选择和实际选择结果不一致的问题, DOS命令行只在 Vue build有问题, gitba ...

  10. P1494 [国家集训队]小Z的袜子(莫队)

    题目链接:https://www.luogu.org/problemnew/show/P1494 题目大意:中文题目 具体思路:计算概率的时候,每一次是区间的移动,每一次移动,记得先将原来的记录的影响 ...