简单与实用: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 ...
随机推荐
- 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket
目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...
- SpringBoot2.x配置Cors跨域
1 跨域的理解 跨域是指:浏览器A从服务器B获取的静态资源,包括Html.Css.Js,然后在Js中通过Ajax访问C服务器的静态资源或请求.即:浏览器A从B服务器拿的资源,资源中想访问服务器C的资源 ...
- PHP在无限分类时注意的一些问题(不保证代码完全正确哦)
转自:PHP在无限分类时注意的一些问题(http://lxiaoke.cn) (注意:代码使用的是原生PHP,旨在提供解决思路)1 无限分类的查找(获取所有节点) 代码: /** * 无限分类查询,默 ...
- zabbix--邮件告警
zabbix 邮件告警机制 通过腾讯企业邮箱进行告警通知等.邮箱服务器账号需要在邮箱设置里面进行设置,开通ssl认证及专用密码 参考官档:https://www.zabbix.com/document ...
- Jenkins中如何实现debug配置
java -jar -Xmx512m -Dfile.encoding=UTF-8 -server -XX:-OmitStackTraceInFastThrow -server -agentlib:jd ...
- NEW jobs: A Prepare. Prepare. Prepare. 怎么准备都不过分
A Prepare. Prepare. Prepare. From: https://leetcode.com/explore/interview/card/leapai/272/general ...
- php静态方法
静态方法 (1)静态方法不能访问这个类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性: (2)从当前类(不是子类)中访问静态方法或属性,可以使用 self 关键字,self 指向当前类,就 ...
- wordpress在首页列出所有分类及分类下的文章
前面我们谈了wordpress调用指定分类文章,如果想要调用所有分类的文章如何实现呢?比如在wordpress首页列出所有分类及分类下的文章,其实方法类似 <?php $cats = get_c ...
- appium环境应该注意问题
python中的script要加入到环境变量中 pip3 install appium-python-client(安装appium模块通过引入webdriver) 如果pip3不是内部命令解决方法 ...
- Entity 类中加了@Id 注解后仍然出现org.hibernate.AnnotationException: No identifier specified for entity 错误
查看网上的资料,应该是报错的实体类com.example.domain.p.User中没有添加加主键的注解@Id,这个是必须的.但是我的实体类中明明已经添加了@Id,为什么还会报这个错误呢? 后来检查 ...