SpringMVC一:概述、环境搭建及开发流程

SpringMVC

一、概述
  1. MVC

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

    M:model,模型层,用来处理数据,指Service、Dao、Pojo

    V:view,视图层,用来与用户交互,展示数据,指html页面或jsp页面

    C:controller,控制层,用来接收请求、处理请求、响应浏览器,指Servlet组件

  2. MVC工作流程

    用户通过Browser浏览器(视图层 V)发送请求到服务器,在服务器中请求被Servlet组件(控制层 C)接收,Servlet 调用Service(模型层 M)根据不同的请求进行对应的处理,处理的结果返回Servlet组件(控制层 C),Servlet根据处理的结果投射到相应的html页面上(视图层 V),进行数据渲染后相应到Browser浏览器上

    在这里插入图片描述

  3. SpringMVC

    是SpringMVC是Spring的一个后续产品,是Spring为表述层开发提供的一整套完备的解决方案,目前业界普遍选择SpringMVC作为JavaEE项目表述层开发的首选方案

    曾经的表述层框架:Strust、WebWork、Strust2等

  4. SpringMVC的特点

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

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

    ③ 性能卓越,适合现代大型、超大型互联网项目的要求

二、搭建环境
  1. 创建一个maven工程

    在这里插入图片描述

    在这里插入图片描述

  2. 对maven工程的核心配置文件pom.xml进行配置
    <?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.atguigu.mvc</groupId>
        <artifactId>demo01</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
        </properties>
    
        <!-- 1.配置打包方式为 war 包 -->
        <packaging>war</packaging>
        <!-- 2.添加依赖 -->
        <dependencies>
            <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>
                <scope>provided</scope>
            </dependency>
    
            <!-- Spring5和Thymeleaf整合包 -->
            <dependency>
                <groupId>org.thymeleaf</groupId>
                <artifactId>thymeleaf-spring5</artifactId>
                <version>3.0.12.RELEASE</version>
            </dependency>
    
        </dependencies>
    </project>
    
  3. 配置后通过maven加载对应的jar包

    在这里插入图片描述

  4. 添加web模块,在main目录下新建一个webapp文件夹

    在这里插入图片描述

  5. 在web模块下创建web.xml配置文件

    在这里插入图片描述

    在这里插入图片描述

三、配置文件
  1. 在 web.xml 内配置SpringMVC前端控制器DispatcherServlet 及 url请求模型
    <?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.配置组件的别名和全类名
              因为SpringMVC的前端控制器DispatcherServlet基于Servlet,故使用配置Servlet的方式
    		  配置DispatcherServlet从而对浏览器发送的请求进行统一处理
        -->
        <servlet>
            <servlet-name>DispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 3.通过初始化参数,配置SpringMVC的xml配置文件的位置和名称
                   ①  参数名一定是SpringMVC在其前端控制器DispatcherServlet中定义好的某参数,这样
    				  才会产生对应的功能,此处的param-name:contextConfigLocation,指的是
    				  上下文配置路径
                   ②  contextConfigLocation参数对应的param-value设置的是两部分内容,一个是位置,
    			      一个是名称。
                      所以一定要加上classpath(类路径),classpath对应的就是java或resources(即
                      main文件夹下的两个文件夹)
                   ③  同时,要在resources文件夹下创建一个与classpath后同名的xml配置文件,该xml文件
    				  为spring类型的xml文件,因为springMVC本质就是基于Spring的基础实现的
            -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springMVC.xml</param-value>
            </init-param>
            <!-- 4.设置DispatcherServlet的启动时间
                   因为DispatcherServlet会处理所有的请求,故其初始化时就会执行很多的内容,如果把
    			   这些众多的内容全部放在第一次初始化时执行,就会严重影响我们第一次访问时的速度。
                   故通过下面设置,将DispatcherServlet的初始化时间提前到服务器启动时
             -->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <!-- 2.配置与组件的别名相匹配的url请求模型,即前端控制器DispatcherServlet所能处理的请求的路径  			 模型
               因为DispatcherServlet要处理浏览器发送的所有请求,故此处的url-pattern不能写成某一个
    		   具体的路径,所以写成了:"/"。
               "/":所能匹配的请求可以是.html或.js或.css或/login等各种不同的请求方式,同时屏蔽.jsp
    		   的请求
               注:
                  ①  "/" 之所以不能匹配.jsp的请求,是因为jsp本质上也是servlet,需要服务器中特定的
    			 Servlet组件进行处理后转到jsp页面,故DispatcherServlet不会也不能去匹配.jsp的请求
                  ②  url-pattern不能使用"/*",因为"/*"表示所有类型的请求,包含.jsp
        -->
        <servlet-mapping>
            <servlet-name>DispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    </web-app>
    
  2. 在resources文件夹下创建 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/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd">
    </beans>
    
  3. 创建请求控制器

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

    请求控制器内对应每一个请求的处理方法称为控制器方法

    因为SpringMVC的控制器是由一个普通的Java类担任,因此需要通过@Controller注解将其标识成一个控制层组件,交给SpringMV的IOC容器管理

    @Controller
    public class HelloController {}
    
  4. 配置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
                        http://www.springframework.org/schema/context/spring-context.xsd">
        
        <!-- 1.组件扫描 -->
        <context:component-scan base-package="com.atguigu.mvc"/>
    
        <!-- 2.配置Thymeleaf视图解析器
               ①  order:设置优先级。从而可以推断,在一个xml中可以配置多个Thymeleaf视图解析器
               ②  WEB-INF文件夹下的文件是不能通过Browser或重定向访问的,只能通过转发
               ③  视图名称通过Thymeleaf解析后,会自动加上视图前缀和视图后缀
        -->
        <bean id="viewResolve" 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>
    
  5. 在WEB-INF文件夹下创建templates文件夹,用于存放前端文件
四、访问页面
  1. 访问主页面
    html
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>首页</title>
    </head>
    <body>
      <h1>首页</h1>
    </body>
    </html>
    
    java
    @Controller
    public class HelloController {
        /* 注解@RequestMapping
        	1.通过注解@RequestMapping中的value值,将请求与控制器方法进行匹配,其匹配的类型还有很多种
        	2.这种匹配方式与方法名无关
        	3.首次匹配与tomcat服务器中的url请求设置有关
        	4.返回值:是视图名称,会被thymeleaf视图解析器进行解析,然后加上前缀和后缀,跳转到具体的
        	  html页面
        */
        @RequestMapping(value = "/")
        public String index() {
            return "index";
        }
    }
    
  2. 访问目标页面
    html
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>首页</title>
    </head>
    <body>
      <!-- 访问目标页面
      	   1.前台路径是指,由浏览器解析执行的代码中所包含的路径。例如,html、css、js中的路径。
    	   2.前台路径的参照路径是 Web 服务器的根路径,即 http://localhost:8080/
    	   3.添加th:后,该请求路径被thymeleaf进行了渲染,会自动添加上上下文路径,上下文路径是在
    		 Tomcat服务器中的applicationContext中配置好的:
    	   4.访问路径 = 参照路径 + 上下文路径 + 前台路径
      -->
      <a th:href="@{/target}">访问目标页面target</a>
    </body>
    </html>
    

    注:tomcat中配置的上下文路径

    在这里插入图片描述

    java
    @Controller
    public class HelloController {
        /*
        	1.html页面上通过超链接标签href发来的请求
        	改
        */
        @RequestMapping(value = "/target")
        public String toTarget() {
            return "target";
        }
    
    }
    
五、总结
  1. 功能体简介
    Tomcat

    实现JavaEE规范中的Servlet和JSP的轻量级服务器

    Servlet

    全称为Java Servlet,服务连接器,用于交互式浏览和生成数据,生成动态的web内容,并用于扩展基于HTTP协议的web服务器

    Thymeleaf

    是适用于Web和独立环境的现代服务器端Java模板引擎,模板引擎的作用是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的html文档。从字面上理解模板引擎,最重要的就是模板二字,这个意思就是做好一个模板后套入对应位置的数据,最终以html的格式展示出来,这就是模板引擎的作用。

    Thymeleaf选用html作为模板页,这是任何一款其他模板引擎做不到的!Thymeleaf使用html通过一些特定标签语法代表其含义,但并未破坏html结构,即使无网络、不通过后端渲染也能在浏览器成功打开,大大方便界面的测试和修改。

    maven

    Maven是一个(特别是Java编程)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

    它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

    Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。

    此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。

  2. SpringMVC的具体执行流程

    在这里插入图片描述

参考资料
  1. Maven中groupId和artifactId的含义 - JimHan - 博客园 (cnblogs.com)
  2. Maven中的groupId和artifactId分别是什么_星空_ 灯塔的博客-CSDN博客_artifactid
  3. 关于JavaWeb中绝对路径和相对路径的详细解释、分析各种路径现象的原因及解释 - 爱码网 (likecs.com)
  4. 访问路径的具体讲解_飞飛飜飝的博客-CSDN博客_访问路径
  5. Thymeleaf从入门到精通 - 知乎 (zhihu.com)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e_nanxu

感恩每一份鼓励-相逢何必曾相识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值