【SpringMVC】上篇,超详细的教程带你学会SpringMVC_在spring mvc配置文件中使用【】元素指定需要扫描的类包

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。
🍎个人主页:Hhzzy99
🍊个人信条:坚持就是胜利!
💞当前专栏:【Spring】
🥭本文内容:SpringMVC上部分内容的学习,助你逐步深入Spring全家桶之二——SpringMVC

SpringMVC


文章目录

前言

在前文中我们已经学习过Sping框架了(IoC和DI还有AOP),想了解的同学可以去我的专栏查看传送门🚩

SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装。
SpringMVC是处于Web层的框架,所以其主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果响应给前端,所以如何处理请求和响应是SpringMVC中非常重要的一块内容。
这篇文章我将带领大家一起学习SpringMVC


SpringMVC简介

SpringMVC概述

SpringMVC是Spring提供的一个轻量级Web框架,它实现了WebMVC设计模式。它是一个开源的Java平台,为开发强大的基于Java的Web应用程序提供全面的基础架构支持非常容易非常快速。它在使用和性能等方面比另一个框架Struts2更加优异。

SpringMVC特点

  • 是Spring框架的一部分,可以方便的利用Spring所提供的其他功能
  • 灵活性强,易于与其他框架集成
  • 提供了一个前端控制器 DispatcherServlet, 使开发人员无须额外开发控制器对象。
  • 可自动绑定用户输入,并能正确地转换数据类型。
  • 内置了常见的校验器,可以校验用户输入。如果校验不能通过,就会复位向到输入表单。
  • 持国际化,可以根据用户区域显示多国语言
  • 支持多种视图技术,如JSP、Velocity 和 FreeMarker 等视图技术。
  • 使用基于XML 的配置文件,在编辑后,不需要重新编译应用程序

SpringMVC入门案例

了解了SpringMVC的概念和特点之后,接下来我们做一个简单的入门案例
第一步:创建一个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.hzy</groupId>
  <artifactId>springMvc_quickstart</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
  </dependencies>
</project>


第三步:配置前端控制器

在web.xml中配置SpringMVC的前端控制器DispatcherServlet。

<!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>
  <servlet>
    <!--配置前端过滤器-->
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--初始化时加载配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-config.xml</param-value>
    </init-param>
    <!--表示容器在加载时立刻加载Servlet-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>


web.xml中主要对<servlet><servlet- mapping>元素进行了配置。在<servlet>中配置了 Spring MVC 的前端控制器 DispatcherServlet,并通过其子元素<init-param>配置了 Spring MVC 配置文件的位置, <load-on-startup>元素中的'1'表示容器在启动时立即加载这个 Servlet:在 <servlet-mapping>中,通过<url-pattern>元素的/ 拦截所有 URL,并交由 DispatcherServlet 处理。

第四步:创建Controller类

在src下创建com.hzy.controller包,创建ControllerTest。

package com.hzy.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ControllerTest implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        
        //创建ModelAndView对象
        ModelAndView m = new ModelAndView();
        //向模型中添加一个名称为msg的字符串对象
        m.addObject("msg","这是第一个SpringMVC程序");
        //设置返回路径
        m.setViewName("/WEN-INF/welcome.jsp");
        return m;
    }
}


handleRequest()是 Controller 接口的实现方法,ControllerTest 类会调用该方法 处理请求,并返回一个包含视图名或包含视图名与模型的 ModelAndView 对象。本案例向模型对象 中添加了一个名称为 msg 的字符串对象,并设置返回的视图路径为 WEB-INF/welcome. jsp,这样 请求就会被转发到 welcome. jsp 页面。

第五步:创建springmvc-config.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"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--配置处理器Handle,映射“ControllerTest”请求-->
    <bean name="/controllerTest" class="com.hzy.controller.ControllerTest"/>
    <!--处理器映射,将处理器Handle的name作为url进行查找-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--处理器适配器,配置处理器中的handleRequest()方法调用-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
    
</beans>


首先定义了一个名称为 ControllerTest的 Bean,该 Bean 会将控制器类 ControllerTest 映射到 /controllerTest请求中:然后配置了处理器映射器 BeanNameUrIHandlerMapping 和处理器适配器 SimpleControllerHandlerAdapter, 其中处理器映射器用 于将处理器 Bean 中的的 name (即 url)进行处理器查找,而处理器适配器用于完成对 ControllerTest 处理器中 handleRequesto方法的调用;最后配置了视图解析器 InternalResourceViewResolver 来解析结果视图,并将结果呈现给用户。

第六步:创建视图(View)页面
在WEB-INF目录下创建一个页面文件welcome.jsp,在该页面中使用EL表达式获取msg的信息

<%@ page contentType="text/html;charset=UTF-8" language="java"  pageEncoding="UTF-8" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Title</title>
</head>
<body>
    ${msg}
</body>
</html>


最后:配置Tomcat,启动项目

在这里插入图片描述
运行结果:

在这里插入图片描述
通过入门案例的学习,我们总结一下SpringMVC程序的执行流程:

  1. 用户通过浏览器向服务器发送请求,请求会被 SpringMVC 的前端控制器 DispatcherServiet所拦截
  2. DispatcherServlet 拦截到请求后,会调用 HandlerMapping处理器映射器。
  3. 处理器映射器根据请求 URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有就生成)一并返回给 DispatcherServlet
  4. DispatcherServlet会通过返回信息选择合适的 HandlerAdapter(处理器适配器)
  5. HandlerAdapter 会调用并执行 Handler(处理器),这里的处理器就是程序中编写的 Controller 类,也被称为后端控制器。
  6. Controller 执行完成后,会返回一个 ModelAndView 对象,该对象中包含视图名或包含模 利与视图名。
  7. HandlerAdapterModelAndView 对象返回给 DispatcherServlet
  8. DispatcherServlet会根据 ModelAndView对象选择一个合适的 ViewResolver(视图解析器)。
  9. ViewResolver 解析后,会向DispatcherServlet 中返回具体的 View(视图)。
    10.DispatcherServlet对 View 进行渲染(即将模型数据填充至视图中)
  10. 视图渲染结果会返回给客户端浏览器显示。

在上述执行过程中,DispatcherServletHandlerMappingHandlerAdapterViewResolver对象的工作是在框架内部执行的,开发人员并不需要关心这些对象内部的实现过程,只需要配置前端控制器(DispatcherServlet),完成Controller中的业务处理,并在视图(View)中展示相应信息即可。
注:
大家都发现了,这种方式实现整个程序还是比较麻烦的。

SpringMVC注解

在 Spring 2.5 之前,只能使用实现 Controller 接口的方式来开发一个控制器,我们的入门案例就是使用的这种方式。在 Spring 2.5 之后,新增加了基于注解的控制器以及其他一些常用注解,这些注解的使用极大地减少了程序员的开发工作。接下来我将详细的讲解 SpringMVC 中的常用核心类及其常用注解。

@Controller

名称@Controller
类型类注解
位置SpringMVC控制器类定义上方
作用设定SpringMVC的核心控制器bean

org.springframework.stereotype.Controller 注解类型用于指示 Spring类的实例是一个控制器,其注解形式为@Controller。该注解在使用时不需要再实现 Controller 接口,只需要将@Controller注解加入控制器类上,然后通过 Spring的扫描机制找到标注了该注解的控制器即可。
示例:

package com.hzy.controller;
import org.springframework.stereotype.Controller;
......
//Controller注解
@Controller
public class ControllerTest{
...
}

为了保证 Spring能够多找到控制器类,还需要在Spring MVC的配置文件中添加相应的扫描配置信息,具体如下。
(1)在配置文件的声明中引入 spring-context
(2)使用<context: component-scan>元素指定需要扫描的类包。
示例:

<?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 


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
![img](https://img-blog.csdnimg.cn/img_convert/0003c04c960086e0133b0dae773b3f91.png)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

"http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)**
[外链图片转存中...(img-gLVuRenm-1713351853231)]

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值