SpringMVC -- MVC SpringMVC简介快速入门案例(web.xml的2种配置方式设置HTML模板)

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC -- MVC SpringMVC简介快速入门案例(web.xml的2种配置方式设置HTML模板)相关的知识,希望对你有一定的参考价值。

1. SpringMVC简介


1.1 学习内容


1.2 什么是MVC

最典型的MVC就是JSP + servlet + javabean的模式。


1.3 SpringMVC简介

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

1.4 SpringMVC的特点


2. 快速入门案例

准备工作:导入相关的依赖

pom.xml

    <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表明当前依赖不需要参与打包, 因为Tomcat服务器中已经有了   -->
            <scope>provided</scope>
        </dependency>
        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>

注:由于 Maven 的传递性,我们不必将所有需要的包全部配置依赖,而是配置最顶端的依赖,其他靠传递性导入。


2.1 新建一个maven工程 在里面创建demo1子模块(使用模板创建)


2.2 web.xml的2种配置方式


2.2.1 默认配置方式(不推荐 因为Maven工程的配置文件应该统一放在resources目录下面)

说明:

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

web.xml

<?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">
    <!-- 配置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请求路径的请求

         /* 可以匹配所有请求 包括jsp
         -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2.2.2 拓展配置方式(推荐使用)

可通过init-param标签设置SpringMVC配置文件的位置和名称,通过load-on-startup标签设置SpringMVC前端控制器DispatcherServlet的初始化时间

web.xml

<?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">
    <!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
    <!--    注册DispatcherServlet-->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
        <init-param>
            <!-- contextConfigLocation为固定值 已经在DispatcherServlet中定义好了-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springMVC.xml</param-value>
        </init-param>
        <!--作为框架的核心组件,在启动过程中有大量的初始化操作要做
        而这些操作放在第一次请求时才执行会严重影响访问速度
        因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时 -->
        <load-on-startup>1</load-on-startup>
    </servlet>


    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <!--设置springMVC的核心控制器所能处理的请求的请求路径
         /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
         但是/不能匹配.jsp请求路径的请求

         /* 可以匹配所有请求 包括jsp
         -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

2.3 创建请求控制器

  • 由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器
  • 请求控制器中每一个处理请求的方法成为控制器方法
  • 因为SpringMVC的控制器由一个POJO(普通的Java类)担任,因此需要通过@Controller注解将其标识为一个控制层组件,交给Spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在

HelloController.java

package com.tian.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {

    /**
     * 通过@RequestMapping注解,可以通过请求路径匹配要处理的具体的请求
     *
     * @RequestMapping注解:处理请求和控制器方法之间的映射关系 注解的value属性可以通过请求地址匹配请求,/表示的当前工程的上下文路径
     */
    @RequestMapping("/")
    public String index() {
        return "index";
    }
}

2.4 创建springMVC的配置文件

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="com.tian.controller"/>

    <!-- 配置Thymeleaf视图解析器 可以跳转解析html页面
         如果需要解析jsp页面 请使用InternalResourceViewResolver视图解析器-->
    <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>

2.5 测试HelloWorld


2.5.1 创建index.html文件

<!DOCTYPE html>
<!--xmlns:th="http://www.thymeleaf.org"是thymeleaf模板引擎的命名空间
我们如果要使用thymeleaf就需要加上这个-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h1>首页</h1>
</body>
</html>

2.5.2 每次都自己写命名空间太麻烦了,我们来设置HTML模板

2.5.3 测试对首页的访问

配置Tomcat服务器:

访问首页:


2.5.4 测试访问目标页面

修改刚刚的页面: 加上页面跳转:

index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h1>首页</h1>
<!--th: 是使用thymeleaf的语法 @{/target}表示thymeleaf帮你解析相对路径-->
<a th:href="@{/target}">访问目标页面target.html</a>
</body>
</html>

新建目标页面:

target.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>目标</title>
</head>
<body>
HelloWorld
</body>
</html>

控制器中新增方法,完成访问目标页面:

HelloController.java

package com.tian.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {


    /**
     * 通过@RequestMapping注解,可以通过请求路径匹配要处理的具体的请求
     *
     * @RequestMapping注解:处理请求和控制器方法之间的映射关系 注解的value属性可以通过请求地址匹配请求,
     * /表示的当前工程的上下文路径
     */
    @RequestMapping("/")
    public String index() {
        return "index";
    }

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

}

重启服务器,查看运行结果:


2.6 总结

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



以上是关于SpringMVC -- MVC SpringMVC简介快速入门案例(web.xml的2种配置方式设置HTML模板)的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC入门第1天--框架说明与快速入门

Spring MVC入门讲解

SpringMVC 视图解析器 InternalResourceViewResolver

SpringMVC接受JSON参数详解及常见错误总结我改

SpringMVC08:拦截器+文件上传下载

Android(或者Java)通过HttpUrlConnection向SpringMVC请求数据(数据绑定)