[Spring MVC学习01] Spring MVC环境搭建以及工作流程了解

news/2024/11/25 19:50:56/

  • 1.Spring MVC的初步了解
    • 1.1MVC是什么
    • 1.2 Spring MVC 是什么
    • 1.3Spring MVC可以帮我们做什么
    • 1.4工作原理
  • 2.Spring MVC环境搭建
    • 2.1开发环境
    • 2.2新建maven webapp
    • 2.3pom.xml坐标添加
    • 2.4配置web.xml
    • 2.5springmvc.xml配置
    • 2.6页面控制器的编写
    • 2.7添加视图页面
    • 2.8启动Tomcat服务器
    • 2.9第一个程序流程总结

1.Spring MVC的初步了解

这些概念性的东西,大家如果是初学的话可以先看看有个印象,等搭建完Spring MVC后,大家就会有更深刻的理解

1.1MVC是什么

  • 模型-视图-控制器(MVC)是一种软件架构思想
  • MVC主要通过分离模型、视图、控制器在应用程序中的角色来把业务逻辑从界面中解耦
  • 模型:负责封装应用程序在视图层展示
  • 视图层仅仅展示数据,不包含任何业务逻辑
  • 控制器负责接收来自用户的请求,并调用后台服务(service或dao)来处理业务逻辑,处理后,后台业务层可能返回一些数据在视图层展示。控制器收集这些数据以及准备模型在视图层展示
  • 可以解耦合
  • 流程:
    • 用户通过视图层发送请求到服务器,在服务器中请求被Controller接收
    • Controller调用相应的Model层处理请求,处理完毕后结果返回到Controller
    • Controller再根据请求处理的结果找到对应的View视图,渲染数据后最终响应给浏览器
      在这里插入图片描述

1.2 Spring MVC 是什么

  • Spring MVC是一种基于Java实现Web MVC设计思想的请求驱动类型的轻量级Web框架,即使用了MVC架构模式思想把web层进行职责解耦
  • 基于请求驱动指的是使用请求-响应模型
  • 前端控制器是DispatcherServlet
  • 应用控制器拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理
  • 支持本地化/国际化,解析以及文件上传
  • 提供了很灵活的数据验证,格式化和数据绑定机制
  • 约束大于配置

1.3Spring MVC可以帮我们做什么

  • 可以让我们很简单的设计出干净的Web层
  • 进行更简洁的Web层开发
  • 天生和Spring框架集成
  • 提供强大的约定大一配置的契约式编程支持
  • 能简单的进行web层的单元测试
  • 支持灵活的URL到页面控制器的映射
  • 很容易和其他视图技术集成,比如jsp,Velocity,FreeMarker等,因为模型数据不放在特定的API里面,而是放在一个Model里面(Map数据结构实现,因此很容易被其他框架使用)
  • 很灵活的数据验证、格式化和数据绑定机制,能够用任何对象进行数据绑定,不必实现特定框架的API
  • 支持灵活的本地化等解析
  • 更加简单的异常处理
  • 对静态资源的支持
  • 支持Restful风格

1.4工作原理

在这里插入图片描述

在这里插入图片描述

  1. 首先用户发送请求,请求被SpringMvc前端控制器(DispatherServlet)捕获;

  2. 前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI, 调用HandlerMapping;

  3. 前端控制器(DispatherServlet)获得返回的HandlerExecutionChain(包括Handler对象以及Handler对象对应的拦截器);

  4. DispatcherServlet 根据获得的HandlerExecutionChain,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法);

  5. HandlerAdapter根据请求的Handler适配并执行对应的Handler;HandlerAdapter(提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据配置,Spring将做一些额外的工作:

  6. HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。

  7. 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等数据格式化:

  8. 数据格式化。 如将字符串转换成格式化数字或格式化日期等

  9. 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中)

  10. Handler执行完毕,返回一个ModelAndView(即模型和视图)给HandlerAdaptor

  11. HandlerAdaptor适配器将执行结果ModelAndView返回给前端控制器。

  12. 前端控制器接收到ModelAndView后,请求对应的视图解析器。

  13. 视图解析器解析ModelAndView后返回对应View;

  14. 渲染视图并返回渲染后的视图给前端控制器。

  15. 最终前端控制器将渲染后的页面响应给用户或客户端

这里推荐一下有一篇文章流程写得挺详细的Springmvc执行流程介绍
这里涉及到http协议的uri和url,推荐大家看这篇文章HTTP 协议详解 —— URI、HTTP protocol、HTTP headers
在这里插入图片描述

2.Spring MVC环境搭建

2.1开发环境

idea+maven+jdk1.8+tomcat

2.2新建maven webapp

在idea下面创建springmvc01工程
file->new->project
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

把jdk编译环境改成1.8
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.3pom.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>org.example</groupId><artifactId>springmvc01</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>springmvc01 Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</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></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- spring mvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.19</version></dependency></dependencies></project>

2.4配置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_4_0.xsd"version="4.0"><!-- 配置 DispatcherServlet 前端控制器 --><servlet><!-- servlet 名称 --><servlet-name>springMVC</servlet-name><!-- servlet处理类 --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 设置 SpringMVC 配置文件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 设置启动时候加载 --><load-on-startup>1</load-on-startup></servlet><!-- servlet映射路径 --><servlet-mapping><servlet-name>springMVC</servlet-name><!-- 拦截【/】请求,即:所有请求,除了jsp文件的请求 --><!-- *.do拦截所有do结尾的请求 --><url-pattern>*.do</url-pattern></servlet-mapping></web-app>

如果想要启动Spring MVC环境,目前对应MVC框架的配置还没有进行,以上在web.xml中引用了springmvc.xml文件

2.5springmvc.xml配置

首先在项目中创建java和resources的目录
在这里插入图片描述
在resources目录中添加springmvc.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"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 开启扫描器--><context:component-scan base-package="com.zyh.controller"></context:component-scan><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--给逻辑视图加上前缀和后缀 --><!--前缀--><property name="prefix" value="/jsp/"></property><!--后缀--><property name="suffix" value=".jsp"></property></bean><!--开启注解驱动--><mvc:annotation-driven></mvc:annotation-driven>
</beans>

然后在Java目录下创建对应的com.zyh.controller包

2.6页面控制器的编写

@Controller
public class HelloController {@RequestMapping("/hello.do")public ModelAndView hello(){/*** 请求地址映射 hello.do*/ModelAndView modelAndView = new ModelAndView();//设置数据modelAndView.addObject("hello", "Hello Spring MVC");//设置视图名称modelAndView.setViewName("hello");//返回return modelAndView;}
}

2.7添加视图页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>${hello}</body>
</html>

2.8启动Tomcat服务器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
端口默认是8080
在这里插入图片描述

2.9第一个程序流程总结

在这里插入图片描述
如果大家觉得麻烦的话,也可以把拦截路径改成/,这样以后就不用再写do了
在这里插入图片描述


http://www.ppmy.cn/news/606272.html

相关文章

python 直接if判断和is not None的区别

tmpName if tmpName: print tmpName #没有输出 if tmpName is not None: print tmpName #有输出&#xff0c;是空行

LeetCode简单题之旋转字符串

题目 给定两个字符串, A 和 B。 A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A ‘abcde’&#xff0c;在移动一次之后结果就是’bcdea’ 。如果在若干次旋转操作之后&#xff0c;A 能变成B&#xff0c;那么返回True。 示例 1: 输入: A ‘abcde’, B ‘cdeab…

[Spring MVC学习02]URL地址映射

1.RequestMapping的介绍2.映射单个URL3.映射多个URL4.映射URL在控制器上5.RequestMapping的常用属性5.1value属性5.2method属性5.3params属性6.小结1.RequestMapping的介绍 通过RequestMapping&#xff0c;我们可以把请求地址和方法进行绑定的&#xff0c;可以在类、方法上进行…

LeetCode简单题之仅仅反转字母

题目 给定一个字符串 S&#xff0c;返回 “反转后的” 字符串&#xff0c;其中不是字母的字符都保留在原地&#xff0c;而所有字母的位置发生反转。 示例 1&#xff1a; 输入&#xff1a;“ab-cd” 输出&#xff1a;“dc-ba” 示例 2&#xff1a; 输入&#xff1a;“a-bC-dEf-…

cnetos上php项目平移服务器操作流程

有个阿里云linux服务器的php老项目这段时间并发量提高一段时间&#xff0c;想了个解决办法是申请了一个月的高性能服务器、旧i服务器镜像到新服务器&#xff0c;前端加个负载均衡&#xff0c;配置到新服务器上&#xff0c;然后需要在不大影响使用的情况下&#xff0c;切换到新服…

[Spring MVC学习03]参数绑定

前言1.基本数据类型(涉及乱码问题)2.包装类型3.通过RequestParam获取参数4.字符串类型5.数组类型6.JavaBean类型7.List类型前言 Spring MVC支持对多种类型的请求参数进行封装 基本类型包装类型JavaBean数组类型字符串类型集合类型 因为主要是为了学习参数绑定的内容&#xf…

数据结构:双端栈

基本介绍 双端栈是线性表的一种&#xff0c;也是栈的一个特殊分类我们可以用动态数组和栈的思想来实现双端栈因为它有两边的操作&#xff0c;比较特殊&#xff0c;所以不能借助前面两节实现的ArrayList或ArrayStack来实现&#xff0c;这里需要从头实现双端栈。因为入栈&#xf…

LeetCode简单题之错误的集合

题目 集合 s 包含从 1 到 n 的整数。不幸的是&#xff0c;因为数据错误&#xff0c;导致集合里面某一个数字复制了成了集合里面的另外一个数字的值&#xff0c;导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结果。 请你找出重…