SpringMVC框架理解

news2025/1/11 7:56:44

JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring是业务层的框架,Hibernate和MyBatis是持久层的框架。

为什么要使用SpringMVC?
很多应用程序的问题在于处理业务数据的对象和显示业务数据的视图之间存在紧密耦合,通常,更新业务对象的命令都是从视图本身发起的,使视图对任何业务对象更改都有高度敏感性。而且,当多个视图依赖于同一个业务对象时是没有灵活性的。

SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发。

MVC设计模式
MVC设计模式的任务是将包含业务数据的模块与显示模块的视图解耦。这是怎样发生的?在模型和视图之间引入重定向层可以解决问题。此重定向层是控制器,控制器将接收请求,执行更新模型的操作,然后通知视图关于模型更改的消息。

 

具体流程:

(1)首先浏览器发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

(2)DispatcherServlet——>HandlerMapping,处理器映射器将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器)对象;

(3)DispatcherServlet——>HandlerAdapter,处理器适配器将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

(4)HandlerAdapter——>调用处理器相应功能处理方法,并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

(5)ModelAndView对象(Model部分是业务对象返回的模型数据,View部分为逻辑视图名)——> ViewResolver, 视图解析器将把逻辑视图名解析为具体的View;

(6)View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构;

(7)返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

SpringMVC入门程序

(1)web.xml

<web-app>
  <servlet>
  <!-- 加载前端控制器 -->
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <!-- 
  	   加载配置文件
  	   默认加载规范:
  	   * 文件命名:servlet-name-servlet.xml====springmvc-servlet.xml
  	   * 路径规范:必须在WEB-INF目录下面
  	   修改加载路径:
   -->
   <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:springmvc.xml</param-value>   
   </init-param>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>
————————————————
版权声明:本文为CSDN博主「椰子Tyshawn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/litianxiang_kaola/article/details/79169148

(2)springmvc.xml

<beans>
	<!-- 配置映射处理器:根据bean(自定义Controller)的name属性的url去寻找handler;springmvc默认的映射处理器是
	BeanNameUrlHandlerMapping
	 -->
	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
	
	
	<!-- 配置处理器适配器来执行Controlelr ,springmvc默认的是
	SimpleControllerHandlerAdapter
	-->
	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
	
	<!-- 配置自定义Controller -->
	<bean id="myController" name="/hello.do" class="org.controller.MyController"></bean>
	
	<!-- 配置sprigmvc视图解析器:解析逻辑试图; 
		后台返回逻辑试图:index
		视图解析器解析出真正物理视图:前缀+逻辑试图+后缀====/WEB-INF/jsps/index.jsp
	-->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsps/"></property>
		<property name="suffix" value=".jsp"></property>		
	</bean>
</beans>

 (3)自定义处理器

public class MyController implements Controller{

	public ModelAndView handleRequest(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		ModelAndView mv = new ModelAndView();
		//设置页面回显数据
		mv.addObject("hello", "欢迎学习springmvc!");
		
		//返回物理视图
		//mv.setViewName("/WEB-INF/jsps/index.jsp");
		
		//返回逻辑视图
		mv.setViewName("index");
		return mv;
	}
}

 (4)index页面

<html>
<body>
<h1>${hello}</h1>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一对一项目指导,在线购物网站webform+SQLServer技术架构

我是Tom老师&#xff0c;10开发经验&#xff0c; 我先后在携程网、陆金所&#xff0c;两家互联网和金融行业领头公司 担任高级开发工程师&#xff0c; 技术深厚&#xff0c;开发经验丰富&#xff0c;认真负责。 我现在专门做一对一编程辅导。 希望我的专业辅导&#xff0c;…

02数字图像基础

文章目录 2数字图像基础2.4图像取样和量化2.4.4图像内插 2.5像素间的一些基本关系2.5.1相邻像素2.5.2邻接性、连通性、区域和边界2.5.3距离度量 2.6 数字图像处理2.6.1阵列和矩阵操作2.6.2线性操作和非线性操作2.6.3算术操作2.6.5空间操作2.6.6向量与矩阵操作2.6.7图像变换2.6.…

架构演变之路

一)单机架构: 一)定义:应用服务和数据库服务器共用一台服务器&#xff0c;所有的服务被部署到一台服务器上面 蓝色的就是我们写的JAVA代码用户服务负责用户的登录和注册&#xff0c;商品服务用于商品的购买和交易&#xff0c;交易模块用于用户的下单和购买&#xff0c;在数据库…

周赛 Round#3 题解

又不能放图片&#xff0c;又不能写学校&#xff0c;你让我怎么办啊&#xff01;&#xff01; 系列文章目录 1.周赛 Round#1 2.周赛 Round#2 前言 这是周赛第三轮。//涉及隐私原因&#xff0c;博文里不放题目&#xff0c;要看的去http://0241:101:610:801.22222 划分字符串贪…

树状数组(一)

文章目录 前言一、树状数组简介二、树状数组的原理与相应模块三、实战演练3.1 区域和检索 - 数组可修改3.1.1 题目链接3.1.2 题目描述3.1.3 题目代码3.1.4 解题思路 3.2 数字流的秩3.2.1 题目链接3.2.2 题目描述3.2.3 题目代码3.2.4 解题思路 总结 前言 给定一段数字&#xff…

多元回归预测 | Matlab麻雀算法(SSA)优化BP神经网络回归预测,SSA-BP回归预测,多变量输入单输出模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | 麻雀算法(SSA)优化BP神经网络回归预测,SSA-BP回归预测,多变量输入单输出模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %-------------…

Windows10家庭版安装WSL

记录Windows10家庭版安装linux子系统WSL 查看自己的windows版本是否支持安装wsl2&#xff0c;cmd里输入ver查看。 系统版本&#xff1a;Windows 10 1903及以上版本。 系统内部版本&#xff1a; 18362及以上。 启用适用于Linux的windows子系统 右键命令提示符&#xff0c;以管…

小航编程题库2022年NOC决赛图形化(小低组)(含题库教师账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 单选题3.0分 删除编辑 答案:C 第1题对小猫编程&#xff0c;程序运行后&#xff0c;看到的小猫最终方向是多少&#xff1f; A、120B…

Compose二三事:初步认识

Compose 是什么&#xff1f; Compose是Jetpack系列中用于构建原生Android界面的工具库&#xff0c;Jetpack是Google推出的一系列帮助开发者规范代码的库。简单来说就是用代码写UI&#xff0c;也就是声明式UI。 声明式UI和命令式UI的区别在于&#xff0c;声明式UI更关心做什么&…

Python系列模块之标准库re详解

感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01; 目录 一、Python 正则表达式 1.1 re模块常用操作 1.2 re.match 1.3 re.search 1.4 re.findall 1.5 re.compile 函数 1.6 re.sub 检索和替换 1.7 re.split拆分 1.8 实战案例&#xff1a;根据文…

多看一眼多进步,python入门到放弃

python相关工具都安装完成后&#xff0c;就可以开始学习了&#xff0c;以下在pycharm中&#xff0c;以下学习内容来自b站边学习边整理的笔记&#xff0c;好记性不如赖笔头&#xff0c;多总结多记录&#xff0c;总是不错的 print()函数的使用 print函数可以输出哪些内容 &…

华为OD机试真题 Java 实现【优雅数组】【2023Q1 200分】

一、题目描述 如果一个数组中出现次数最多的元素出现大于等于k次&#xff0c;被称为k-优雅数组&#xff0c;k也可以被称为优雅阈值。 例如&#xff0c;数组[1, 2, 3, 1, 2, 3, 1]&#xff0c;它是一个3-优雅数组&#xff0c;因为元素1出现次数大于等于3次&#xff0c;数组[1,…

华为OD机试真题 Java 实现【取出尽量少的球】【2023Q1 200分】

一、题目描述 某部门开展 Family Day 开放日活动&#xff0c;其中有个从桶里取球的游戏。 游戏规则如下&#xff1a; 有 N 个容量一样的小桶等距排开&#xff0c;且每个小桶都默认装了数量不等的小球&#xff0c;每个小桶装的小球数量记录在数组 bucketBallNums 中。 游戏开…

eu.org申请免费域名 免费域名申请教程

EU.org是由Paul Mockapetris在1996年创建的免费域名服务&#xff0c;给没有资金买域名的个人或公司提供永久免费的域名。虽然是二级域名&#xff0c;但是已经被一些网络公司&#xff08;当然是国外的&#xff09;认定为顶级域名。 优缺点 优点&#xff1a;稳定性高、几乎没有…

04.Python Dash网页开发:ubuntu服务器部署DASH网站(uWSGI+nginx)

<~生~信~交~流~与~合~作~请~关~注~公~众~号生信探索> Dash官网只有付费的部署方式❌ 我的简单理解&#xff0c;uWSGI去运行dash app并且与nginx通讯&#xff1b;nginx处理浏览器传来的请求并把需求给uWSGI Python enviroment mkdir bioquestvi ~/bioquest/dash.yamlmicro…

docker搭建简单elk日志系统6(kibana设置)

1.进入kibana的索引管理界面清理调之前生成的测试数据流 2.模拟dev、uat、prod三个环境产生日志 修改filebeat配置文件&#xff0c;重启filebeat fields: application: testenv: devlog_type: normalfilebeat -c .\filebeat-test.yml产生日志 查看kibana数据流(已经生成dev环…

C++11 -- 类的新功能

文章目录 类的新功能默认成员函数类成员变量初始化强制生成默认函数的关键字default禁止生成默认函数的关键字delete继承和多态中的final和override关键字 类的新功能 默认成员函数 原来在C类中,有6个默认成员函数: 1: 构造函数 2: 拷贝构造函数 3: 拷贝赋值重载 4: 析构函数…

mysql 索引有哪几种?主键索引、唯一索引

面试题&#xff1a;mysql索引有哪几种&#xff1f; 答&#xff1a; 索引有两类&#xff0c;一是单列索引&#xff0c;二是组合索引。 单列索引&#xff0c;即一个索引只包含单个列&#xff0c;一个表可以有多个单列索引&#xff0c;但这不是组合索引。组合索引&#xff0c;即一…

SQL查询语言(3) 聚集查询和窗口函数的概念

查询结果排序 排序 规则如下: 1.语句: SELECT A1,A2.... FROM 表名 WHERE 选择条件 order by 属性1(ASC升序),属性3(DESC降序); 如果没有说明默认是升序排列: 2.对于空值的处理 如果是升序排列 NULL放在最后一行&#xff0c;如果是降序则放在第一行 上图为 按升序排列查询…

MyBatis动态SQL,基本语法加实战,一篇搞懂

问题&#xff1a; 有的时候我们需要实现批量删除&#xff1a;delete from t_car where id in(1,2,3,4,5,6,…这⾥的值是动态的&#xff0c;根据⽤户选择的 id不同&#xff0c;值是不同的); 多条件查询:有时我们需要根据多个不同地条件来进行查询&#xff0c;比如&#xff1a;se…