SpringMVC篇—认识MVC底层原理、架构和使用,一篇文章搞定!

深入理解什么是MVC

一、理解MVC
MVC是一种软件设计规范,是一种架构模式!
MVC三层架构分别是:
Model:模型,一般都是指数据库,执行一些业务逻辑,持久化数据
View:视图层,一般指前端的jsp页面
Controller:控制层,一般都是Servlet控制请求和响应,以及页面跳转(转发和重定向)  
Controller详细职责:(1)取得表单数据(2)调用业务逻辑(3)页面重定向

二、早期的MVC框架

用户可以直接访问控制层,控制层可以直接操作数据库
这种框架存在很大的弊端:
通过在Servlet中直接对数据库进行增删改查
1、程序十分臃肿,不利于维护;
2、Servlet代码中不仅仅要处理请求和响应,还要处理页面跳转、处理JDBC、处理业务代码、处理逻辑代码......        

三、现在演进的一些新框架

对于架构师而言: 没有什么事加一层解决不了的,所以在控制层和数据库之间又加了一层业务层

四、深入理解什么是MVC三层架构
1、Model层
(1)做业务的处理:比如用户登陆、用户注销等操作,里面都是一些业务逻辑 (Service层)
(2)做数据的持久层处理:对数据库进行增删改查 (Dao层)
2、View层
(1)展示数据    
(2)提供链接发起Servlet请求(通过一些a标签、Form表单、内联的img链接等等)
3、Controller层 (目前来说就是一些Servlet)
1、接收用户的请求(通过request获取用户的请求参数、Session信息等等)
2、交给业务层处理对应的代码(调用Dao层的增删改查)
3、控制视图层的跳转(如果某个判断正确,进行页面的转发或者重定向操作)

举例说明:(正向的处理信息,那么返回来就是将信息返回给用户,经过前端的一些渲染,用户就可以看到登陆成功或者登陆失败的新的界面了)
用户想在JSP视图层登陆某网站-->Servlet中接收用户登陆的请求(获取登陆的参数,username,password等等)-->交给业务层处理登陆的业务
(判断用户名和密码是否正确,甚至是注册的一些功能,涉及到往数据库进行增删改查的操作,以及对数据库事务的处理)-->Dao层查询用户名
和密码是否正确,将查询的结果向上级返回-->数据库
 

SpringMVC特点、中心控制器DispatcherServlet

一、SpringMVC优势
1、轻量级,简单易学
2、高效,基于请求响应的MVC框架
3、与Spring兼容性好,无缝结合
4、约定大于配置
5、功能强大:RESTful、数据验证、格式化、本地化、主题等
6、简单灵活

二、SpringMVC中心控制器DispatcherServlet
作用:将请求发到不同的处理器上,即处理不同业务的类

HelloSpringMVC

一、新建项目,添加框架支持

二、确定导入了MVC依赖

<!--    项目总依赖-->
<dependencies>
    <!--        junit测试依赖-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <!--        Servlet依赖-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <!--        Jsp依赖-->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
    </dependency>
    <!--        jstl依赖-->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!--        SpringMVC依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.1.9.RELEASE</version>
    </dependency>
</dependencies>

三、配置web.xml,注册DispatcherServlet

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <!--1.注册DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--关联绑定一个springmvc的配置文件(就是我们之前写的Spring核心配置文件):【servlet-name】-servlet.xml-->
        <!--contextConfigLocation是写死的,记住,通过这个name才能获取到SpringMVC的配置文件路径
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!--启动级别-1(由于系统一启动,可能有些请求就被处理,所以设置启动级别为1,即DispatcherServlet和服务器一起启动)-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--/ 匹配所有的请求;(不包括.jsp)-->
    <!--/* 匹配所有的请求;(包括.jsp)-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

四、编写springmvc-servlet.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">


</beans>

五、注册映射处理器、处理适配器、视图解析器

<?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">

    <!--添加 处理映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--添加 处理适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--视图解析器:DispatcherServlet给他的ModelAndView-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        <!--前缀(前缀一般就是写死的,注意jsp后面还有一个横杠,不要忽略!!!)-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

六、编写HelloController类

package com.guohui.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//注意:这里我们先实现Controller接口
public class HelloController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //ModelAndView 创建模型和视图对象
        ModelAndView mv = new ModelAndView();

        //封装对象,放在ModelAndView中
        mv.addObject("msg","HelloSpringMVC!");
        //封装要跳转的视图,放在ModelAndView中
        mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
        
	   //这里面还会有处理业务的代码

        return mv;
    }
}

七、在springmvc-servlet.xml注册HelloController类

<!--Handler,注册HelloController的Bean-->
<bean id="/hello" class="com.guohui.controller.HelloController"/>

八、部署和发布项目

九、启动服务器

十、页面效果
1、首先跳转到首页

2、地址栏输入hello

十一、总结
现在我们使用SpringMVC来进行页面请求和响应,和以往不同的是现在我们只需要把中心控制器DispatcherServlet在web.xml中进行注册,写好的Ctroller类直接在Springmvc-servlet.xml中注册即可。
我们的DispatcherServlet会对所有的请求进行拦击,拦截后调用Springmvc-servlet.xml中的映射处理器、处理适配器,适配器会安邦我们在Springmvc-servlet.xml中查找有没有对应的类,如果有则进入方法,执行Ctroller方法,然后Ctroller中的方法想要进行请求转发,无需再调用转发的方法,并且路径只写jsp的名称即可,因为这个地方会调用Springmvc-servlet.xml中的视图解析器帮我们把jsp的全路径拼接出来!

至此,你已经掌握了SpringMVC的基础理论以及实现方式,现在的开发项目中,还有不少的项目依旧是MVC的项目,所以很有必要学习和掌握SpringMVC,他对我们将来学习SpringCloud也具有很重要的作用。后续笔者还会持续更新,敬请期待!

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>