简单与实用: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 ...
随机推荐
- SAP CO-PA(盈利能力分析)
为了在这个现代和动态的环境中保持和发展,快速和及时的决策对于做出正确的决策更为重要.组织盈利能力是评估设计组织目标,目标和实现目标的核心参数.在本博客中,我将讨论SAP ERP中包含的工具,以分析组织 ...
- [echart] webpack中安装和使用
安装echart npm install echarts --save 全量引入 可以直接在项目代码中 require('echarts') 得到 ECharts. 官方示例 var echarts ...
- S5PV210 固件烧写 u-boot烧写
首先阅读CW210_CD自带光盘中CW210 开发板使用手册.pdf 使用usb 拨码开关置成usb启动.xx可以是ON或OFF.开发板上面也有丝印提示 usb线接好,串口线接好 使用DNW下载 自带 ...
- ES6 对象解构赋值(浅拷贝 VS 深拷贝)
对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中. 拷贝对象 let aa = { age: 18, name: 'aaa' } let bb = {...aa}; co ...
- Python实现的贪婪算法
个州的听众都收听到.为此,你需要决定在哪些广播台播出.在每个广播台播出都需要支出费用,因此你力图在尽可能少的广播台播出 # 1.创建一个列表,其中包含要覆盖的州 states_needed = set ...
- 将java的jar包作为windows的服务来启动
1.在idea中用maven将程序打成jar,放到运行的目录中. 2.去github上面下载winsw: https://github.com/kohsuke/winsw/releases 3. 将W ...
- zabbix--微信告警
zabbix 微信告警机制 zabbix 告警机制有很多,比如邮件.微信.电话.短信等等.很多,但是像电话和短信都是有钱人玩的,我们这些穷屌丝玩玩 微信 邮件 就可以了. 参考:https://git ...
- 纯数据结构Java实现(10/11)(2-3树&红黑树)
欢迎访问我的自建博客: CH-YK Blog.
- nginx编译安装以及配置tcp转发
依赖包安装 yum -y install gcc gcc-c++ make automake autoconf pcre pcre-devel zlib zlib-devel openssl open ...
- 项目Beta冲刺(团队)--7/7
课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺 团队名称:葫芦娃队 作业目标:进行新一轮的项目冲刺,尽力完成并完善项目 团队博客 队员学号 队员昵称 博客地址 04160242 ...