目录
1、简介
2、SpringMVC与Servlet的关系
3、struc2
4、RESTful 编程风格
5、工作流程
6、代码示例
6.1、导入坐标
provide
6.2、DispathcerServlet
配置web.xml
初始化
优先级
⭐
6.3、Controller类及视图页面
6.4、配置注解
6.5、spring-mvc.xml
6.6、客户端发请求
7、组件解析
7.1、执行流程
7.2、解析
8、注解解析
8.1、@RequestMapping
8.2、xml
8.3、知识要点
⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:JavaEE、Spring
SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于
SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。
SpringMVC 已经成为目前最主流的MVC框架之一,并且随着Spring3.0 的发布,全面超越 Struts2,成为最优
秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时
它还支持 RESTful 编程风格的请求。
Spring MVC 是 Spring 框架中用于构建 Web 应用程序的模块。它是一个基于 MVC(Model-View-Controller)设计模式的轻量级框架,旨在简化 Web 应用程序的开发,并提供灵活性和可扩展性。
下面是 Spring MVC 的主要特点和组件:
使用 Spring MVC,开发人员可以快速构建灵活、可维护和可扩展的 Web 应用程序。
它与其他 Spring 模块(如 Spring Boot)集成良好,为开发现代 Web 应用提供了强大的基础。
Spring MVC 是基于 Servlet 技术的框架,它实际上是在 Servlet 的基础上进行了封装和扩展,以简化 Web 应用程序的开发。下面是 Spring MVC 和 Servlet 的关系和区别:
关系:
区别:
综上所述,Spring MVC 是对 Servlet 的封装和扩展,它提供了更高级的编程模型和更丰富的功能,使得 Web 应用程序的开发更加简便和高效。使用 Spring MVC 可以更好地实现松耦合、可维护和可扩展的 Web 应用。
Struts2 是一个基于 Java 的开源 Web 应用程序框架,用于构建 Web 应用程序。它是 Struts 框架的后续版本,但在设计和功能上有很大的改进。Struts2 使用了经典的 MVC 设计模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller),以提高代码的可维护性和可扩展性。
主要特点:
REST(Representational State Transfer)是一种软件架构风格,用于构建分布式系统和 Web 服务。RESTful 是一种基于 REST 架构风格的 Web 服务设计风格,它遵循一组约定和原则,使得 Web 服务更加简单、灵活和易于扩展。
主要特点:
在 RESTful 编程风格中,资源的标识符(URI)是关键,它代表了资源的唯一性,并且客户端通过 HTTP 方法来执行 CRUD(创建、读取、更新和删除)操作。RESTful 服务通常使用 JSON 或 XML 格式来传输数据,使得客户端和服务器之间的通信更加简单和灵活。
Struts2 是一个用于构建 Web 应用程序的 Java 框架,而 RESTful 编程风格是一种用于构建 Web 服务的设计风格,它们都有各自的优点和用途。在 Web 开发中,可以使用 Struts2 框架来构建整个 Web 应用程序,同时采用 RESTful 编程风格来设计和实现 Web 服务接口,使得应用程序更加模块化和灵活。
Spring MVC 的工作流程可以简单概括为以下几个步骤:
整个 Spring MVC 的工作流程是由 DispatcherServlet 负责协调和调度的。它根据请求的 URL 找到对应的处理器(Controller)进行处理,并将处理结果传递给适合的视图进行渲染,最终将响应返回给客户端。
在此过程中,Spring MVC 提供了很多可插拔的组件,如处理器映射器、处理器适配器、视图解析器等,这些组件可以根据实际需求进行配置和定制,使得 Spring MVC 可以灵活适应各种不同的业务场景。
需求是:客户端发起请求,服务器端接收请求,执行逻辑并进行视图跳转。
实现步骤:
① 导入SpringMVC相关坐标
② 配置SpringMVC核心控制器DispathcerServlet
③ 创建Controller类和视图页面
④ 使用注解配置Controller类中业务方法的映射地址
⑤ 配置SpringMVC核心文件 spring-mvc.xml
⑥ 客户端发起请求测试
4.0.0
org.example
Spring
1.0-SNAPSHOT
war
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8080
UTF-8
11
11
mysql
mysql-connector-java
5.1.32
c3p0
c3p0
0.9.1.2
com.alibaba
druid
1.1.10
junit
junit
4.12
test
org.springframework
spring-context
5.0.5.RELEASE
org.springframework
spring-test
5.0.5.RELEASE
org.springframework
spring-web
5.0.5.RELEASE
org.springframework
spring-webmvc
5.0.5.RELEASE
javax.servlet
javax.servlet-api
4.0.1
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.2.1
provided
javax.annotation
javax.annotation-api
1.3.2
在 Maven 中设置
具体来说,provided 作用域适用于那些在运行时由容器或其他外部环境提供的依赖项,例如 Servlet 和 JSP API。在 Java Web 应用中,这些 API 是由 Web 容器(如 Tomcat、Jetty 等)提供的,因此在构建项目时无需将这些 API 打包进 WAR 文件中。当你部署项目时,Web 容器会负责提供这些 API。
使用 provided 作用域的好处是减少构建结果的大小,因为不会将这些已经存在于目标环境的依赖项包含进去。这样可以避免冲突和版本问题,同时也减少了不必要的重复。
总结:使用 provided 作用域适用于那些在目标运行环境中已经存在的依赖项,例如 Java Web 应用中的 Servlet 和 JSP API,告诉 Maven 在构建时不要将这些依赖包含进去。
SpringMVC的核心控制器是DispatcherServlet,它是整个SpringMVC框架的前端控制器(Front Controller)。当客户端发送请求时,请求首先会被DispatcherServlet接收,然后DispatcherServlet会根据请求的信息进行处理和分发。
DispatcherServlet的主要职责包括:
总体上,DispatcherServlet起到了框架的总调度中心,负责将请求与相应的控制器进行匹配,然后将处理结果返回给客户端。通过配置DispatcherServlet的不同属性和参数,我们可以实现自定义的请求处理逻辑和视图渲染方式。
在web.xml配置SpringMVC的核心控制器:
SpringMVC的初始化发生在Web应用启动时,当容器(例如Tomcat)加载Web应用时,会寻找web.xml文件,并根据其中的配置初始化SpringMVC框架。
具体地说,SpringMVC的初始化是通过配置在web.xml中的DispatcherServlet来完成的。在web.xml中配置DispatcherServlet时,使用了
当容器启动时,会按照
一旦SpringMVC初始化完成,它就能够拦截并处理Web应用中的请求,并根据配置的处理器映射和控制器进行相应的业务处理和视图返回。
在web.xml中,
需要注意的是,
在启动web应用时,容器会先加载监听器(如ContextLoaderListener),然后再加载SpringMVC(DispatcherServlet)。这是因为在web.xml中配置了监听器的
在SpringMVC中,DispatcherServlet是用于处理所有请求的核心控制器,需要在web.xml中配置
总结起来,web应用启动时的加载顺序通常是:
通常情况下,对于在应用启动时需要进行初始化的Servlet,将
这里渲染的视图是JSP,想要渲染HTML是springBoot部分的内容。
SpringMVC的执行流程
① 用户发送请求至前端控制器DispatcherServlet。
② DispatcherServlet收到请求调用HandlerMapping处理器映射器。
③ 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果
有则生成)一并返回给DispatcherServlet。
④ DispatcherServlet调用HandlerAdapter处理器适配器。
⑤ HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
⑥ Controller执行完成返回ModelAndView。
⑦ HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
⑧ DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
⑨ ViewReslover解析后返回具体View。
⑩ DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户
SpringMVC组件解析
1. 前端控制器:DispatcherServlet
用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由
它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。
2. 处理器映射器:HandlerMapping
HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的
映射方式,例如:配置文件方式,实现接口方式,注解方式等。
3. 处理器适配器:HandlerAdapter
通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理
器进行执行。
4. 处理器:Handler
它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由
Handler 对具体的用户请求进行处理。
5. 视图解析器:View Resolver
View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即
具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。
6. 视图:View
SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最
常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面
作用:用于建立请求 URL 和处理请求方法之间的对应关系
位置:
类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
属性:
value:用于指定请求的URL。它和path属性的作用是一样的
method:用于指定请求的方式
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
例如:
params = {"accountName"},表示请求参数必须有accountName
params = {"moeny!100"},表示请求参数中money不能是100
SpringMVC的相关组件
SpringMVC的注解和配置