快速入门SpingMVC,详解原理
文章目录
1. 为什么要使用SpingMVC
用 springmvc 比原本 servlet 方便快捷,开发效率高,springmvv 通过前端控制器拦截所有请求,然后下发给控制器映射器,通过它找到处理链,然后返回给前端控制器,前端控制器继续下发给控制器执行器,控制器执行器找到执行前面找到执行链,然后返回给控制器执行,然后再次返回前端控制器,前端控制器将再次下发给视图解析器,视图解析器渲染视图,最后通过前端控制器返回给前端,使用 mvc 开发人员只需要专心写业务,不需要关系其他东西,这样大大提高开发效率。
SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发。
2. MVC设计模式
3. SpringMVC核心架构
具体流程
- 首先浏览器发送请求给DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
- DispatcherServlet对接HandlerMapping,处理器映射器将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器)对象;
- DispatcherServlet对接HandlerAdapter,处理器适配器将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
- HandlerAdapter调用处理器相应功能处理方法,并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
- ModelAndView对象(Model部分是业务对象返回的模型数据,View部分为逻辑视图名对接ViewResolver, 视图解析器将把逻辑视图名解析为具体的View;
- View用于渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构;
- 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
4. Spring核心原理
新建一个web module
4.1 利用maven导入需要的依赖
<dependencies><!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.1</version></dependency><!-- 日志 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!-- ServletAPI --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!-- Spring5和Thymeleaf整合包 --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version></dependency></dependencies>
4.2 配置web.xml
<!--1.注册DispatcherServlet--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><!--启动级别-1--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
4.3 编写SpringMVC 的 配置文件!
名称:springmvc-servlet.xml : [servletname]-servlet.xml
在其中添加一些管理器,以及我们的控制层组件
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="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"><!-- 添加处理映射器--><beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><!-- 添加处理适配器--><beanclass="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/><!--视图解析器:DispatcherServlet给他的ModelAndView--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"id="InternalResourceViewResolver"><!-- 视图前缀 --><propertyname="prefix"value="/WEB-INF/templates/"/><!-- 视图后缀 --><propertyname="suffix"value=".html"/></bean><beanid="/hello"class="com.zxy.controller.HelloController"></bean></beans>
4.4 、编写我们要操作业务Controller
编写我们要操作业务Controller ,要么实现Controller接口,要么增加注解;需要返回一个ModelAndView,装数据,封视图;
importorg.springframework.web.servlet.ModelAndView;importorg.springframework.web.servlet.mvc.Controller;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;//注意:这里我们先导入Controller接口publicclassHelloControllerimplementsController{publicModelAndViewhandleRequest(HttpServletRequest request,HttpServletResponse response)throwsException{//ModelAndView 模型和视图ModelAndView mv =newModelAndView();//封装对象,放在ModelAndView中。Model
mv.addObject("msg","HelloSpringMVC!");//封装要跳转的视图,放在ModelAndView中
mv.setViewName("index");//: 结合上面配置文件中的视图解析器会生成完整的路径/WEB-INF/jsp/index.jspreturn mv;}}
4.5 编写我们的jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
4.6 配置tomacat,启动调试
项目结构如下
5. 使用注解开发
在实际开发中我们一般不会使用这么复杂的开发方式,使用注解使开发变得简单
新建一个web module
5.1 利用maven导入需要的依赖
<dependencies><!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.1</version></dependency><!-- 日志 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!-- ServletAPI --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!-- Spring5和Thymeleaf整合包 --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version></dependency></dependencies>
5.2 配置web.xml
<!--1.注册DispatcherServlet--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><!--启动级别-1--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
5.3 编写配置文件springmvc.xml
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!-- 自动扫描包 --><context:component-scanbase-package="com.zxy.springmvc.pojo"></context:component-scan><!-- 配置Thymeleaf视图解析器 --><beanid="viewResolver"class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><propertyname="order"value="1"/><propertyname="characterEncoding"value="UTF-8"/><propertyname="templateEngine"><beanclass="org.thymeleaf.spring5.SpringTemplateEngine"><propertyname="templateResolver"><beanclass="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><!-- 视图前缀 --><propertyname="prefix"value="/WEB-INF/templates/"/><!-- 视图后缀 --><propertyname="suffix"value=".html"/><propertyname="templateMode"value="HTML5"/><propertyname="characterEncoding"value="UTF-8"/></bean></property></bean></property></bean></beans>
5.4 使用注解编写我们的控制层
importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;//注解表明这是控制层,同时自动将这个类的bean加入ioc容器中@ControllerpublicclassHelloController{// @RequestMapping注解:处理请求和控制器方法之间的映射关系// @RequestMapping注解的value属性可以通过请求地址匹配请求,/表示的当前工程的上下文路径// localhost:8080/springMVC/@RequestMapping("/")publicStringindex(){//设置视图名称return"index";}}
5.5 编写首页
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>首页</title></head><body><h1>这是首页</h1></body></html>
5.6 配置tomcat开始调试
项目结构图如下
相信看完本篇你已经对springmvc的结构原理有了认识,谢谢观看。
版权归原作者 小驴啵啵 所有, 如有侵权,请联系我们删除。