当前位置: 首页 > article >正文

关于SpringMVC项目

        因为平时工作中需要维护一些比较老的springmvc项目,所以简单介绍一下spingmvc项目结构和如何维护,以及部署。

一、springmvc项目简单介绍

        1、什么是MVC模型

        MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分:
        Model(模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。
        View(视图):用于展示模型中的数据的,一般为jsp或html文件。
        Controller(控制器):是应用程序中处理用户交互的部分。接受视图提出的请求,将数据交给模型处理,并将处理后的结果交给视图显示。

        2、SpringMVC

        SpringMVC是一个基于MVC模式的轻量级Web框架,是Spring框架的一个模块,和Spring可以直接整合使用,我们使用的版本是Spring6,所以JDK需要17以上。SpringMVC代替了Servlet技术,它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。

        关于mvc项目不做过多的介绍,着重讲解一下如何搭建以及mvc的项目结构。

二、SpringMVC项目入门

        创建简易springmvc项目:

        1、和创建springboot项目差不多,选择新建maven项目,新建的maven项目是没有webapp目录的,需要我们手动添加一下。
        这时新建的项目结构:
                        

        创建webapp目录:        

配置目录在src\main 目录下:
 选择确定之后,即创建了web目录:

                                
然后可以选择重命名改为 webapp 目录:
                                

这样就创建成功了。然后可以手段创建一个index.jsp.

                                ​​​​​​​        

2、添加pom文件相关依赖以及配置:
        上面这种方式创建的项目,pom文件中要先添加打包方式为 war 包:

    <packaging>war</packaging>

        然后添加相关的依赖以及插件:
        完整的pom的文件如下所示:
 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mvc</groupId>
    <artifactId>springmvc-01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>


    <dependencies>
        <!-- Spring核心依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
        <!-- SpringMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.6.RELEASE</version>
        </dependency>
        <!-- Servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version> <!-- 适用于 Servlet 4.0 规范,可以根据需要调整 -->
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- tomcat7插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <port>8081</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

        3、创建配置类:
        首先创建 一个简单的controller :

@Controller
public class UserController {


    @RequestMapping(value = "/aaa" , produces = {"text/html;charset=UTF-8;", "application/json;"})
    @ResponseBody
    public String aaa(){
//        System.out.println("你好!");
        return "{'info':'你好!'}";
    }
}

        创建配置类 SpringMvcConfig :

@Configuration
@ComponentScan("com.mvc.controller")
public class SpringMvcConfig {

    
}

        创建初始化配置类 ServletInitConfg :
 

public class ServletInitConfg extends AbstractDispatcherServletInitializer {



    @Override
    protected WebApplicationContext createServletApplicationContext() {

        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

        上面的所需的类创建完成之后,就可以使用idea自带的tomcat进行启动了,启动流程如下:
        点击上方,进行编辑:
        ​​​​​​​        ​​​​​​​        

        命令的行选择输入:

        然后点启动就可以了:        
                 

        以上一个简易的springmvc项目就启动完成了。

三、springmvc项目执行流程

             启动服务器初始化过程:

        1、服务器启动,加载我们定义好的 ServletInitConfg 类,这个类的作用其实跟 web.xml 一样,比较更老一点的项目,会使用 web.xml ,后来就是使用了配置类的形式,使用配置类的形式更容易维护。
        不管是配置类的形式 还是 web.xml 的格式,都是为了初始化web容器。配置的类方法如下所示:

    @Override
    protected WebApplicationContext createServletApplicationContext() {

        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

  

        2、执行 createServletApplicationContext 方法:会得到一个 WebApplicationContext 上下文对象,这个对象是我们springmvc体现的对象,有了这个对象之后,这个对象就加载到了web容器中,具体其实就是加载到了 servletContext 对象中。这个是web容器中最大的范围。

        ​​​​​​​        

        3、加载springMvcConfig ,执行上面的方法,初始化了一个 AnnotationConfigWebApplicationContext 对象,然后注册了一个 springMvcConfig.class 对象,这个其实就是加载具体的配置。

        4、执行@ComponentScan 加载对应的bean:

@Configuration
@ComponentScan("com.mvc.controller")
public class SpringMvcConfig {

}

        这个注解会去扫描对应的包,然后将包下面的bean加载 到上下文对象中:    
               ​​​​​​​

        5、加载 userController,每个@RequestMapping 的名称对应一个具体的方法,当执行路径中的请求的时候,就会拦截到对应的方法中,所以会将 路径 与 对应方法 进行一个注册。这个路径与方法的映射是放在一个统一的地方管理的。

        6、执行getServletMappings方法,定义所有的请求都通过 springMvc :

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

        执行了这个方法,就是让拦截所有进入tomcat的请求,全部由springmvc来处理。
        到这里我们服务器的初始化过程就算完成了。

                单次请求过程:

                1、发送请求localhost/save
                2、请求发出之后,被我们的web容器所拦截,因为服务器初始化的时候设置了,所有请求都通过springmvc 处理,
                3、因为springmvc中 每一个路径 都注册了一个对应方法,所以就会解析 请求路径 /save ,
                4、解析了这个路径之后,发现 


http://www.kler.cn/a/369114.html

相关文章:

  • Mybatis之参数处理
  • 碰一碰支付系统搭建怎么做?头部公司源码大测评!
  • 基于Qt的多线程并行和循序运行实验Demo
  • uniapp使用easyinput文本框显示输入的字数和限制的字数
  • (7) cuda异常处理
  • SSM学习day01 JS基础语法
  • vue 解决:npm ERR! code ERESOLVE 及 npm ERR! ERESOLVE could not resolve 的方案
  • 谷歌仓库管理工具repo
  • 基于Matlab 疲劳检测系统
  • 一个临床数据收集/调查问卷APP模板(streamlit+MongoDB)
  • django celery 定时任务 Crontab 计划格式
  • 无线麦克风方案芯片DSH32F3024
  • OpenCV ORB角点检测匹配和偏移计算
  • QT 机器视觉 1.相机类型
  • springboot集成camunda学习与使用
  • 微信小程序 - 图像加载时渐隐淡入效果 image,实现渐入渐出动画效果,微信小程序实现图片加载淡入淡出效果,图像加载时的渐隐淡入效果!
  • 全网最简单的Java设计模式【九】原型模式深入解析
  • 深入分析梧桐数据库SQL查询之挖掘季度销售冠军
  • 安卓14上蓝牙调用SystemProperties.set(),解决找不到SystemProperties.set()的问题
  • Ubuntu 2张4090,显卡安装,无法双屏显示
  • [产品管理-51]:产品经理:塑造未来的多面手,道、法、术、器的全面掌控
  • 【完整版】opencv-python-headless、opencv-python和opencv-contrib-python区别和联系
  • AI Weekly3:过去一周重要的AI资讯汇总
  • 记录一个docker volume映射目录创建文件报错问题
  • 量子容错计算
  • ts:数组的常用方法(filter)