简单与实用: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 ...
随机推荐
- xcode11新项目删除main.storyboard 两种方法
方法一 心急的童鞋按照老操作完成后再按照如下操作即可 /** 弃用storboard 1.info.plist去除 <key>UIApplicationSceneManifest</ ...
- npm err! Unexpected end of JSON input while parsing near解决办法
npm install时出现npm err! Unexpected end of JSON input while parsing near错误 输入 npm cache clean --fore ...
- 【转】Webpack 快速上手(上)
嫌啰嗦想直接看最终的配置请戳这里 webpack-workbench (https://github.com/onlymisaky/webpack-workbench) 由于文章篇幅较长,为了更好的阅 ...
- Dalvik虚拟机结构——1
Dalvik核心内容:libdvm.so 主要有C语言实现,依赖于Linux内核的一部分功能:线程机制,内存管理机制,每一个Android应有都对应一个dalvik实例 Dalvik虚拟机功能:主要 ...
- 分布式利器之redis-第二章
上期答案 问题1:Redis单线程为什么快?回答: 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1 ...
- k8s之Deployment 声明式地升级应用(五)
Deployment 声明式地升级应用 现在你已经知道如何将应用程序组件打包进容器,将他们分组到pod中,并为它们提供临时或者持久存储,将密钥或配置文件注入,并可以使pod之间互相通信.这就是微服务化 ...
- 带你快速上手前端三剑客之css
CSS介绍 CSS(Cascading Style Sheet , 层叠样式表)定义如何显示HTML元素.当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染) 组成 每个CS ...
- 转:spring mvc 设置@Scope("prototype")
spring中bean的scope属性,有如下5种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例prototype表示每次获得bea ...
- 提高python处理数据的效率方法
处理大数据的方法有很多,目前我知道就这么多,后面会持续更新: 一.将数据分批次读取 csv格式是常见的数据存储方式,对于我们普通人而言易于读写.此外,在pandas中有pd.read_csv()函数可 ...
- JVM垃圾收集算法之清除算法
最近看了一些大佬的博文,文中提到说:学习知识不能一味的死学滥学,在学之前要明白为什么要学这个知识,在实际的应用中怎么运用这个知识.我觉得说的很对,很多时候我学习确实是了解了这是什么原理,但是要说到实际 ...