Spring MVC 的核心组件

DispatcherServlet:核心处理器(也叫前端控制器),负责调度其他组件的执行,可降低不同组件之间的耦合性,是整个 Spring MVC 的核心模块。
Handler:处理器,完成具体业务逻辑,相当于 Servlet 或 Action。
HandlerMapping:DispatcherServlet 是通过 HandlerMapping 将请求映射到不同的 Handler。
HandlerInterceptor:处理器拦截器,是一个接口,如果我们需要做一些拦截处理,可以来实现这个接口。
HandlerExecutionChain:处理器执行链,包括两部分内容,即 Handler 和 HandlerInterceptor(系统会有一个默认的 HandlerInterceptor,如果需要额外拦截处理,可以添加拦截器设置)。
HandlerAdapter:处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作包括表单数据的验证、数据类型的转换、将表单数据封装到 POJO 等,这一系列的操作,都是由 HandlerAdapter 来完成,DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。
ModelAndView:装载了模型数据和视图信息,作为 Handler 的处理结果,返回给 DispatcherServlet。
ViewResolver:视图解析器,DispatcherServlet 通过它将逻辑视图解析成物理视图,最终将渲染结果响应给客户端

 

spring mvc注解

要使用springmvc的注解类,需要在springmvc.xml配置文件中用context:component-scan/扫描:

<context:component-scan base-package="SSM.Controller"/>

视图解析器:

<!-- 定义视图解析器 -->
    <bean id="viewResolver" class=
            "org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 设置前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 设置后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>

RequestMapping注解   在Controller控制器类的类定义和方法定义处都可以标注@RequestMapping注解

DispatcherServlet截获请求后,就可以通过控制器上的@RequestMapping提供的映射信息确定请求所对应的处理方法
写在类级别上,类下面的所有请求路径都要加上该路径

RequestMapping注解类的属性,分别有 value, method, consumes, produces, params, headers

  1. value属性  代表具体的请求路径,value是可以省略的
  2. method属性 指定请求的method类型, GET、POST、PUT、DELETE等:
  3. consumes属性  指定请求的提交内容类型(Content-Type),例如application/json, text/html
  4. produces属性  指定返回的内容的类型(Content-Type),例如application/json, text/html
  5. params属性  指定请求中必须包含某些参数值,才会触发这个处理方法  例:@RequestMapping(value = "/index", params = {"id=1"}) 
  6. headers属性   请求头Header中必须包含某些指定的参数值,才能让该方法处理请求,可以利用这个特性拒绝非指定来源的客户端的访问,以加强站点的安全。

Component注解  是“Controller注解”、“Service注解”和“Repository注解”的通用注解,可以和它们起到相同的作用

Controller注解   类级别的注解,用于声明控制器类,Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写,你也可以自己指定

使用@Resource或@Autowired注解实现注入
@Resource和@Autowired注解的异同:
@Resource 用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName")
@Autowired 用于注入,(srping提供的) 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,
可以设置它的required属性为false,例如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用

.Service注解  类级别的注解,用于声明Service类

Repository注解   类级别的注解,用于声明DAO类。

其他注解:

  • CookieValue注解  读取Cookies中的值,并且赋值给变量

有三个属性 value, required, defaultValue,分别表示Cookie的名字,是否必须有这个Cookie值,如果没有则使用默认值
不带任何参数,表示需要的参数名与标注的变量名相同

 

  • PathVariable注解  @PathVariable用于方法中的参数,表示方法参数绑定到地址URL的模板变量。 
  • .RequestBody注解(将bean对象转为json)
  • .RequestHeader注解可以把Request请求header部分的值绑定到方法的参数上
  • RequestMethod注解
  • RequestParam注解  RequestParam是一个可选参数
  • Scope("prototype")注解  设定bean的作用域
  • Transactional( rollbackFor={Exception.class})注解 事务管理
  • ModelAttribute注解
  1. 应用于方法参数,参数可以在页面直接获取,相当于request.setAttribute
  2. 应用于方法,将任何一个拥有返回值的方法标注上 @ModelAttribute,使其返回值将会进入到模型对象的属性列表中. 
  3. 应用于方法参数时@ModelAttribute("xx"),须关联到Object的数据类型,基本数据类型 如:int,String不起作用 
  4. ResponseBody注解

这个注解可以直接放在方法上,表示返回类型将会直接作为HTTP响应字节流输出(不被放置在Model,也不被拦截为视图页面名称)。可以用于ajax。