Spring MVC初探

目录

[1.认识Spring MVC框架](#1.认识Spring MVC框架)

[Sping MVC概述](#Sping MVC概述)

[Spring MVC的特点](#Spring MVC的特点)

DispatcherServlet

[Spring MVC的工作原理](#Spring MVC的工作原理)

解读

[2. 搭建Spring MVC框架](#2. 搭建Spring MVC框架)

1.创建web项目模块

2.引入相关依赖

POM.xml使用变量

POM.xml如何指定jdk

[3.添加Spring MVC的配置文件](#3.添加Spring MVC的配置文件)

添加文件头

4.配置前置控制器

DispatcherServlet配置详情

5.配置编码过滤器

在web.xml中配置用于将请求和响应进行编码,以免中文乱码配置详情

6.编写jsp文件

7.编写控制器

控制器的逻辑解读

8.设置注解自动扫描

9.配置web服务器

部署并设置上下文路径

10.运行验证

视图地址的处理

配置视图解析器

基于视图解析器给视图地址的简化

至此,springMVC的演示就结束了


1.认识Spring MVC框架

Sping MVC概述

Spring MVC是Spring框架中处理MVC的一个模块,它结合了 MVC 模式所有优点和 Spring 的便利性
官方文档:Spring Framework Reference Documentation
中文文档: Spring MVC教程- spring中文网

Spring MVC的特点

① 与 Spring 兼容性好,无缝结合
② 分离了控制器、模型对象、分派器以及处理程序对象的角色,更容易定制
③ 功能强大,支持注解驱动、 RESTful 、数据验证、格式化、本地化、主题等功能
④ 高度可配置,支持多种视图技术 , 不仅限于 JSP
⑤ 采用 松耦合可插入 组件结构,比其他 MVC 框架更具扩展灵活性
⑥ 简单易学

DispatcherServlet

Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕DispatcherServlet,分派请求并提供其他功能

Spring 使用DispatcherServlet 前控制器模式实现 MVC
DispatcherServlet继承自HttpServlet 基类,负责将请求路由到预定目的地的主要控制器
Model 只是应用的数据
视图则由各种模板引擎来表示

从Spring 2.5开始,使用Java 5或者以上版本的用户可采用基于注解的controller声明方式

Spring MVC的工作原理

解读

客户端发送请求,前端控制器DispatcherServlet接收请求

DispatcherServlet调用映射处理器HandlerMapping,将URL映射到对应处理器Controller

Controller调用业务逻辑,完成业务处理,并将处理结果ModelAndView对象返给DispatcherServlet

DispatcherServlet将ModelAndView传给视图解析器ViewReslover进行解析

ViewReslover将解析结果View,返回给DispatcherServlet

DispatcherServlet根据View和Model渲染视图响应给客户端

2. 搭建Spring MVC框架

① 创建 web 项目模块
② 导入相关依赖
③ 添加 配置文件 spring-mvc.xml
④ 配置 前置控制器 DispatcherServlet
⑤ 配置 编码过滤器 CharacterEncodingFilter
⑥ 编写 jsp 文件
⑦ 编写 Controller
⑧ 配置组件自动扫描
⑨ 配置 web 服务器
⑩ 运行验证

1.创建web项目模块

在项目 SpringMVCDemo 中添加模块 MvcXml

**2.**引入相关依赖

bash 复制代码
<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>
    <parent>
        <groupId>org.flowerfog</groupId>
        <artifactId>SpringMvcDemo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>org.flowerfog</groupId>
    <artifactId>MvcXml</artifactId>
    <packaging>jar</packaging>

    <name>MvcXml</name>
    <url>http://maven.apache.org</url>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <org.springframework.version>6.0.2</org.springframework.version>
        <org.junit.jupiter.api.version>5.3.1</org.junit.jupiter.api.version>
        <org.projectlombok.version>1.18.30</org.projectlombok.version>
    </properties>

    <dependencies>
        <!--spring web依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <!--spring-webmvc依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <!--junit5测试-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${org.junit.jupiter.api.version}</version>
        </dependency>
        <!--lombok插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${org.projectlombok.version}</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>MvcXml</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

POM.xml****使用变量

POM.xml如何指定jdk

3.添加Spring MVC****的配置文件

resources下创建配置文件spring-mvc.xml

添加文件头

bash 复制代码
<?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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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
http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 这里添加其他配置 -->

</beans>

**4.**配置前置控制器

在 web.xml 中配置
SpringMVC 是 基于 Servlet 的框架
DispatcherServlet是Spring MVC 框架的核心
DispatcherServlet 主要职责 是接收用户请求,并将其分派给相应的 C ontroller来处理

DispatcherServlet****配置详情

bash 复制代码
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!-- 配置DispatcherServlet -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 自动加载spring-mvc.xml -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:Spring-mvc.xml</param-value>
    </init-param>
    <!--当值≥0时,启动时就加载;当值<0或不指定时,则表示第一次请求时加载-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 配置DispatcherServlet接受所有URL请求 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

**5.**配置编码过滤器

在web.xml中配置

用于将请求和响应进行编码,以免中文乱码
配置详情

bash 复制代码
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!-- 配置DispatcherServlet -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 自动加载spring-mvc.xml -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:Spring-mvc.xml</param-value>
    </init-param>
    <!--当值≥0时,启动时就加载;当值<0或不指定时,则表示第一次请求时加载-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 配置DispatcherServlet接受所有URL请求 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!-- 编码过滤器,解决中文乱码问题 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

6.编写jsp****文件

在WEB-INF文件夹下,新建views文件夹,用来统一管理所有的jsp页面

在views文件夹下新建hello.jsp页面

**7.**编写控制器

规划控制器的包

新建控制器类HelloController

控制器的逻辑解读

@Controller 注解标识该类为控制器
@RequestMapping("/hello") 注解表示用户请求访问hello方法的映射路径url

控制器中的方法我们称为Action

**8.**设置注解自动扫描

修改spring-mvc.xml

通过扫描将controller配置到Spring容器

bash 复制代码
<?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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 将控制器扫描到容器中 -->
    <context:component-scan base-package="org.flowerfog.controller"/>
    <!-- 开启SpringMVC框架的注解驱动 -->
    <mvc:annotation-driven/>

</beans>

9**.配置web****服务器**

部署并设置上下文路径

**10.**运行验证

视图地址的处理

配置视图解析器

在spring-mvc.xml中加入视图解析器配置

bash 复制代码
<?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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 将控制器扫描到容器中 -->
    <context:component-scan base-package="org.flowerfog.controller"/>
    <!-- 开启SpringMVC框架的注解驱动 -->
    <mvc:annotation-driven/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

视图解析器在控制器返回视图时自动加上前缀和后缀

基于视图解析器给视图地址的简化

java 复制代码
package org.flowerfog.controller;

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

@Controller
@RequestMapping("/hello")
public class HelloController {
    @RequestMapping("/index")
    public String index(){
        return "hello";
    }
}

至此,springMVC的演示就结束了

相关推荐
CodeAmaz3 分钟前
Spring编程式事务详解
java·数据库·spring
没有bug.的程序员5 分钟前
微服务基础设施清单:必须、应该、可以、无需的四级分类指南
java·jvm·微服务·云原生·容器·架构
武子康8 分钟前
Java-204 RabbitMQ Connection/Channel 工作流程:AMQP 发布消费、抓包帧结构与常见坑
java·分布式·消息队列·rabbitmq·ruby·java-activemq
郑州光合科技余经理9 分钟前
海外国际版同城服务系统开发:PHP技术栈
java·大数据·开发语言·前端·人工智能·架构·php
appearappear20 分钟前
Mac 上重新安装了Cursor 2.2.30,重新配置 springboot 过程记录
java·spring boot·后端
CryptoRzz28 分钟前
日本股票 API 对接实战指南(实时行情与 IPO 专题)
java·开发语言·python·区块链·maven
程序员水自流31 分钟前
MySQL数据库自带系统数据库功能介绍
java·数据库·mysql·oracle
谷哥的小弟35 分钟前
Spring Framework源码解析——RequestContext
java·后端·spring·框架·源码
天远Date Lab41 分钟前
Java微服务实战:聚合型“全能小微企业报告”接口的调用与数据清洗
java·大数据·python·微服务
lizz311 小时前
C++操作符重载深度解析
java·c++·算法