今天我们要来学习一下SSM框架的最后一个框架SpringMVC
Spring MVC(Model-View-Controller)是一个用于构建Java Web应用程序的开源框架,它提供了一种基于MVC架构的方式来开发Web应用。
SpringMVC是Spring Framework的一部分,它是一种基于模型-视图-控制器(MVC)设计模式的Web框架。它的主要目标是将应用程序的各个部分(模型、视图和控制器)分离开来,以提高代码的可维护性和可测试性。SpringMVC提供了一个结构良好的方式来处理HTTP请求和响应,同时支持灵活的配置和扩展。
在这篇博客中,我们将初步了解Spring MVC的核心概念和基本用法。
我们前几天经常提及的系统经典的三层架构模式:
从该图也可以看出SpringMVC作用于三层架构中的表现层,用于接收客户端请求并进行响应。
Spring MVC中包含了控制器
和视图
,控制器
接收到客户端的请求后对请求数据进行解析和封装,接着将请求交给业务层
处理。业务层
会对请求进行处理,最后将处理结果返回给表现层
。表现层
接收到业务层
的处理结果后,再由视图
对处理结果进行渲染,渲染完成后响应给客户端。
@Controller
注解进行标记。这里我们后面会使用实例来帮助理解这个流程。
这里我们选择使用昨天的项目来做今天的实验,有去下载我昨天的项目资源的读者应该就会发现我的pom中引入了很多的依赖,其实是一个全栈项目的所有依赖,所以会比较多,依赖的引入也是非常重要的,不同版本的依赖之间可能会有冲突,所以需要我们掌握,查看报错并且根据报错修改的能力,跟debug原理是一样的。
这里要进行一下修改,修改webapp文件夹的地址还有告诉程序Web资源的目录在哪
按照下面流程去进行新增artifact
然后点击Apply即可,到此我们的webapp就新建完成了
整体项目架构如下:
②引入Maven依赖,引入项目所需要的全部依赖
<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.0modelVersion>
<groupId>org.examplegroupId>
<artifactId>samTestartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>warpackaging>
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>truefiltering>
resource>
resources>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.1version>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<port>8080port>
<path>/path>
<uriEncoding>UTF-8uriEncoding>
<server>tomcat7server>
configuration>
plugin>
plugins>
build>
<properties>
<project.build.sourceEncoding>GBKproject.build.sourceEncoding>
properties>
<dependencies>
<dependency>
<groupId>aopalliancegroupId>
<artifactId>aopallianceartifactId>
<version>1.0version>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>1.6.9version>
dependency>
<dependency>
<groupId>commons-dbcpgroupId>
<artifactId>commons-dbcpartifactId>
<version>1.4version>
dependency>
<dependency>
<groupId>commons-poolgroupId>
<artifactId>commons-poolartifactId>
<version>1.6version>
dependency>
<dependency>
<groupId>org.hamcrestgroupId>
<artifactId>hamcrest-coreartifactId>
<version>1.3version>
dependency>
<dependency>
<groupId>javaxgroupId>
<artifactId>javaee-apiartifactId>
<version>7.0version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
<version>1.2version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.2.2version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.3.0version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.26version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aopartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-aspectsartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-expressionartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>4.3.6.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>4.3.6.RELEASEversion>
dependency>
dependencies>
project>
PS:这里引入的maven的插件,还引入了tomcat插件,设置了项目打包方式为war,这样才可以被maven识别,并且使得我们可以使用maven方式直接运行Java Web应用。跟项目部署在Tomcat服务器是一样的效果。
接下来要去进行设置才可以使用插件运行Maven项目,单击IDEA工具栏中的“Run”→“Edit Configurations…”选项,弹出Run/Debug Configurations对话框。
<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">
<welcome-file-list>
<welcome-file>default.jspwelcome-file>
welcome-file-list>
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:spring-mvc.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
web-app>
这里稍微解释一下代码吧:
以上代码的简单说明: welcome-file-lis****表示首页欢迎页面
在上述代码中,我们配置了一个名为“springmvc”的Servlet。该Servlet是Dispatcher Servlet类型,它就是Spring MVC的入口(前面介绍过SpringMVC的本质就是一个Servlet),并通过“
1”配置标记容器在启动的时候就加载此Dispatcher Servlet,即自动启动。然后通过servlet-mapping映射到“/”,即Dispatcher Servlet需要截获并处理该项目的所有URL请求。
在配置Dispatcher Servlet的时候,通过设置context Config Location参数来指定Spring MVC配置文件的位置,此处使用Spring资源路径的方式进行指定(classpath:springmvc-servlet.xml,下一步将创建这个文件)。
如下图,这里会爆红就因为我们还没有创建SpringMVC的配置文件:spring-mvc.xml,我这里图片是我还未修改的版本,记得自行修改即可
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="controller"/>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
bean>
beans>
如下图:这里爆红是因为我们还没有创建controller包,创建了controller包记得要修改这个配置扫描的包的路径,比如我的就是com.steveDash.controller
package com.steveDash.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
//设置当前方法的访问映射地址
@RequestMapping("/hello")
//设置当前方法返回值类型为String,用于指定请求完成后跳转的页面
public String sayHello(){
System.out.println("欢迎访问UserController");
return "success";
}
}
这里我们在JavaBean的章节就已经说过了,@Controller标注出这是个Controller层的Bean
要是有疑惑的,可以去看看前面几篇文章。
为什么要是这个路径呢?因为我们在spring-mvc中已经设置好了路径,要是自己有修改的话,那就记得保持俩个路径一致即可
然后创建success.jsp页面代码如下
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/9/12
Time: 23:53
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
SteveDash
你好呀,SteveDash的读者们
如下图:一般出现这个就是说明正常启动了,我们需要去网页输入http://localhost:8080/hello
这里的http://localhost:8080/是我们自己设定好的Tomcat默认主页地址,8080是我们pom中对tomcat设置好的端口号,后面的hello是我们UserController中设定好的访问地址
return success就是接收到这个http://localhost:8080/hello页面请求,返回success.jsp,为什么会自动拼接.jsp呢?
因为我们在spring-mvc.xml中设置好了,识别好了跳转页面路径,所以上面返回的拼接完成就是
webapp/WEB-INF/pages/success
.jsp
在我们前面已经粗略的讲解了一下流程,又编写了一个简单的实例来帮助我们理解SpringMVC。
现在回过头我们再来详细理解一下SpringMVC的工作原理和执行流程
这里要引入这几个组件
所以这三个的关系就是:
处理器映射器和处理适配器一起工作,将请求路由到合适的控制器和方法上。控制器方法执行业务逻辑,然后返回一个逻辑视图名称。视图解析器接收逻辑视图名称,将其解析为一个具体的视图对象。最终,视图对象使用模型数据(由控制器方法提供)生成响应,这个响应通常是HTML页面。
这三个组件协作,实现了Spring MVC的核心功能,即将请求路由到控制器、执行业务逻辑、生成视图响应。这种松散耦合和关注点分离的设计使得Spring MVC非常灵活和可扩展。
这个图源自网络,可以把处理器看成controller,这样就可以理解了。
PS:这里讲解的是SpringMVC4.0以后版本的执行流程。
今天我们对SpringMVC的基础知识做了整体的了解,也明白了SpringMVC的概念,也编写了SpringMVC的入门程序,通过这个实例对SpringMVC的工作原理,执行流程进行了详细的讲解。MVC三层架构的作用,它们之间是怎么互相协调的。还学习了部署项目的俩种方式,本地Tomcat运行,或者使用插件运行Maven项目。通过今天的学习,希望各位读者可以对SpringMVC有个大致的了解,为框架开发打下坚实基础。
想要跟着学习的可以去我的资源里面找对应的文件下载,我的md文件也会发上去,项目文件会上传可以自己跟着学习一下。
作者:Stevedash
发表于:2023年9月13日 3点32分