• SpringMVC是一个轻量级的Web表现层框架,用来写Controller接收请求跳转页面的,它是Spring框架的一部分。SpringMVC是对Servlet的封装和增强,简化了servlet的操作。它已经超越了Struts,成为目前就最优秀的表项层框架。

    1 入门案例

  • 需求:浏览器输入url发起请求,该URL请求被SpringMVC框架拦截处理,把后台服务器的当时时间输出到jsp页面显示

  • 实现步骤:

    • 创建maven工程,引入springMVC框架依赖,Servlet与jsp包
    • 定义DefaultController
    • 方法gotoResult(),参数和返回值类型为ModelAndView
    • 添加@Controller注解
    • 方法添加@RequestMappering注解,注解属性为客户端访问的虚拟路径
    • spring配置文件中,配置注解扫描
    • web.xml配置mvc框架前端控制器

      2 springMVC架构

      图片.png组件说明:
  • DispatcherServlet:前端控制器。接收用户请求,响应结果,相当于中央处理器,DispatcherServlet是整个流程控制的中心,由它调用其他组件完成用户请求的处理。DispatcherServlet的存在建立了组件之间的耦合性。

  • HandlerMapping:处理器映射器。理解为一个Map,HandlerMapping负责根据用户请求的URL找到Handler即处理器,SpringMVC提供了不同的映射器来实现不同的映射方式,例如:实现接口的方式,注解方式等。
  • HandlerAdapter:处理器适配器。不同接口类型转换成usb,体现了万物归一的思想,通过HandlerAdapter对Handler处理器进行执行,这是适配器模式的应用。
  • Handler:处理器。在SpringMVC当中有两层意思:Controller或者Controller当中的方法,Handler相对于前端控制器DispatcherServlet来说是后端控制器,执行具体业务处理的,它在DispatcherServlet的控制下处理用户的具体请求。
  • ViewResolver:视图解析器。ViewResolver进行视图解析,首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象。
  • View:视图。SpringMVC框架提供了很多的View视图类型的支持,包括:jsp、freemarkerView等。我们最常用的视图就是jsp。注意:在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。需要我们开发的组件有handler、view 。

    3 @RequestMapping注解使用

  • 多个URL映射到同一个Handler(同一个方法)。

  • 作用到类上面,实现对请求路径的分类管理,限定类中方法访问的前缀。
  • method属性限定请求方法:请求的handle相同,请求方式不同进入不同的方法处理
  • params属性限定请求参数:支持简单表达式语法,URL一样,根据携带参数的不同进入不同的方法处理。

    4 请求参数绑定

  • 功能1:默认支持ServletAPI,SpringMVC在方法中直接声明HttpServletRequest,HTTPServletResponse,HTTPSession即可使用

  • 功能2:绑定简单的数据类型,基本数据类型推荐使用包装类,包装类可以为null。对于布尔类型的参数,请求的参数值只能为true或false。或者1或0 。
  • 功能3:@RequestParam注解使用,当形参和传递的参数名称不一致时使用ResquestParam进行手动映射,类似于Mybatis中resultMap的作用
  • 功能4:绑定pojo对象,直接形参声明pojo即可接收。要求传递的参数名必须和pojo属性名对应
  • 功能5:绑定pojo对象的包装对象,重点在于传参参数命名。pojo包装对象首先就是一个普通的pojo,就应该按照上面绑定pojo的要求来,然后进一步处理,传参时参数名,首先应该定位到包装对象的属性名,如果不能确定数据,通过属性 . 的方式进一步锁定即可。
  • 功能6:绑定List集合包装pojo对象,传递绑定集合类型(List/Map),作为pojo的一个属性来传递
  • 功能7:绑定Map集合包装pojo对象
  • 功能8:自定义类型转换器,文件 SpringMVC-params
  • 功能9:RequestHeadler注解
    • 获取请求头信息
    • 属性Value,属性值为请求头的键名
    • 文件 SpringMVC-params
  • 功能10:CookieValue注解,获取浏览器携带的Cookie,属性value,属性值是Cookie的键名。

    5 SpringMVC编码过滤器

    1. <!--配置编码过滤器:过滤post请求-->
    2. <filter>
    3. <filter-name>characterEncodingFilter</filter-name>
    4. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    5. <!--设置编码-->
    6. <init-param>
    7. <param-name>encoding</param-name>
    8. <param-value>utf-8</param-value>
    9. </init-param>
    10. </filter>
    11. <filter-mapping>
    12. <filter-name>characterEncodingFilter</filter-name>
    13. <url-pattern>/*</url-pattern>
    14. </filter-mapping>

    6 Controller方法(Handler)返回值

  • 返回ModelAndView

  • 返回字符串(直接返回逻辑视图名,数据使用Model和ModelMap封装)

    • ModelAndView = ModelMap+view(逻辑视图名)
    • 现在直接将逻辑视图名以字符串形式return(文件名)
    • Model接口方法addAttribute(String key,Object value)存储键值对,将被存储到request域中

      7 Josn格式数据实现Ajax交互

  • json数据是咱们企业级开发数据交互经常使用的一种方式,它比较轻量级,格式比较清晰

  • 交互:前端和后端交互
  • 前端传递json字符串到后台,后台如何能够自动转换为pojo对象
  • @RequestBody注解,将JSON字符串转换为POJO对象。作用:用于获取请求体(按照http协议进行一个完整的封装,往往都是由请求头+请求体等组成)内容,不适用于Get请求方式。
  • 后台return对象,能否前端直接接收到json格式的字符串
  • @ResponseBody注解,作用:该注解用于将Controller的方法返回的对象转换为json字符串返回给客户端

    8 SpringMVC对Restful风格URL的支持

  • http请求方式:get主要做查询就, post主要做插入, put主要做更新, delete主要做删除

  • 什么是Restful:resful是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次。资源:互联网所有的事物都可以被抽象为资源url(只要互联网上一个事物可以用url来表示,那么它就是一个资源)。资源操作:使用POST、delete、put、get,使用不同方法对资源进行操作。
  • 传统方式操作资源
  • 使用Restful操作资源

  • 过滤器(Filter):对Request请求起到过滤的作用,作用在Servlet之前,如果配置为/*可以对所有资源访问进行过滤处理

  • 拦截器(Interceptor):是SpringMVC、Struts等表现层框架自己的,可以对jsp、HTML、css、image等访问设置是否拦截,也可以设置对访问的控制器方法(Handler)设置是否拦截。底层采用的是aop的思想
  • 自定义拦截器:实现接口HandlerInterceptor
    • 重写方法:
      • PreHandle:handler之前执行,返回true表示放行
      • postHandle:在Handler方法执行完毕后,进行页面跳转渲染之前执行
      • afterCompletion:在页面渲染完毕以后执行