简单与实用:SpringMVC的常见使用
一、前言
现在的项目大多数都是使用SpringMVC作为MVC框架。SpringMVC的学习成本较低,容易上手,简单实用。
二、应用
1、@Controller & @RequestMapping
控制层需要有@Controller的注解,一来标记这个类作为一个对象,二来标记这个是SpringMVC的控制层,用于接受请求。一般情况下需要在类的上面标记@RequestMapping,来接收请求,解析请求路径。
2、ModelAndView
这是一个常用的方法,用于处理同步请求。通过addObject(String,Object)方法,可以将数据传送到页面,一般通过C标签和EL表达式获取值。
视图通过setViewName的方法,返回到视图解析器。视图名称在视图解析器中拼接前后缀后获取视图并返回给客户端。
3、$.post & ResponseEntity<Map<String,Object>>(String id)
在实际开发的过程中,我们经常用到Ajax来进行前后端交互。
$.post("${pageContext.request.contextPath }/Test/getData",{"id":"1"},function(data){
alert(data);
});
在后台我们需要通过@ResponseBody来指定返回页面数据,而不是页面跳转
@RequestMapping("/getData")
@ResponseBody
public String getData(String id) {
System.out.println(id);
return "'type':'10'";
}
如果我们需要传多个参数,上述的方式就需要在js中解析json字符串。因此各家公司有各家公司的做法,他们都会封装自己的框架,来提高开发效率。当然SpringMVC的开发者不会那么笨,让用户用上面这种方式操作,他们也封装了一套方法
@RequestMapping("/getData")
public ResponseEntity<Map<String,Object>> getData(String id){
Map<String,Object> map = new HashMap<String,Object>();
System.out.println(id);
map.put("type", "10");
map.put("flag","1");
return new ResponseEntity<Map<String,Object>>(map,HttpStatus.OK);
}
相对而言,前台取数据就比较方便:
$.post("${pageContext.request.contextPath }/Test/getData.do",{"id":"1"},function(data){
alert(data.type);
console.log(data.flag);
});
4、@RequestParam & @PathParam
@RequestParam用于接受参数,一般情况下SpringMVC会自动映射字段,可以不加这个注解。当遇到比如名称不同,上传文件的时候,这个注解就显得必要了。
另外一个比较重要的注解是@PathParam。我没记错的话,CSDN之前是用asp来做的,但是他的文章保存路径依然没有变化,大家在用看CSDN博客的时候有没有注意到url最后那串数字是啥来的?
从SpringMVC的角度来看,那应该是一个id,一个字段,用于后台数据库查询的
@RequestMapping("/test/{id}")
public ResponseEntity<Map<String,Object>> test(@PathParam("id")String id){
Map<String,Object> map = new HashMap<String,Object>();
System.out.println(id);
return new ResponseEntity<Map<String,Object>>(map,HttpStatus.OK);
}
通过@PathParam 我们可以获取到路径上的值,用作查询条件,查询出文章。
5、文件上传与下载
在实际开发的过程中,我们不仅会用同步、异步请求,同时还会用作文件的上传和下载。
Spring MVC 实现文件的上传和下载这篇博客包含了文件上传和下载的常用方法,有空不妨看下,当实际开发时用上文件上传和下载的时候,有这个成功案例可以参考。
三、结束语
本文没有阐述SpringMVC的基本原理,没有阐述MVC的思想,也不是SpringMVC的完整教程。本文旨在阐述SpringMVC的基本使用,由于SpringMVC本生实用性很强,简洁度很高,即使没有基础过SpringMVC的同学都通过本文了解到SpringMVC的基本使用,再参考其他文章、教程,两三天上手是没有问题的。文章如有不当之处,还请各位不吝赐教,加以指正。
Reference:
[1] 黄勇, 从 MVC 到前后端分离, https://my.oschina.net/huangyong/blog/521891
[2] Sunnier, 史上最全最强SpringMVC详细示例实战教程, https://www.cnblogs.com/sunniest/p/4555801.html
[3] Hello.NET, SpringMVC注解@Component、@Repository、@Service、@Controller区别, https://www.cnblogs.com/mfc-itblog/p/6854504.html
[4] 钱春华, Spring MVC 实现文件的上传和下载, http://blog.csdn.net/qian_ch/article/details/69258465
[5] ryelqy, SpringMVC之使用ResponseEntity, https://blog.csdn.net/ryelqy/article/details/76650808
简单与实用:SpringMVC的常见使用的更多相关文章
- vim简单的实用总结
vim简单的实用总结 介绍vim常用的四种模式:一般模式,编辑模式,指令列命令模式与可视模式.一,一般模式 用vim filename打开文件后直接进入的就是一般模式,在这个模式下可以用hjkl移 ...
- 【转载】手把手教你使用Git(简单,实用)
手把手教你使用Git(简单,实用) 标签: git 2016年04月21日 20:51:45 1328人阅读 评论(0) 收藏 举报 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. ...
- Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】
一:讲故事 上一篇介绍的 6 个特性从园子里的反馈来看效果不错,那这一篇就再带来 6 个特性同大家一起欣赏. 二:特性分析 1. 像弱类型语言一样解析 json 大家都知道弱类型的语言有很多,如: n ...
- 手写一个简单版的SpringMVC
一 写在前面 这是自己实现一个简单的具有SpringMVC功能的小Demo,主要实现效果是; 自己定义的实现效果是通过浏览器地址传一个name参数,打印“my name is”+name参数.不使用S ...
- easyDialog 简单、实用的弹出层组件
easyDialog 简单.实用的弹出层组件 使用背景 在完成导师需求时,导师要求寻找比一个layer弹出层组件体积小得多的.最好能嵌入在进HTML代码中而非src引用的弹出层组件,在这个需求下,我找 ...
- 你我都会遇到的需求:如何导出MySQL中的数据~ 简单!实用!
目录 你我都有的需求 方式一:tee 方式二:mysql_use_result 推荐阅读 一.给研发同学看的面试指南 二.MySQL-视频 三.进阶MySQL中间件-视频 四.白日梦的云原生-笔记 五 ...
- 简单地总结几种常见web攻击手段及其防御方式
web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...
- 一个简单而实用的JQ插件——lazyload.js图片延迟加载插件
前 言 Cherish 看多了炫酷的插件之后再来看这么一个小清新的东西,是不是突然感觉JQ插件感觉很友好了,简单强大最重要的是实用. 这篇文章将详细讲解一下lazyload.js的用法 lazy ...
- 工作中简单又实用的vim配置
set number syntax enable set tabstop=4 set shiftwidth=4 set noexpandtab set cindent set autoindent s ...
随机推荐
- 腕表wacche英语wacche手表
watch As a noun, from Middle English wacche, Etymology As a noun, from Middle English wacche,See bel ...
- ZooKeeper基本介绍
一.入门 1.1 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调的Apache项目.可用于服务发现,分布式锁,分布式领导选举,配置管理等. Zookeeper从设计模式角度来理解: ...
- Apache Kafka是数据库吗?
最近思路有些枯竭,找些务虚的话题来凑.本文内容完全来自于Martin Kelppmann在2019年Kafka伦敦峰会上的演讲.顺便提一句,Kelppmann是<Designing Data-I ...
- input限制输入
input 只能输入数字.字母.汉字等 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace( ...
- idea中导入Maven项目,但是没有Maven Dependencies,且没有pom
1. 可以复制其他项目的类似的pom.xml文件复制到当前项目下 2. 导入此项目为maven项目 3. 配置相应的maven环境 4. 如果此时的Application.class中的main方法没 ...
- ORA-12514: 监听程序当前无法识别连接描述符中请求的服务
/** 异常:ORA-12514: 监听程序当前无法识别连接描述符中请求的服务 * 背景:在很长一段时间都在连接远程开发库,曾偶尔有一次想要连接本地的库进行sql测试,发现连接失败,起初一直有无监听. ...
- css透明度、毛玻璃效果
透明度: 1.opacity 背景颜色和字体同时透明 2.background:rgba(255,255,255,0.2); 只是背景颜色透明,字体不透明 代码: .info{ backgr ...
- List加载因子和扩容因子
List.Map.set的加载因子,默认初始容量和扩容增量 首先,这三个概念说下.初始大小,就是创建时可容纳的默认元素个数:加载因子,表示某个阀值,用0~1之间的小数来表示,当已有元素占比达到这个阀值 ...
- (十一)Kubernetes StatefulSet控制器
StatefulSet介绍 前面使用Deployment创建的Pod是无状态的,当挂载了volume之后,如果该Pod挂了,Replication Controller会再启动一个Pod来保证可用性, ...
- socks_send(fd,sbuf,strlen(sbuf));
unix 命名socket发送直接发送 1024字节 计算strlen 计算的字符不正确,截取 无法正常发送