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
- value属性 代表具体的请求路径,value是可以省略的
- method属性 指定请求的method类型, GET、POST、PUT、DELETE等:
- consumes属性 指定请求的提交内容类型(Content-Type),例如application/json, text/html
- produces属性 指定返回的内容的类型(Content-Type),例如application/json, text/html
- params属性 指定请求中必须包含某些参数值,才会触发这个处理方法 例:@RequestMapping(value = "/index", params = {"id=1"})
- 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注解
- 应用于方法参数,参数可以在页面直接获取,相当于request.setAttribute
- 应用于方法,将任何一个拥有返回值的方法标注上 @ModelAttribute,使其返回值将会进入到模型对象的属性列表中.
- 应用于方法参数时@ModelAttribute("xx"),须关联到Object的数据类型,基本数据类型 如:int,String不起作用
- ResponseBody注解
这个注解可以直接放在方法上,表示返回类型将会直接作为HTTP响应字节流输出(不被放置在Model,也不被拦截为视图页面名称)。可以用于ajax。