SpringMVC相关介绍及使用

#SpringMVC相关介绍及使用

文章目录


##Spring MVC的定义

在介绍Springmvc之前,首先介绍一下JAVAEE框架体系结构:
这里写图片描述
早期的设计模式:
这里写图片描述
由此可见,耦合度太高,违背了软件工程中模块与模块之间的高内聚低耦合的思想,由此,mvc设计模式出现了,mvc设计模式的核心思想也就是为了解耦合:
这里写图片描述
由此可以给Springmvc下一个定义:
Spring MVC是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring MVC也是要简化我们日常Web开发的,说白了Springmvc就是对mvc设计模的一种具体实现。
##使用Springmvc的优势

  • 1、清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。

  • 2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;

  • 3、由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象;

  • 4、和Spring 其他框架无缝集成,是其它Web框架所不具备的;

  • 5、可适配,通过HandlerAdapter可以支持任意的类作为处理器

  • 6、可定制性,HandlerMapping、ViewResolver等能够非常简单的定制;

  • 7、功能强大的数据验证、格式化、绑定机制;

  • 8、利用Spring提供的Mock对象能够非常简单的进行Web层单元测试;

  • 9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

  • 10、强大的JSP标签库,使JSP编写更容易。

  • 11、还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等。
    Struts2和Springmvc的对比:

  • 一.实现机制:
    Struts2是基于过滤器实现的。Springmvc是基于servlet实现,servlet比过滤器快。

  • 二.运行速度
    Struts2是多列,请求来了以后,struts2创建多少个对象:ActionContext,valuestack,UserAction,ActionSuport,ModelDriven,userAction里面属性:User对象,userlist集合等,Springmvc是单例的。

  • 三.参数封装来分析:
    Struts2基于属性进行封装,Springmvc基于方法封装。
    ##Spring MVC的运行原理
    整个Springmvc的实现都是围绕这样一张图展开:
    这里写图片描述
    核心架构的具体流程步骤如下:

  • 1、首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进 行处理,作为统一访问点,进行全局的流程控制;

  • 2、DispatcherServlet——>HandlerMapping,HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

  • 3、DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

  • 4、HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

  • 5、ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

  • 6、View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

  • 7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

##Springmvc具体实现

普通实现方式
  • 1.创建一个web工程
  • 2.导入相应的jar包
  • 3.配置DispatcherServlet前端控制器(web.xml
    这里写图片描述
  • 4.配置处理器映射器(handlerMapping)
  • 5.配置处理器适配器(handlerAdapter)
  • 6.配置视图解析器(ResourceViewResolver)
    配置springmvc.xml文件
    这里写图片描述
  • 6.编写一个Controller类
    这里写图片描述
  • 7.定义视图页面(index.jsp)
    根据视图解析路径:WEB-INF/jsps/index.jsp
    这里写图片描述
    这里写图片描述
    ####注解方式实现
  • 1.创建一个web工程
  • 2.导入相应的jar包
  • 3.前端控制器(略)
  • 4.配置注解扫描
  • 5.配置注解映射器
  • 6.配置注解适配器
  • 7.配置视图解析器
  • 8.配置springmvc.xml文件
    这里写图片描述

注意<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的,即解决了@Controller注解使用的前提配置。

  • 9.编写一个Controller类
    这里写图片描述
  • 10.编写hello的JSP页面返回结果视图(略)

##Spring MVC常用注解

  • 1.@Controller
    在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。
  • 2.@RequestMapping
    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。RequestMapping注解有六个属性,下面我们把她分成三类进行说明(下面有相应示例)。
    1、 value, method;
    value:指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
    method:指定请求的method类型, GET、POST、PUT、DELETE等;
    2、consumes,produces
    consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
    produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
    3、params,headers
    params:指定request中必须包含某些参数值是,才让该方法处理。
    headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
    - 3.@RequestBody/@ResponseBody
    作用:两种都是用来处理json数据,@RequestBody注解用于接收前台json数据,把json数据自动封装成javaBean,@ResponseBody是把后台javaBean转换成json格式的数据返回页面。
  • 4.@pathVariable
    用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。
  • 5.@requestParam
    主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),它有三个常用参数:defaultValue = “0”, required = false, value = “isApp”;defaultValue 表示设置默认值,required 通过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄阳老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值