一、springMVC入门
-
SpringMVC简介
MVC 是把 Web 应用程序分为三层,分别是:- 控制器(Controller):负责接收并处理请求,响应客户端;
- 模型(Model):模型数据,业务逻辑;
- 视图(View):呈现模型,与用户进行交互;
SpringMVC相当于spring的一个子框架,所以SpringMVC与spring能够天然的结合使用,无需整合。
访问的流程:
-
SpringMVC核心组件
组件 | 名称 | 作用 |
---|---|---|
DispatcherServlet | 前置控制器 | 用来控制其他组件的执行,进行统一的调度,降低各个组件的耦合性 |
Handler | 处理器 | 完成具体业务逻辑 |
HandlerMapping | 将请求映射到Handler | |
HandlerInterceptor | 处理器拦截器 | 是一个拦截处理的接口 |
HandlerExecutionChain | 处理器执行链 | 包括一个Handler和一个except |
HandlerAdapter | 处理器适配器 | DispatcherServlet通过HandlerAdapter执行不同的Handler |
ModelAndView | 装载模型数据和视图(逻辑视图)信息作为Handler的处理结果返回给 DispatcherServlet | |
ViewResolver | 视图解析器 | 将逻辑视图解析为物理视图,之后将结果返回给客户端 |
- SpringMVC工作流程
- 客户端请求提交到DispatcherServlet
- 由DispatcherServlet控制器寻找一个或多个HandlerMapping,找到处理请求的Controller
- DispatcherServlet将请求提交到Controller
- Controller调用业务逻辑处理后返回ModelAndView
- DispatcherServlet寻找一个或多个ViewResolver视图解析器,找到ModelAndView指定的视图
- 视图负责将结果显示到客户端
二、实现一个springMVC
-
基于xml方式实现springMVC
-
创建一个Maven项目
-
导入springMVC所需要的依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.6.RELEASE</version> </dependency> </dependencies>
-
在
web.xml
中配置DispatcherServlet
<!--配置springMVC的servlet:DispatcherServlet--> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--指定springMVC文件的路径--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMVC.xml</param-value> </init-param> </servlet> <!--拦截所有的请求--> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
-
实现一个Handler
/** * 自己去实现Handler * 要继承 Controller 类 */ public class MyHandler implements Controller { @Override public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception { //装载模型数据和逻辑视图 ModelAndView modelAndView = new ModelAndView(); //添加模型数据 modelAndView.addObject("name","tom"); //添加逻辑视图,这里由视图解析器将逻辑视图进行解析,所以不需要加前后缀 modelAndView.setViewName("show"); return modelAndView; } }
-
配置
SpringMVC.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--配置一个HandlerMapping,将URL请求映射到--> <bean id="HandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <!--配置 /test 请求对应的Handler--> <prop key="/test">testHandler</prop> </props> </property> </bean> <!--配置Handler--> <bean id="testHandler" class="MyHandler"></bean> <!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
-
实现视图show.jsp
-
运行项目,访问 /test
-
-
基于注解的方式实现一个springMVC
-
在springMVC.xml中添加一个自动扫描
<!--将AnnotationHandler自动扫描到IOC容器中--> <context:component-scan base-package="com.springdemo.controller"></context:component-scan>
-
实现Handler
@Controller public class AnotationHandler { @RequestMapping("/test") public ModelAndView test(){ //装载模型数据和逻辑视图 ModelAndView modelAndView = new ModelAndView(); //添加模型数据 modelAndView.addObject("name","tom"); //添加逻辑视图,这里由视图解析器将逻辑视图进行解析,所以不需要加前后缀 modelAndView.setViewName("show"); return modelAndView; } }
业务方法还可以使用其他两种方法实现:
- 使用Model传值,String解析视图
@Controller public class AnotationHandler { @RequestMapping("/test") public String test(Model model){ model.addAttribute("name", "Tom"); return "show"; } }
- 使用Map传值,String解析视图
@Controller public class AnotationHandler { @RequestMapping("/test") public String test(Map<String,String> map){ map.put("name", "Tom"); return "show"; } }
- 使用Model传值,String解析视图
-