什么是SpringMVC和MVC以及SpringMVC的原理?

没有什么正确的选择,努力将自己的选择变的正确。

1.什么是SpringMVC?

SpringMVC是Spring的一个模块,是Spring提供的一个实现了WEB MVC 设计模式的轻量级的框架(基于MVC的web层框架)。SpringMVC作为控制器去建立模型和视图进行视图的数据交互。本质就是servlet,与Struts2框架一样,都属于MVC框架,当然就无须通过中间层的框架去进行整合了。

特点:

  • 灵活性强,容易与其它框架集成
  • 提供了前端的DispatcherServlet控制器
  • 自动绑定用户的输入,正确的转换数据类型
  • 内置了常见的校验器,用于校验用户的输入
  • 支持国际化
  • 支持多种视图技术
  • 使用基于基础的XML文件

2.什么是MVC

MVC是一种设计模式,C指的就是controller(控制器),M是model(模型)及是通常我们所建的那些类,V(视图层)就是那些前端所能看见的页面

3.服务器端的三层架构

表现层:如SpringMVC,接受客户端传过来的请求,和用户进行数据交互的,表现层一般会采用MVC设计模式。

业务层:如Spring,处理一些业务逻辑。

持久层:如Mybatis,用来操作数据库的。

4.SpringMVC的原理分析

  1. 前端发起请求到前端控制器DispatcherServlet
  2. 前端控制器请求HandlerMapping查找Handler(映射的请求)
  3. 处理器映射器HandlerMapping向前端控制器返回Handler
  4. 前端控制器去调用处理器适配器HandlerAdapter去执行Handler
  5. Handler执行完成后给适配器返回ModelAndView
  6. 前端控制器通过视图解析器ViewResolver去视图解析
  7. 视图解析器ViewResolver向前端返回View
  8. 前端控制器进行视图渲染
  9. 前端控制器返回结果
    组件
    DispatcherServlet前端控制器:用于接收请求,响应结果
    HandlerMapping处理器映射器:根据请求,查找Handler
    处理器适配器HandlerAdapter:按照一定的规则去执行Handler
    视图解析器ViewResolver:进行视图解析
    视图View:是一个接口,支持不同的view类型

下面就通过构建一个简单的SpringMVC的实例来了解一下SpringMVC的原理

准备工作:使用IDEA工具maven构建web项目导入Spring以及SpringMVC支持的依赖,这里一一列出

pom.xml里面的依赖不一定都需要,开发SpringMVC导入(我全导入是因为以后好复制~~)

<properties>
        <springframework.version>5.0.4.RELEASEspringframework.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjrtartifactId>
            <version>1.9.2version>
        dependency>

        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjweaverartifactId>
            <version>1.9.2version>
        dependency>

        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.11version>
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-testartifactId>
            <version>${springframework.version}version>
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-beansartifactId>
            <version>${springframework.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>${springframework.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-coreartifactId>
            <version>${springframework.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webartifactId>
            <version>${springframework.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>${springframework.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jmsartifactId>
            <version>${springframework.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-txartifactId>
            <version>${springframework.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-context-supportartifactId>
            <version>${springframework.version}version>
        dependency>

        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>servlet-apiartifactId>
            <version>2.5version>
        dependency>
    dependencies>

配置web.xml文件: 映射|请求至前端控制器


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
      
    <servlet>
        <servlet-name>springmvcservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        
        <init-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:springmvc.xmlparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
    servlet>
     
     
    <servlet-mapping>
        <servlet-name>springmvcservlet-name>
        <url-pattern>/url-pattern>
    servlet-mapping>
web-app>

配置springmvc.xml文件在类路径下


<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-3.0.xsd">
    
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">bean>
    
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">bean>
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    bean>

    
    <bean id="/hello" class="com.jektong.controller.HelloController">bean>
beans>

HelloController.java处理业务

/**
 * @author jektong
 * @Date 2020/7/1-20:40
 */
public class HelloController implements Controller {
     
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
     
    	//实例化模型对象
        ModelAndView mv = new ModelAndView();
        //添加参数
        mv.addObject("msg", "hello,springmvc");
        //返回视图名称hello.jsp
        mv.setViewName("hello");
        return mv;
    }
}

hello.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Titletitle>
head>
<body>
    ${msg}
body>
html>

效果:
什么是SpringMVC和MVC以及SpringMVC的原理?_第1张图片
根据流程和基本的SpringMVC项目进行体会其原理!!!

您的每一个赞都是我学习的动力!一起加油吧!

你可能感兴趣的:(什么是SpringMVC和MVC以及SpringMVC的原理?)