springMVC原理

本文详细介绍了SpringMVC的工作原理,包括请求处理流程、关键组件的作用等,并深入探讨了@Controller注解及其搭配@RequestMapping的应用方式。

一、springMVC原理简介




1、HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
2、DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI:也就是XXX.action)。然后根据该URI,调用HandlerMapping映射器处理器获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器,可以根据xml配置或者注解进行查找)。
3、处理器映射器HandlerMapping向前端控制器返回一个Handler对象(准确来说是HandlerExecutionChain对象)。
4、DispatherServlet根据获得的Handler对象,就会选择合适的处理器适配器HandlerAdapter(在成功获取HandlerAdapter对象后,会开始执行Handler的拦截器preHandler方法)。
5、提取Request中的模型数据(可能就是为什么要传入一个HttpServletRequest对象),填充Handler入参,然后开始执行Handler(也就是Controller)。在填充Handler入参的时候,处理器适配器(HandlerMapping)就会根据我们的配置,spring会帮我们执行一些数据的适配工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
6、Handler执行完之后,会向前端控制器DispatherServlet返回一个ModelAndView对象。
7、根据返回的ModelAndView对象,前端控制器就会请求调用视图解析器ViewResolver(必须是已经注册到spring容器中的视图解析器),然后按照逻辑视图名去解析成真正的view(jsp)。
8、向前端控制器DisatherServlet返回view视图解析器。
9、前端控制器就会将模型数据(ModelAndView)填充到request域中,利用model进行视图的渲染
10、最后前端控制器响应到客户端。


二、@Controller的使用、@rewquestMapping的使用

1、DispatcherServlet是Spring MVC的灵魂和心脏,它负责接收HTTP请求并协调Spring MVC的各个组件完成请求处理的工作。
2、和任何Servlet一样,用户必须在web.xml中配置好DispatcherServlet,并且让其接受一 切HTTP请求。
3、当用户的请求被截获时,DispatcherServlet通过HandlerMapping定位到特定的Controller(使用 @Controller注解的普通Java类,此处已经定位到了具体的业务处理方法了,所以我们称其为Handler)。


package ssm.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ItemsController {
	
	@RequestMapping("/queryItems")
	public ModelAndView queryItems(HttpServletRequest request) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("test");
		modelAndView.setViewName("items/itemsList");
		return modelAndView;
	}
}
在POJO类定义处标注@Controller,再通过<context:component-scan/>扫描相应的类包,即可使POJO 成为一个能处理HTTP请求的控制器。一个控制器的每一个方法都可以成为请求处理方法,如何将请求映射到控制器的方法中是Spring MVC框架最重要的任务之一,这项任务由@RequestMapping承担。


1、@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。
2、@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。

3、单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。

这个时候有两种方式可以把Controller 交给Spring 管理,好让它能够识别我们标记的@Controller 。

(1) 第一种方式是在SpringMVC 的配置文件中定义Controller 的bean 对象。

<bean class="ssm.controller.ItemsController"/>

(2) 第二种方式是在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。
<context:component-scan base-package="ssm.controller"></context:component-scan>



---------------------------------------------------------------------------------------------------------------------------------------------------------------

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值