SpringMVC-狂神

news2024/10/5 4:05:59

SpringMVC优点:

轻量级,简单易学

高效,基于请求响应的MVC框架

与Spring无缝结合

功能强大:RESTful风格,数据验证,格式化,本地化,主题等

简单灵活

SpringMVC全部围绕DispatchServlet中心控制器来进行。DispatchServlet的任务是将请求分发到不同的处理器

DispatcherServlet源码:

 SpringMVC的运行原理:

1,用户发起请求,被在web.xml中注册的DispatcheerServlet拦截请求,

2,HandleMapping为处理器映射器,由DispatcherServlet自行调用,HandlerMappping由请求的url查找Handler处理器,这个处理器在注册bean中自己定义。

3,HandlerExecution表示具体的Handler处理器,其作用是根据url查找控制器,如url上被查找的控制器为:hello

4,HandlerExecution将解析后的信息传递给DispaerServlet,如解析控制器映射。

5,通过HandlerMapping中得到的Handle处理器,去寻找HandlerAdapter处理器适配器,及找到对应的Controller,

6,Controller调用业务层,

7,调用完service后,Controller 返回具体的信息ModelAndView给HandlerAdapter处理器适配器

8,HandlerAdapter将返回的具体业务信息如:ModerAndView返回给DispatcherServlet

9,DispatcherServlet接收到处理器适配器返回的ModelAndView之后,去寻找视图解析器ViewResolver,

10,视图解析器ViewResolver将视图名传递给DispatcherServlet

11,DispatcherServlet根据返回的视图的名字,选择到底需要调用那个视图。

12,返回视图给用户。

RestFuf风格:资源定位及资源操作的风格,不是一种协议,只是一种风格。

原来使用的风格:http://localhost:8080/id=1&name=zs

RestFul风格:http://mp.csdn.net/id/1/name/zs

优点:可以让软件设计更简洁,更有层次,更有易于缓存的实现等机制。

原始的操作方式:一个方法对应着一个功能,通过url中的不同参数来实现不同的效果。

RestFul风格:可以通过不同的请求方式来实现不同的效果。

SpringMVC:Ajax:异步无刷新请求

SpringMVC:基于MVC开发模式的框架,用来优化控制器,是Spring家族的一员,同样具备IOC和AOP

MVC:一种开发模式,是模型视图控制器的简称,所有的web应用都是基于MVC的开发模式的。

M:Model模型,包含实体类,业务逻辑层,数据访问层

V:View:包含html,JavaScript,vue等,用来呈现数据的

C:Control:控制器,接受客户端请求,并返回响应给客户端的组件,Sevrlet就是组件

SpringMVC优点:轻量级基于MVC的框架,具备IOC和AOP,易上手,完全基于注解开发。

SpringMVC的执行流程:

基于直接的SpringMVC框架开发步骤

1,新建Webapp模板

2,完善Maven目录

3,修改pom.xml文件,添加SpringMVC的依赖,添加Servlet依赖

4,添加SpringMVC.xml配置文件, 指定包扫描,添加视图解析器

5,删除web.xml,添加web.xml文件,

6,在web.xml文件中注册springmvc框架(所有web请求都是基于servlet的)

7,开发页面

8,开发控制器(Servlet),他是一个普通的类

9,添加Tomcat进行 测试

Spring注解

1,@Controller:将控制层的创建对象的功能交给Spring容器

2,@RequestMapping:映射服务器访问的名称

1)此注解可加在方法上,为某个方法添加一个路径,通过这个路径可以访问这个方法。

@RequestMapping("demo")
    public String domo(){
        return "demo";
    }

2)可以加载类名上,相当于添加一个包路径(虚拟路径)

比如:在yyk包下有两个类:A和B,同时具有方法C,并且方法C被@RequestMapping(“/index”)注解修饰,如果此时访问C方法,就会冲突,所以此时在A和B上添加@RequestMapping(“A”)就可以通过/A/index访问到A类中的C方法。

3),此注解可以区分get和post请求

4)RequestMapping5种属性注入的方式优化

a,值注入

@RequestMapping("index1")

public String index(String name,int age){ return "main";}

<input type = “text” name = "name">

<intput type = "text" name = "age">

<input type = "button" value = “提交”>

保证提交的数据name属性和方法的参数相同,Spring会自动对属性进行注入。

b,对象注入

class User{String name;int age; 构造方法和Setter方法}

@RequestMapping("index2")

public String index(User user){sout(user); return "main";}

<input type = “text” name = "name">

<intput type = "text" name = "age">

<input type = "button" value = “提交”>

保证从input标签中传入的name值和实体类种的对象名一致们,Spring会自动将数据进行封装

c,动态占位符提交

@RequestMapping("index3/{name}/{age}")

public String index(

        @PathVariable

        String name;

        @PathVariable

        int age;

){ sout(age + " ," +name); return "main"}

<a href = "${pageContext.request.contextPath}/index/张三/22.do">动态提交</a>

使用动态占位符提交数据,一般使用在超链接中,将需要传入的属性,在请求路径种使用/参数/参数1的形式进行传递,在接收端使用/{name}/{age}的形式进行属性注入。

d,请求参数映射

@Request("index4")

public String index(@ReuqestParam("name") String uname,@RequestParam("age") int uage){sout(uage+","+uname);return "main"; }

<input type = “text” name = "name">

<intput type = "text" name = "age">

<input type = "button" value = “提交”>

当请求中的参数和方法中的参数名不一致时,使用@RequestParam注解,将请求中的注解注入到方法的参数中。

e,手工提前数据使用Request对象提取

@ReuqestMappping("index5")

public String index(HttpServletRequest request){

String name = request.getParamter("name");

int age = Integer.parseInt(request.getParamter("age"));

return "main";}

<input type = “text” name = "name">

<intput type = "text" name = "age">

<input type = "button" value = “提交”>

中文乱码配置过滤器:

action方法的返回值:

1)String:返回客户端资源的地址,自动拼接前缀后缀,还可以屏蔽自动拼接字符串,指定返回路劲。

2)Object:返回Json格式的对象,自动将对象或集合转为json,使用jackson工具进行转换,必须要添加jackson依赖。一般用于ajex请求。

3)void:一般用于ajax请求。

4)基本数据类型:用于ajax请求。

5),ModelAndView

ajax请求步骤:

1,添加jackson依赖

2,在webapp目录下新建js目录,添加Jquery的函数库

3,导入函数库在html中

4,在方法上添加注解@ResponseBody注解

5,在springMVC.xml中添加注解驱动<mvc:annotationdriven/>,用来解析@ResponseBody注解

     

3,@ResponseMapping:用来处理ajax请求。

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

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

相关文章

AI(人工智能),时代的风口

你知道AI并非一个新词吗&#xff1f; 你知道 AI 正在影响着包括数学、物理学、生命科学等诸多领域的前沿科学研究吗&#xff1f; “AI是一个具有魅力的词&#xff0c;也是一个很古老的词”。 我们通常所说的AI &#xff08;Artificial intelligence&#xff09; 翻译为“人工…

安卓玩机搞机技巧综合资源-----不亮屏幕导资料 有屏幕锁保数据刷机等 多种方式【十五】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

C#打开摄像头后获取图片,调用face_recognition进行人脸识别

运行效果如截图&#xff1a;左边和保存的图片做对比&#xff0c;打印相似度&#xff0c;部分打印内容为python中的打印输出&#xff0c;可以用来做结果判断。右边打开摄像头后&#xff0c;可以单张图片进行人脸识别&#xff0c;或者一直截图镜头中的图片进行比对。期中python是…

ReSharper添加对最新C#11特性的支持

ReSharper添加对最新C#11特性的支持 C#11 UTF-8文字-增加了对UTF-8文字的基本支持。代码分析现在建议对文字使用u8后缀&#xff0c;而不是System.Text.Encoding.UTF8.GetBytes()方法或具有适当UTF8符号的字节数组。还有一组UTF-8文本的编译器警告和错误。 文件本地类型-添加了对…

服务器公网带宽1M能同时接受多少人访问?

文章目录1、什么是服务器的带宽?2、服务器带宽多少?3、服务器带宽1M能同时接受多少人访问?1、什么是服务器的带宽? 在服务器托管中&#xff0c;服务器带宽指在特定时间段从或向网站/服务器传输的数据量&#xff0c;例如&#xff0c;单月内的累积消耗“带宽”&#xff0c;实…

【开源掌机】百问网DShanMCU-Mio开源掌机(爻-澪)项目,完美支持运行10多个模拟器!

众筹说明 定金翻倍&#xff0c;即定金19.9元&#xff0c;在付尾款时可抵40元(成品售价不会超过120元)&#xff01;达标当天就开搞&#xff0c;满100人加速搞尽量在年前发货&#xff0c;让大家先玩起来&#xff01;如果不达标则原路退款&#xff0c;项目取消。 众筹时间&#…

利用Matlab进行图像分割和边缘检测

本文章包含以下内容&#xff1a; 1、灰度阀值分割 (1)单阈值分割图像 先将一幅彩色图像转换为灰度图像&#xff0c;显示其直方图&#xff0c;参考直方图中灰度的分布&#xff0c;尝试确定阈值&#xff1b;应反复调节阈值的大小&#xff0c;直至二值化的效果最为满意…

LDR6035PD快充快放带数据还要啥莲花清翁

随着Type-C的普及和推广&#xff0c;目前市面上的移动电源正在慢慢淘汰micro-USB接口&#xff0c;逐渐都更新成了Type-C接口&#xff0c;micro-USB接口从2007年上市&#xff0c;已经陪伴我们走过十多个年头&#xff0c;自从2015年Type-C登场&#xff0c;micro-USB也开始渐渐淡出…

写给前端开发者的「Promise备忘手册」

前言 大家好&#xff0c;我是HoMeTown&#xff0c;Promise想必大家都知道&#xff0c;在平时的开发工程中也经常会有用到&#xff0c;但是Promise作为ES6的重要特性&#xff0c;其实还拥有很多丰富的知识&#xff0c;本文面向比较初级一些的同学&#xff0c;可以帮你搞懂Promi…

金庸群侠传3DUnity重置入门-Mods开发

金庸3DUnity重置入门系列文章 金庸3dUnity重置入门 - lua 语法 金庸3dUnity重置入门 - UniTask插件 金庸3dUnity重置入门 - Mods开发 金庸3dUnity重置入门 - Cinemachine 动画 金庸3dUnity重置入门 - 大世界实现方案 金庸3dUnity重置入门 - 素材极限压缩 (部分可能放到付…

[附源码]Nodejs计算机毕业设计基于web的社团管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

机器学习——01基础知识

机器学习——01基础知识 github地址&#xff1a;https://github.com/yijunquan-afk/machine-learning 参考资料 [1] 庞善民.西安交通大学机器学习导论2022春PPT [2] 周志华. 机器学习.北京:清华大学出版社,2016 [3] AIlearning 一、机器学习算法的应用 目前&#xff0c;机…

【Redis】集合Set和底层实现

文章目录Redis 集合(Set)Set简介常用命令应用场景共同关注实例整数集合整数集合介绍整数集合的升级哈希表哈希表的原理和实现Redis中的哈希表rehash渐进式rehashRedis 集合(Set) Set简介 Redis set对外提供的功能与list类似是一个列表的功能&#xff0c;特殊之处在于set是可以…

多维时序 | MATLAB实现GRU多变量时间序列预测

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

c语言中fread,fgets等取文件字符的缓存空间小出现问题

一种奇怪现象 #include <stdio.h> #include <stdlib.h> #include<windows.h>int main(void){int i;printf("hello\n");fflush(stdout); //当没有这部刷新&#xff0c;hello会和end等到时间一起输出Sleep(2000); //windowsa.h中的Sleep&#…

某研究生不写论文竟研究起了算命?

起因 大约一个月前&#xff0c;在学校大病一场&#xff08;不知道是不是&#x1f411;了&#xff0c;反正在学校每天核酸没检测出来&#xff09;在宿舍休息了整整一周。当时因为发烧全身疼所以基本一直躺着刷刷视频。看了一周倪海厦老师讲的天纪&#xff0c;人纪感悟颇多&…

央企招聘:中国航空油料集团2023公开招聘

一、公司简介 中国航空油料集团有限公司&#xff08;以下简称“中国航油”&#xff09;成立于2002年10月11日&#xff0c;是以原中国航空油料总公司为基础组建的国有大型航空运输服务保障企业&#xff0c;是国内最大的集航空油品采购、运输、储存、检测、销售、加注为一体的航…

Spring Boot打成jar包后运行及配置文件的问题

Maven打包 因为Spring Boot项目内置Tomcat&#xff0c;所以可以打成一个jar包直接运行&#xff0c;而不必再需要安装Tomcat了。 如果用IDEA打包&#xff0c;还得先添加Artifacts&#xff1a; 然后再选择‘Main Class’ 显然比较麻烦&#xff0c;而且每次导入项目都得重新添加…

高频功率放大器工作原理总结(高频和低频功率放大器的区别)

高频功率放大器处在发射机的末级&#xff0c;主要作用是把高频已调拨信号进行功率放大&#xff0c;满足发送功率的要求&#xff0c;然后通过天线辐射到空间&#xff0c;保证一定区域接收机能够接收到信号电平。 高频功率放大器是通信系统中发送装置的组件&#xff0c;按照频带的…

【DOTS学习笔记】Cache层级结构与排队管理

目录前言如何理解L1,L2,L3级缓存的树形结构设计排队的烦恼现实中的排队烦恼计算机程序设计中的排队队列类型前言 本文是Metaverse大衍神君的《DOTS之路》系列课程的学习笔记 如何理解L1,L2,L3级缓存的树形结构设计 排队的烦恼 现实中的排队烦恼 这是一张关于排队的图&#xf…