SpringMVC入门指南

这篇具有很好参考价值的文章主要介绍了SpringMVC入门指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、什么是SpringMVC

二、MVC架构模式

三、SpringMVC的工作流程

四、SpringMVC核心组件

五、SpringMVC的优势

六、SpringMVC的配置与常用注解

七、SpringMvc请求处理流程、 控制器的编写 、视图的渲染

1.请求处理流程:

2.控制器的编写:

3.视图的渲染:

八、SpringMVC入门

1.添加pom.xml依赖

2.创建spring-mvc.xml 

3.配置web.xml

4.编写web层

5.静态资源处理


前言

SpringMVC的基本概念和工作流程。我们知道了MVC架构模式的重要性,以及如何使用SpringMVC来开发Web应用程序。希望这篇文章能够帮助你入门SpringMVC,并在实际项目中发挥作用。

一、什么是SpringMVC

SpringMVC是一种基于Java的Web框架,用于开发灵活、高效的Web应用程序。它是Spring框架的一部分,提供了一种模型-视图-控制器(MVC)的架构模式,用于将应用程序的不同部分分离开来,以实现更好的可维护性和可扩展性。

二、MVC架构模式

在理解SpringMVC之前,让我们先了解一下MVC架构模式。MVC代表模型(Model)、视图(View)和控制器(Controller)。这种模式将应用程序分为三个主要部分,每个部分都有不同的职责。

  • 模型(Model):模型代表应用程序的数据和业务逻辑。它负责处理数据的读取、存储和操作。在SpringMVC中,模型通常是一个Java对象,用于封装数据。

  • 视图(View):视图负责展示模型的数据给用户。它可以是一个HTML页面、一个XML文档或者其他任何形式的用户界面。在SpringMVC中,视图通常是一个JSP页面或者Thymeleaf模板。

  • 控制器(Controller):控制器负责处理用户的请求,并根据请求的内容选择合适的模型和视图。它是应用程序的中心协调者,负责处理业务逻辑和控制流程。在SpringMVC中,控制器通常是一个Java类,使用注解或配置文件来定义请求映射和处理方法。

三、SpringMVC的工作流程

SpringMVC入门指南,SpringMVC,spring,mybatis,java,intellij-idea,maven,servlet

  1. 用户发来一个请求,首先进入的是前端控制器DispatcherServlet

  2. 前端控制器(DispacherServlet)将用户发来的请求发送给处理器映射器(HandlerMapping)

  3. 处理器映射器根据前端控制器发来的用户的请求找到对应符合的控制器(Handler),并且将其封装成处理器执行链,返回给前端控制器。

  4. 处理器适配器接收到来自前端控制器的执行链后,找到对应执行此执行链的处理器适配器(HandlerAdapter)来调用的具体的控制器(就是说其对应的方法或者逻辑)

  5. 处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller(处理业务逻辑)

  6. 控制器执行完成后,会返回一个ModelAndView对象给处理器适配器

  7. 处理器适配器将返回来的ModelAndView对象返回给前端控制器(到这里所有的业务处理过程就要完了,接下就是将结果以页面的的形式响应给用户)

  8. 前端控制器将返回回来的ModelAndView对象交给视图解析器(ViewResolver),视图解析器根据传过来的View对象解析成对应的页面对象

  9. ViewResolver 将封装好的将页面对象和Model对象返回给 DIspatcherServlet

  10. 前端控制器再将返回回来的对象交给视图(View)

  11. 视图根据传过来的Model对象再一次的对页面进行渲染(将模型数据填充至视图中),然后在返回给前端控制器。

  12. 前端控制器将完成的结果响应给浏览器,然后浏览器在展现给用户。

四、SpringMVC核心组件

  • DispatcherServlet

DispatcherServlet是SpringMVC框架了里面的前端控制器

作用:统一处理用户发来的请求并和响应,相当于一个中间转换器,减少了各个组件之间的调度,减少的耦合性。

  • HandlerMapping

HandlerMapping是SpringMVC框架里面的处理器映射器

作用:根据请求发来的url 和method找到对应的Handler(就是说在一个用到SpringMVC框架的项目中会有好多方法和逻辑,这个组件的作用就是找到对应的方法和组件返回给前端控制器)

  • Handler

Handler处理器,注意,这个需由工程师自己开发。

作用:在 DispatcherServlet 的控制下,Handler对具体的用户请求进行处理。

  • HandlerAdapter

HandlerAdapter是SpringMVC框架提供的处理器适配器

作用:根据映射器找到的处理器Handler信息,按照特定的规则去执行相关的处理器 Handler。

  • ViewResolver

ViewResolver是SpringMVC框架提供的视图解析器

作用:就是字如其名,就是用来将处理的结果解析成视图来展现给用户。视图解析器根据逻辑视图名解析成物理视图名,生成View视图对象,最后对视图进行渲染响应给用户。

  • View

View是开发者自己提供的视图

作用:根据model对象的要求来渲染页面,然后前端控器在响应给用户。

五、SpringMVC的优势

  1. 灵活性:SpringMVC提供了灵活的配置选项和扩展点,可以根据项目的需求进行定制。
  2. 可测试性:SpringMVC的代码结构清晰,易于编写单元测试和集成测试。
  3. 易于集成:SpringMVC可以与其他Spring框架(如Spring Boot)和第三方库(如Hibernate)无缝集成。
  4. 高效性:SpringMVC采用了基于注解的开发方式,减少了冗余的配置代码,提高了开发效率。

六、SpringMVC的配置与常用注解

在使用SpringMVC之前,需要进行一些配置工作。主要包括以下几个方面:

  1. 配置DispatcherServlet:在web.xml文件中配置DispatcherServlet,并指定它的URL映射。
  2. 配置HandlerMapping:通过注解或XML配置文件将处理器(Controller)映射到URL。
  3. 配置ViewResolver:通过注解或XML配置文件指定视图解析器的类型和位置。

SpringMVC提供了一些常用的注解,用于简化开发过程。以下是一些常用的注解及其作用:

  1. @Controller:标识一个类为处理器(Controller)。
  2. @RequestMapping:将请求URL映射到处理器的方法。
  3. @RequestParam:获取请求参数的值。
  4. @PathVariable:获取URL路径中的变量值。
  5. @ResponseBody:将方法的返回值直接作为响应体返回给客户端。

七、SpringMvc请求处理流程、 控制器的编写 、视图的渲染

1.请求处理流程:

当客户端发送一个HTTP请求到服务器时,Spring MVC会按照以下步骤处理请求:

  • 客户端发送请求到DispatcherServlet。
  • DispatcherServlet根据请求的URL找到对应的处理器映射器(HandlerMapping)。
  • 处理器映射器将请求映射到一个具体的处理器(Controller)。
  • 处理器执行业务逻辑,并返回一个ModelAndView对象。
  • DispatcherServlet将ModelAndView对象传递给视图解析器(ViewResolver)。
  • 视图解析器根据ModelAndView中的视图名解析出一个具体的视图对象。
  • DispatcherServlet将ModelAndView和视图对象传递给视图对象,进行视图渲染。
  • 渲染后的视图生成响应,返回给客户端。

2.控制器的编写:

控制器是Spring MVC中负责处理请求的组件。编写控制器的步骤如下:

  • 创建一个Java类,并使用@Controller注解标记该类为控制器。
  • 在控制器类中定义处理请求的方法,使用@RequestMapping注解标记该方法对应的URL路径。
  • 在方法中编写业务逻辑,并返回一个ModelAndView对象,该对象包含了处理结果和要渲染的视图名。

3.视图的渲染:

        视图是用来展示处理结果的组件。Spring MVC支持多种视图技术,如JSP、Thymeleaf、Freemarker等。视图的渲染由视图解析器(ViewResolver)负责。视图解析器根据视图名解析出一个具体的视图对象,然后将ModelAndView对象和视图对象传递给视图对象进行渲染。

八、SpringMVC入门

1.添加pom.xml依赖

在视图解析时需要用到jstl+standard的这两个jar包

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>mybatis_spring</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>mybatis_spring Maven Webapp</name>
  <url>http://maven.apache.org</url>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version>
 
        <!--添加jar包依赖-->
        <!--1.spring 5.0.2.RELEASE相关-->
        <spring.version>5.0.2.RELEASE</spring.version>
 
        <!-- jstl+standard -->
        <jstl.version>1.2</jstl.version>
        <standard.version>1.1.2</standard.version>
        <!-- spring -->
        <spring.version>5.0.2.RELEASE</spring.version>
    </properties>
 
 
    <dependencies>
        <!--1.spring相关-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
 
 
        <!-- spring mvc相关依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>${standard.version}</version>
        </dependency>
    </dependencies>
 
  <build>
      <finalName>mybatis_spring</finalName>
  </build>
</project>

2.创建spring-mvc.xml 

<?xml version="1.0" encoding="UTF-8"?>
<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"
       xmlns="http://www.springframework.org/schema/beans"
       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-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--1) 扫描com.zking.zf及子子孙孙包下的控制器(扫描范围过大,耗时)
配置了Spring框架的组件扫描功能,指定了需要扫描的包路径。Spring将会自动扫描这个包及其子包中的类,并将其注册为Spring的组件。
-->
    <context:component-scan base-package="com.ctb"/>
 
    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:annotation-driven/>
 
    <!--3) 创建ViewResolver视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
 
    <!--4) 单独处理图片、样式、js等资源 -->
    <mvc:resources location="/css/" mapping="/css/**"/>
     <mvc:resources location="/js/" mapping="/js/**"/>
     <mvc:resources location="WEB-INF/images/" mapping="/images/**"/>
</beans>

详细描述:

配置了Spring框架的组件扫描功能,指定了需要扫描的包路径。Spring将会自动扫描这个包及其子包中的类,并将其注册为Spring的组件。

<context:component-scan base-package="com.ctb"/>

启用了Spring MVC的注解驱动功能,使得我们可以使用注解来配置和处理请求。

<mvc:annotation-driven/>

配置了一个视图解析器,用于解析视图的名称并返回相应的视图对象。这里使用的是InternalResourceViewResolver,它将会解析JSP视图。prefix属性指定了JSP文件的路径前缀,suffix属性指定了JSP文件的后缀。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
    <property name="prefix" value="/WEB-INF/jsp/">
    <property name="suffix" value=".jsp">
</property></property></bean>

3.配置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_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  <!-- Spring和web项目集成start -->
  <!-- spring上下文配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-context.xml</param-value>
  </context-param>
  <!-- 读取Spring上下文的监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- Spring和web项目集成end -->
 
  <!-- 中文乱码处理 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- Spring MVC servlet -->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--此参数可以不配置,默认值为:/WEB-INF/springmvc-servlet.xml-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <!--web.xml 3.0的新特性,是否支持异步-->
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

4.编写web层

package com.ctb.web;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
/**
 * @author 彪
 * @site 
 * @create 2023-09-04 
 */
 
@Controller
@RequestMapping("/ctb")
public class SpringmvcServlet {
    @RequestMapping("/hello")
    public String test(){
        return "hello-shaniao";
    }
}

接下来我们就可以直接渲染到jsp页面即可

5.静态资源处理

所有静态资源文件都会被spring-mvc.xml配置文件进行拦截,所以要添加配置,让处理器进行扫描,专门处理图片、样式、js等资源...文章来源地址https://www.toymoban.com/news/detail-703315.html

 <mvc:resources location="/css/" mapping="/css/**"/>
     <mvc:resources location="/js/" mapping="/js/**"/>
     <mvc:resources location="WEB-INF/images/" mapping="/images/**"/>

到了这里,关于SpringMVC入门指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring AOP入门指南:轻松掌握面向切面编程的基础知识

    1.1 什么是AOP? AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构。 OOP(Object Oriented Programming)面向对象编程 我们都知道OOP是一种编程思想,那么AOP也是一种编程思想,编程思想主要的内容就是指导程序员该如何编写程序,所以它们两个是不同

    2024年02月03日
    浏览(69)
  • Java入门指南:Java语言优势及其特点

    目录 1. Java语言简介及发展概述 2. Java语言的优势  2.1 可移植性 2.2 面向对象 2.3 安全性 2.4 大量类库 3. Java语言与C/C++的区别 4. 初识Java程序入口之main方法  5. 注释、标识符、 5.1 注释 5.2 标识符 5.3 Java是一种面向对象的编程语言,由Sun Microsystems(现为Oracle)于

    2024年02月14日
    浏览(45)
  • 2. 使用IDEA创建Spring Boot Hello项目并管理依赖——Maven入门指南

    前言:本文将介绍如何使用IDEA创建一个Spring Boot Hello项目,并通过Maven来管理项目的依赖。我们从项目的创建到代码的编写,再到项目的构建和运行,一步步演示了整个过程。 🚀 作者简介:作为某云服务提供商的后端开发人员,我将在这里与大家简要分享一些实用的开发小

    2024年02月10日
    浏览(59)
  • 从零开始学习 Java:简单易懂的入门指南(三)

    运算符: ​ 就是对常量或者变量进行操作的符号。 ​ 比如: + - * / 表达式: ​ 用运算符把常量或者变量连接起来的,符合Java语法的式子就是表达式。 ​ 比如:a + b 这个整体就是表达式。 ​ 而其中+是算术运算符的一种,所以这个表达式也称之为算术表达式。 分类: 运

    2024年02月15日
    浏览(67)
  • 从零开始学习 Java:简单易懂的入门指南(二)

    ​ 注释是对代码的解释和说明文字。 Java中的注释分为三种: 单行注释: 多行注释: 文档注释(暂时用不到): 1.1使用的技巧 如果我们要对代码进行解释,那么就可以使用注释。 ​ 当注释的内容比较少,一行就写完了,可以用单行注释。 ​ 如果注释的内容比较多,需要

    2024年02月15日
    浏览(50)
  • 从零开始学习 Java:简单易懂的入门指南(一)

    ) 1.1 什么是cmd? 就是在windows操作系统中,利用命令行的方式去操作计算机。 我们可以利用cmd命令去操作计算机,比如:打开文件,打开文件夹,创建文件夹等。 1.2 如何打开CMD窗口? 按下快捷键:win + R。 此时会出现运行窗口。 在运行窗口中输出cmd 输出回车。 解惑: ​

    2024年02月16日
    浏览(70)
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring搭建框架步骤

    第一章 初识Spring 1.1 Spring简介 Spring是一个为简化企业级开发而生的 开源框架 。 Spring是一个 IOC(DI) 和 AOP 容器框架。 IOC全称:Inversion of Control【控制反转】 将对象【万物皆对象】控制权交个Spring DI全称:(Dependency Injection):依赖注入 AOP全称:Aspect-Oriented Programming,面向切面编

    2024年02月04日
    浏览(49)
  • 热门Java开发工具IDEA入门指南——插件安装方式

    IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 本文给大家讲解在使用IntelliJ I

    2024年02月09日
    浏览(63)
  • 从零开始学习 Java:简单易懂的入门指南之爬虫(十六)

    Pattern:表示正则表达式 Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。 在大串中去找符合匹配规则的子串。 代码示例: 需求: ​ 把连接:https://m.sengzan.com/jiaoyu/29104.html?ivk sa=1025883i中所有的身份证号码都爬取出来。 代码示例: 需求: ​ 把

    2024年02月11日
    浏览(72)
  • 从零开始学习 Java:简单易懂的入门指南之数组(五)

    概念: ​ 指的是一种容器,可以同来存储同种数据类型的多个值。 ​ 但是数组容器在存储数据的时候,需要结合隐式转换考虑。 比如: ​ 定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的, ​ 但是byte类型,short类型,int类型的数据是可以存

    2024年02月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包