SpringMVC提供了一个DispatcherServlet作为前端控制器,其分配请求,调度控制的作用
根据这里的springmvc-config.xml,创建一个WebApplicationContext容器对象,也成上下文环境
DispatcherServlet获取到请求后,会将请求分发给对应处理的Java类(SpringMVC中称之为Handle)
这个类就是一个Controller类,即控制器
其实现方式有两种:
1、需要实现Controller接口—>Handle类必须复写handleRequest()方法
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response)
2、基于注解,@RequestMapping,映射请求和该请求对应的方法
处理映射器HandlerMapping, 根据请求,查找映射
处理器适配器HandlerAdapter,选择合适的Handler(Conntroller)
执行Handler(Conntroller)
视图解析器ViewResolver,接收到视图后,解析,将View呈现给用户
开发第一个SpringMVC应用
MVC框架建议:
所有的视图页面都放在WEB-INF文件夹下,这样可以保护视图页面,避免直接向视图页面发送请求。
用户的所有请求应该都向控制器发送,由控制器调用模块组件和视图组件向用户呈现数据
处理映射器RequestMappingHandlerMapping
处理适配器RequestMappingHandlerAdapter
建立Spring MVC应用开发的两种类型
传统方法:基于XML配置
Controller类需要实现Controller接口,里面必须有 ModelandView handleRequest()方法
注解方法:基于注解的控制器
Controller类不需要实现Controller接口了,改为使用注解方式来描述。_@_Controller
该类里面的方法需要使用@RequestMapping(value=”/hello”)注解,告知前端控制器,/hello请求对应,使用该注解的方法
2.4 详解DispatcherServlet前端控制器
会装配各种组件
这样,控制器就不会与特定的视图相耦合,传递给DispatcherServlet的视图名并不直接表示某个特定的JSP。实际上,它甚至并不能确定视图就是JSP。相反,它仅仅传递了一个逻辑名称,这个名字将会用来查找产生结果的真正视图。
DispatcherServlet将会使用视图解析器(viewresolver)来将逻辑视图名匹配为一个特定的视图实现,它可能是也可能不是JSP。
2.5 SpringMVC执行的流程
GET 方法
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
POST 方法
请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
“约定优于配置”
Spring MVC执行的流程
…..
DispatcherServlet
HandlerMapping
HandlerAdapter
ViewResolver
理解视图解析
InternalResourceViewResolver所采取的方式并不那么直接。它遵循一种约定,会在视图名上添加前缀和后缀,进而确定一个Web应用中视图资源的物理路径。