框架-springmvc01

什么是springMVC

springMVC是spring框架的一个模块, springMVC和springMVC无需通过中间整合层进行整合,基于MVC的web框架(mvc是一个设计模式, springMVC是其在B/S系统下的应用)

表示层

业务逻辑层:BLL

数据层:DAO

spring跨越三层

springMVC框架原理[重点]

重要组件

前端控制器[DispatcherServlet] (一般无需开发)

接收客户的request,返回响应request,相当于转发器,中央处理器

能减少和其他组件的耦合性

处理器映射器[HandlerMapping] (无需开发)

根据请求的url查找Handler

处理器适配器[HandlerAdapter]

按照特定的规则(HandlerAdapter要求的规则)去执行Handler

注意:编写Handler时按照HandlerAdapter要求去做,这样适配器才能执行Handler

处理器[Handler](需要开发)

编写Handler时按照HandlerAdapter要求去做,这样适配器才能执行Handler

视图解析器[View Resolver](无需开发)

根据逻辑视图名进行解析,将视图解析为真正的视图(View对象)

视图[View](要写jsp)

接口,实现类就是支持不同的View类型(jsp/excel/pdf/freemaker等)

springMVC入门程序

需求

商品订单管理案例,以案例为驱动

功能:商品的订单查询

环境搭建

数据库搭建/依赖的jar包等

想要将eclipse程序可以导到MYEclipse中,需要将build\classes改为

框架-springmvc01_第1张图片

WebRoot\WEB-INF\classes

框架-springmvc01_第2张图片

配置前端控制器

web.xml中配置servlet,配置springMVC框架的前端控制器servlet,即:

org.springframework.web.servlet.DispatcherServlet

对所有的url进行访问控制,需要指定HandlerMapping,用于在查找Handler时返回Handler

前端控制器的配置参数:

框架-springmvc01_第3张图片

配置处理器映射器

classpath下的springmvc.xml,实际上就是配置一个spring的applicationContext.xml,创建springmvc所需的对象,这些对象不同于spring和mybatis整合所需创建的对象applicationContext.xml,springmvc-config.xml仅仅用于用于前端控制器实现查找Handler时返回执行链所需的对象的创建

 

创建Handler,并在前端控制器中配置Handler的bean对象

创建Handler

需要实现controller接口,才能由HanderAdapter即处理器适配器

org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter执行

框架-springmvc01_第4张图片

需要创建的对象为ModelAndView的对象

使用

ModelAndView的对象的addObject()

此方法类似request的setAttribute方法进行数据传递

ModelAndView的对象的setViewName()

此方法设置数据传递的jsp页面,在创建Handler的时候就会将jsp页面的访问路径设为Handler的name属性

前端控制器中配置Handler的bean对象

框架-springmvc01_第5张图片

处理器适配器

所有的处理器适配器,都实现HandlerAdapter

框架-springmvc01_第6张图片

视图解析器

其他的非注解的处理器映射器和处理器适配器

映射器

    <bean

   class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">

    bean>

     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

         <property name="mappings">

             <props>

                 <prop key="/queryItems1.action">controllersbeanidprop>

                 <prop key="/queryItems2.action">controllersbeanidprop>

             props>

         property>

     bean>

适配器

    <bean

      class="org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter">

    bean>

    <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter">

    bean>

框架-springmvc01_第7张图片

注解开发

DispatcherServlet.properties

不配置处理器映射器处理器适配器等,也可以使用Handler,这是因为

/org/springframework/web/servlet/DispatcherServlet.properties中配置了默认的处理器映射器处理器适配器等必须配置

注解开发的版本问题

注解映射器

spring3.1之前使用注解映射器为

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

注意:在使用注解开发的时候,需要使用注解开发的相对应的适配器和映射器,不能一个用新的,一个用旧的

springMVC注解开发

配置注解映射器和适配器

学习使用的:

   

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">bean>

   

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">bean>

工作开发使用的:

    <mvc:annotation-driven>mvc:annotation-driven>

这个标签相当于同时配置注解所需的适配器和解析器

 

开发注解的Handler

使用注解的映射器和注解的适配器(注解映射器适配器必须配对使用)

框架-springmvc01_第8张图片

注解:

@Controller                              标识此类为控制器

@RequestMapping("/url")          将方法和url进行映射,标注在方法上的时候,就是直接将方法对应的ModelAndView对应相对应的url,配置在类上,就会对整个类的所有的方法都指定同一个url,即访问此url,所有的方法对应的ModelAndView都会访问

@RequestMapping其他的属性

属性名   数据类型       描述

name     String

value      String[]

method  RequestMethod[]

params   String[]

headers  String[]

consumes      String[]

produces       String[]

组合注解

原本的注解的方式为GET,需要配置为

@ResultMapping(value=””,metthod=RequestMethod.GET)

可以简化为@GetMapping(value=”/url”)

原本的注解的方式为POST,需要配置为

@ResultMapping(value=”/url”,metthod=RequestMethod.POST)

可以简化为@PostMapping(value=”/url”)

 

在spring容器中加载配置的Handler

 

通过源码分析,查看springmvc的执行过程

前端控制器org.springframework.web.servlet.DispatcherServlet的入口为

注解开发的最终样式

结构框架-springmvc01_第9张图片

web.xml

框架-springmvc01_第10张图片

ModelAndView.jsp

框架-springmvc01_第11张图片

po

controller

框架-springmvc01_第12张图片

springmvc.xml

xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"

    xmlns:context="http://www.springframework.org/schema/context"

    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

        http://www.springframework.org/schema/mvc

        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context-3.2.xsd

        http://www.springframework.org/schema/aop

        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd

        http://www.springframework.org/schema/tx

        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">

    <bean

       class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix" value="/WEB-INF/jsp/" />

        <property name="suffix" value=".jsp" />

    bean>

   

   

    <mvc:annotation-driven>mvc:annotation-driven>

    <context:component-scan base-package="springMVC02.controller">context:component-scan>

beans>

总结

原始的web开发和springMVC比较

原始的servlet:

通过servlet的配置进行url路径的映射,每一个servlet对应一个url路径,servlet通过不同的域对象,,将数据发送给相对应的jsp,再将jsp进行数据转发,发送个客户端

springMVC:

       通过DispatcherServlet这个前端控制器,对所有的访问路径进行拦截,在前端控制器这个servlet的配置中,配置了初始化参数springmvc-Config.xml,指定了前端控制器对应的Handler的处理方法,即只配置一个servlet,通过这个servlet配置所有的jsp对应的url进行拦截,通过以访问的url对应的资源路径,找到对应的Handler,通过Handler找到对应的jsp页面,jsp页面的数据通过ModelAndView将数据传递给对应的jsp

你可能感兴趣的:(ssm)