SpringMVC简介及入门

SpringMVC简介及入门

最近开始学SpringMVC了,首先记点笔记带自己了解一下SpringMVC。

SpringMVC简介

一、什么是MVC

MVC是一种软件架构的思想,将软件按照横型、视图、控制器来划分

M:即Model,模型层,特指工程中的JavaBean,作用是处理数据。

JavaBean分为两类:
  • 实体类JavaBean:专门存储业务数据的,如Book、User等
  • 业务处理类Bean:指Service或Dao对象,专门用来处理业务逻辑和数据访问。

V:即View,视图层,指工程中的静态文件,如HTML页面或jsp页面等,作用是展示数据,用户交互。

C:即Controller,控制层,指工程中的servlet,作用是接收请求和响应。

MVC工作流程:

用户通过视图层向服务器发送请求,被服务器中Controller层接收后,Controller层会调用相关的Model层处理该请求,处理完毕后结果会返回到Controller层,然后Controller层会根据处理结果找到相应的View视图,渲染数据后响应给浏览器。

二、什么是SpringMVC

Spring MVC属于Spring框架的后续产品,是Spring的子项目,

已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

三、SpringMVC的特点

  • Spring家族原生产品,拥有强大的灵活性,非侵入性和可配置性,可与IOC容器无缝对接。
  • 基于原生Servlet,提供了一个前端控制器 DispatcherServlet ,开发者无须额外开发控制器对象。
  • 分工明确,功能齐全,包括控制器、验证器、命令对象、处理器映射器、视图解析器等,每一个功能实现由一个专门的对象负责。
  • 代码清晰简洁,大幅度提升开发效率。
  • 内部组件化程度高,可实现即插即用,提供全面解决方案。
  • 性能卓越,尤其适合现代大型、超大型互联网项目要求。

SpringMVC入门(我的第一个SpringMVC程序)

这里我们通过一个国际知名程序Hello World来进行入门。

一、开发环境

IDE:idea2021.3

构建工具:maven3.8.1

服务器:Tomcat9.0.59

Spring版本:5.3.1

二、创建maven工程

  1. 创建一个空工程

  2. 在这个新工程上右键new一个Module
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vFkKKBkQ-1652865709075)(C:/Users/19638/AppData/Roaming/Typora/typora-user-images/image-20220518141325738.png)]

  3. 选择maven然后取名字,博主取的是SpringMVC-demo1,然后一路next,创建好后项目结构如下
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EaZ1oxg2-1652865709077)(C:/Users/19638/AppData/Roaming/Typora/typora-user-images/image-20220518141611849.png)]

  4. 在pom.xml里导入如下依赖

        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.3.19</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.2.3</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.thymeleaf</groupId>
                <artifactId>thymeleaf-spring5</artifactId>
                <version>3.0.12.RELEASE</version>
            </dependency>
        </dependencies>
    
  5. 点击File选择项目结构,然后右键添加web模块
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6rXXgqVL-1652865709077)(C:/Users/19638/AppData/Roaming/Typora/typora-user-images/image-20220518141953951.png)]

  6. 点击这个Web,如图依次创建web目录和配置文件web.xml
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S5NzZt6k-1652865709078)(C:/Users/19638/AppData/Roaming/Typora/typora-user-images/image-20220518142318349.png)] 我的路径是C:\Users\19638\Desktop\Neuedu\SprinMVC\SpringMVC-demo1\src\main\webapp
    然后web.xml的路径是C:\Users\19638\Desktop\Neuedu\SprinMVC\SpringMVC-demo1\src\main\webapp\WEB-INF\web.xml 填上路径后点击apply然后ok就行了。

  7. 配置完成后就能看到配置的文件和里面的web.xml了
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m3jz6r80-1652865709079)(C:/Users/19638/AppData/Roaming/Typora/typora-user-images/image-20220518142907000.png)]

  8. 至此maven工程就创建完成了

三、配置web.xml

有两种配置方式,分别是

  • 默认配置方式
  • 拓展配置方式

两者皆可,二选一,一般都选拓展配置方式,后面会讲到原因。

默认配置方式

此配置下,springMVC的配置文件默认位于WEB-INF下,默认名称为<servlet-name>-servlet.xml,即配置文件为SpringMVC-servlet.xml。

    <!--  配置springMVC的前端控制器,对浏览器的发送的请求进行同意处理  -->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
<servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <!--
        设置springMVC的核心控制器所能处理的请求路径
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
注意

.jsp本质是一个servlet,它需要经过服务器中指定的servlet,一个特殊的servlet进行处理,不需要由DispatcherServlet进行处理,如果配置的路径能够处理.jsp的话,SpringMVC则会将.jsp当成普通的请求处理,这么一来就找不到相应的.jsp页面了。

“/”所匹配的请求可以是/login或.html或.css方式的所有请求路径,但是“/”不匹配.jsp请求路径的请求。

“/*”所匹配的请求是所有请求,包括了.jsp

所以这里使用"/“而不使用”/*"

拓展配置方式

比默认配置方式多一些配置,而且我们常用的也是拓展配置方式。

  1. 首先在resources目录下new一个配置文件springMVC.xml
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rjwJzBih-1652866338104)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518145646210.png)]

  2. 在默认配置文件的<servlet>标签中加上一个<init-parm>标签,具体如下

        <!--  配置springMVC的前端控制器,对浏览器的发送的请求进行同意处理  -->
        <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>
                <!--将前端控制器DispatcherServlet的初始化时间提前到服务器启动时-->
                <load-on-startup>1</load-on-startup>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>SpringMVC</servlet-name>
            <!--设置springMVC的核心控制器所能处理的请求路径-->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    注意

    servlet对所有的请求默认在第一次访问时初始化,而springMVC的前端控制器中封装了当前对所有请求的处理,初始化中需要处理很多的内容,如果全部放在第一次访问时初始化,那么就会严重影响第一次访问时的速度。所以我们需要加上<load-on-startup>1</load-on-startup>这一条配置将前端控制器DispatcherServlet的初始化时间提前到服务器启动时。

四、创建请求控制器

在如下目录中创建一个HelloController类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PzDa4RGA-1652866338105)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518152111340.png)]
然后在类上加上@Controller

五、springMVC.xml配置文件配置

首先开启组件扫面

<context:component-scan base-package="springMVC"></context:component-scan>

配置thymeleaf视图解析器(内容较多一般直接复制)

    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!--视图前缀-->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!--视图后缀-->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

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"
       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-scan base-package="springMVC"></context:component-scan>

    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!--视图前缀-->
                        <property name="prefix" value="/WEB-INF/templates"/>
                        <!--视图后缀-->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>

六、实现对首页的访问

首先创建一个首页的html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4usEuQVy-1652866338105)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518161714850.png)]

注意
如果需要使用thymeleaf的语法要加上红框中的那一行。

然后配置Tomcat服务器,步骤如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vHXwl1ma-1652866338106)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518162111009.png)]
点击ok以后就来到了下图窗口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zADc340m-1652866338106)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518162213884.png)]
点击第二个,ok
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hTCyDDrn-1652866338106)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518162237812.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-816VmTB2-1652866338107)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518162412914.png)]
然后点击Server,做如下配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q2vTfyug-1652866338107)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518162700628.png)]

注意

红框中需要配置自己本地的Tom服务器,只要点击Configure选择本地TomCat的安装路径,Idea就会自动识别本地Tomcat的版本。

最后点击ok
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DBOQiJjO-1652866338108)(D:/SpringMVC学习笔记/SpringMVC简介及入门/asset/image-20220518162739048.png)]
Idea里就多出来了这个,最后点右边的运行或者Debug都可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RtwEniK-1652866338117)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518163036024.png)]
可以看到,我的index已经访问成功了。

最后在控制台可以看到请求信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iw4pYzzG-1652866338118)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518163559215.png)]

七、访问目标页面

  1. 首先我们在首页加上一个a标签 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fqxtnqLH-1652866338118)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518171438076.png)]

    注意
    这里的路径用的是浏览器解析的绝对路径,需要用thymeleaf的语法,在运行时会自动给它加上上下文路径,另外,不需要加.html,这个属于下文,thymeleaf会自动给你加上。
  2. 然后创建一个target.html,在body中写上一HelloWorld。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eq4Oo0sn-1652866338119)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518170347871.png)]

  3. 在控制器中创建一个方法处理该跳转请求。

        @RequestMapping(value = "/target")
        public String toTarget(){
            return "target";
        }
    
  4. 点击运行后出现如下页面
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ue9GzUEC-1652866338119)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518165432274.png)]

  5. 之后点击超链接进行跳转。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GA98k8MU-1652866338120)(D:/SpringMVC%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/SpringMVC%E7%AE%80%E4%BB%8B%E5%8F%8A%E5%85%A5%E9%97%A8/asset/image-20220518171722389.png)]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值