SpringMVC —— 1、简述及搭建

目录

1、SpringMVC简介

1.1、什么是 MVC

1.2、什么是 SpringMVC

1.3、SpringMVC 的特点

2、Hello Word

2.1、开发环境

2.2、创建工程

2.2.1 创建 Maven 模块

2.2.2、配置 web.xml

        a、默认配置方式

        b、扩展配置方式(需要创建 SpringMVC.xml)

2.2.3、创建请求控制器

2.2.4、创建 SpringMVC 的配置文件

2.2.5、测试 HelloWorld

        a、实现对首页的访问

        b、通过超链接跳转到指定页面

2.3、总结


1、SpringMVC简介

1.1、什么是 MVC

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

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

JavaBean分为两类:

  • 一类称为实体类Bean:专门存储业务数据的,如 Student、User 等

  • 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。

V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据

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

MVC的工作流程: 用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器

1.2、什么是 SpringMVC

SpringMVC是Spring的一个后续产品,是Spring的一个子项目

SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Strust、WebWork、Strust2 等诸多产品的历代更迭之后,目前业界普遍选择了 SpringMVC 作为 Java EE 项目表述层开发的首选方案

注:三层架构分为表述层(或表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台servlet

1.3、SpringMVC 的特点

  • Spring 家族原生产品,与 IOC 容器等基础设施无缝对接

  • 基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理

  • 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案

  • 代码清新简洁,大幅度提升开发效率

  • 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可

  • 性能卓著,尤其适合现代大型、超大型互联网项目要求

2、Hello Word

2.1、开发环境

IDE:idea 2021.2

构建工具:maven 3.6.1

服务器:tomcat 8

Spring版本:5.3.1

2.2、创建工程

2.2.1 创建 Maven 模块

① 在项目结构中创建 Maven 模块,并标记各个文件夹

② 在 pom.xml 中设置打包方式为 war,位置及格式如下:

    <groupId>com.zyj.mvc</groupId>
    <artifactId>springMVC-demo1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

③ 引入依赖

<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>
            <!-- provided在打包时不会被一起打包,该依赖由服务器提供 -->
            <scope>provided</scope>
        </dependency>

        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>

④ 在 src - main 目录下创建 webapp 文件夹(注意该文件夹的图标要有小蓝点,若没有,在项目结构中点击 - 号移除并重新创建),在项目结构中的部署描述符添加 web.xml ,注意添加的路径要在该模块的 src - main - webapp 目录下

2.2.2、配置 web.xml

注册SpringMVC的前端控制器 DispatcherServlet

a、默认配置方式

此配置作用下,SpringMVC的配置文件默认位于WEB-INF下,默认名称为 <servlet-name>-servlet.xml,例如,以下配置所对应SpringMVC的配置文件位于WEB-INF下,文件名为springMVC-servlet.xml

    <!-- 配置SpringMVC的前端控制器DispatcherServlet,对浏览器发送的请求进行统一处理 -->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <!--
            设置springMVC的核心控制器所能处理的请求的请求路径
            / 所匹配的请求可以是/login或.html或.js或.css方式的请求路径
            但是 / 不能匹配.jsp请求路径的请求
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

b、扩展配置方式(需要创建 SpringMVC.xml)

可通过 init-param 标签设置SpringMVC配置文件的位置和名称,通过 load-on-startup 标签设置SpringMVC前端控制器DispatcherServlet的初始化时间。注意:需要在 src - main - resources 目录下创建 SpringMVC.xml

    <!-- 扩展配置方式 -->
    <!-- 配置SpringMVC的前端控制器DispatcherServlet,对浏览器发送的请求进行统一处理 -->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 配置SpringMVC配置文件的位置和名称 -->
        <init-param>
            <!-- contextConfigLocation为固定值 -->
            <param-name>contextConfigLocation</param-name>
            <!-- 使用 classpath: 表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
            <param-value>classpath:springMVC.xml</param-value>
        </init-param>
        <!--
            load-on-startup 含义:
                1、它的值必须是一个整数,表示servlet应该被载入的顺序
                2、当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet
                3、当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载
                4、正数的值越小,该servlet的优先级越高,应用启动时就越先加载
                5、当值相同时,容器就会自己选择顺序来加载

            作为框架的核心组件,在启动过程中有大量的初始化操作要做
		    而这些操作放在第一次请求时才执行会严重影响访问速度
		    因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时
        -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <!--
            设置springMVC的核心控制器所能处理的请求的请求路径
            / 所匹配的请求可以是/login或.html或.js或.css方式的请求路径
            但是 / 不能匹配.jsp请求路径的请求
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

2.2.3、创建请求控制器

由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器

请求控制器中每一个处理请求的方法称为控制器方法

因为SpringMVC的控制器由一个POJO(普通的Java类)担任,因此需要通过 @Controller 注解将其标识为一个控制层组件,交给Spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在

在 src - main - java 目录下新建类 com.zyj.mvc.controller.HelloController

@Controller
public class HelloController {
    
}

2.2.4、创建 SpringMVC 的配置文件

在 src - main - webapp - WEB-INF 下创建 templates 目录,在 templates 目录下新建 index.html

注意:需要添加 thymeleaf 命名空间,如下

<!DOCTYPE html>
<!-- xmlns:th="http://www.thymeleaf.org 是thymeleaf的命名空间 -->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <h1>首页</h1>
</body>
</html>

配置 SpringMVC.xml 

<!-- 配置扫描组件 -->
    <context:component-scan base-package="com.zyj.mvc.controller"></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>

    <!--
        处理静态资源,例如html、js、css、jpg
        若只设置该标签,则只能访问静态资源,其他请求则无法访问
        此时必须设置<mvc:annotation-driven/>解决问题
    -->
    <mvc:default-servlet-handler/>

    <!-- 开启mvc注解驱动 -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <!-- 处理响应中文内容乱码 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="defaultCharset" value="UTF-8" />
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html</value>
                        <value>application/json</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

2.2.5、测试 HelloWorld

a、实现对首页的访问

在请求控制器 HelloController 中创建处理请求的方法

@Controller
public class HelloController {

    // 请求路径:/
    // 访问页面:/WEB-INF/templates/index.html
    // 请求映射注解,当浏览器请求路径为value值时执行该方法,若只设置value的值,value可省略不写
    @RequestMapping(value = "/")
    // 只设置value的值,value可省略不写:@RequestMapping("/")
    public String index(){
        // 返回视图名称:访问页面去掉 springMVC.xml 中配置的视图前缀和视图后缀就是要返回的视图名称
        return "index";
    }

}

在 IDEA 上方添加配置,创建 Tomcat本地 配置,在 部署 中添加 工件,选择相应的模块(注:若点击 + 号后没有工件选项,可能是 pom.xml 中没有配置打包方式),更改 应用程序上下文

 服务器选择如下

 运行,若出现 java错误:不支持发行版本5 报错,解决办法:JAVA: 错误: 不支持发行版本 5 解决方法_第五只狗 的博客-CSDN博客_java不支持发行版本

b、通过超链接跳转到指定页面

注意:该方法的请求方式是转发,点击超链接后跳转的地址是 http://localhost:8080/springMVC/target,而不是以 .html 结尾

在主页index.html中设置超链接

<!DOCTYPE html>
<!-- xmlns:th="http://www.thymeleaf.org 是thymeleaf的命名空间 -->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <h1>首页</h1>
    <!--
        href前加上 th: 后就可以被thymeleaf解析
        @{}:当检测到使用的是绝对路径,会自动添加上下文路径
    -->
    <a th:href="@{/target}">访问目标页面target.html</a>
</body>
</html>

在请求控制器类 HelloController类 中创建处理请求的方法

    @RequestMapping("/target")
    public String toTarget(){
        return "target";
    }

在 src/main/webapp/WEB-INF/templates 目录下新建 target.html 页面,内容如下(其实就显示HelloWorld而已)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset=" UTF-8">
    <title>Title</title>
</head>
<body>
    HelloWorld
</body>
</html>

2.3、总结

浏览器发送请求,若请求地址符合前端控制器的url-pattern,该请求就会被前端控制器DispatcherServlet处理。前端控制器会读取SpringMVC的核心配置文件,通过扫描组件找到控制器,将请求地址和控制器中@RequestMapping注解的value属性值进行匹配,若匹配成功,该注解所标识的控制器方法就是处理请求的方法。处理请求的方法需要返回一个字符串类型的视图名称,该视图名称会被视图解析器解析,加上前缀和后缀组成视图的路径,通过Thymeleaf对视图进行渲染,最终转发到视图所对应页面

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值