SpringMVC
SpringMVC
Spring MVC是目前主流的实现MVC设计模式的框架,相当于Spring的一个子模块。
Spring MVC以Spring Ioc容器为基础,利用容器特性简化它的配置。
MVC模式:即把应用程序分为三层,controller,view和model层。controller接收用户端请求,调用model生成业务数据,传递给view。springMVC就是对这套流程的封装,屏蔽了很多底层的代码,开放出接口,让开发者可以更轻松便捷的完成任务。
SpringMVC核心组件
DispatchServlet:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。
Handler:处理器,完成具体的业务逻辑,相当于Servlet或者Action
HandlerMapping:DispatcherServlet接收到请求后,通过HandlerMapping将不同的请求映射到Handler。
HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。
HandlerExecutionChain:处理器执行链,包括两部分内容:Handler和HandlerInterceptor(系统会有一个默认的HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器。)
HandlerAdapter:处理器适配器,Handler执行业务方法之前,需要进行一系列的操作,包括表单数据的验证,数据类型的转换,将表单数据封装到javaBean等。开发者只需要将注意力集中在业务逻辑的处理上.
DispatcherServlet 通过HandlerAdapter执行不同的handler
ModleAndView:装载了模型数据和视图信息,作为handler的处理结果,返回给DispatcherServlet.
ViewResolver:视图解析器,DispatcheServlet通过它将逻辑视图解析为物理视图。最终将渲染的结果响应给客户端。
SpringMVC流程非常的复杂,实际开发却很简单,因为大部分的组件不需要开发者创建,管理,只需要通过配置文件的方式完成配置接口,真正需要开发者进行处理的只有Handler,View。
创建Maven工程,pom.xml,添加mvc依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.11.RELEASE</version> </dependency> </dependencies>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <!--拦截所有请求--> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
package com.soutwind; import org.springframework.aop.scope.ScopedProxyUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @Controller,和@Component类似,将类交给Ioc管理,并多了控制器的功能 */ @Controller public class HelloHandler { @RequestMapping("/index")//当在浏览器中输入/index时可直接调用index方法。 public String index(){ System.out.println("执行了index.."); return "index";//return一个视图解析器,调用webapp下的Index.jsp } }