文档章节

SpringMVC02入门

C
 CodeLjj
发布于 2016/09/05 21:08
字数 1124
阅读 5
收藏 0

上一篇我们讲到最小配置的SpringMVC,如果细心的人,就会发现,其实不是最小,充其量只能算一个能跑的程序。不管怎么样,我们继续进行学习吧,这一次,我会呈现一个更 像一个程序的demo,程序将会在上一篇的基础上继续开发,幸运的是我们有版本控制的东西,我使用的是git,我会在另开分支。如果你没有学会git,推荐去搜一下git,花个几分钟入个门,虽然我是学生,不是具有工作经验的人,但是应该要使自己的更加规范。好了废话不多说了,进入正题。come on springMVC。

    什么是MVC,学过基础的人一般,都应该应该大概掌握或者了解吧。 对于springMVC是非常完美的MVC的架构,同时他对REST的支持又是那么的无懈可击,可能我经验不足,但是你可以忽略我的这种讲法。

    过去springMVC有不基于注解的方式,但是这种方式开发效率比较低,而且对spring的依赖耦合度会大量上升,因此在开发中我们很少不使用注解的,换一句话说,就是我们懒了。这一次,我会跟上一篇有所不同,我会使用注解完成demo,然后再使用古老的非注解的方式实现一遍,但是需要注意的是,这种情况和上篇使用编程方式去解决本质上不同,上一篇的基于编程方式,我是推崇的,这里我是推崇注解的,我们慢慢学习,就会知道了。

    越来越感觉自己啰嗦了,十分抱歉了。

先介绍一个注解@Controller,控制器没错,会点英语英语都知道,这个也对应了MVC架构中的C。这个注解是被我们放在类上,用来标志一个这个类应该是一个控制类,更像下面这种方式

@Controller
public class MyController{
    ..........
}

接下来我们接受一个和上面注解紧密相关的另一外一个注解: @RequestMapping.

它的作用,是将你的请求缩小的一个方法上。比如

@Controller
public class myController{

    @RequestMapping("/myController")
    public void my(){
        ..........
    }

}

这样一个请求过来,去掉应用上下文后,如果剩下myController后就会对应进这个方法了。注意这个方法返回值是void,意味着,在源码某个的地方,调用后这个方法,将得不到结果,意味着在里面我们必须手动处理输出响应。事实上很少会使用void的。所以你可以推出的结论是,可以返回其他值,但是,这需要配置一些东西。这是后话,我们之后会讨论的。现在我们把注意力放这个注解上去。请注意上面标红色的地方,如果熟悉Strut2的应该知道,Strut2对请求限制粒度的在类上,我学过Strut2的东西也忘了差不多(没搜索的话),但这个特性在我第一次学SpringMVC时深深给我留下 印象极深一点。也不一定是谁好谁坏啊,因为粒度的问题,在java并发,在编程锁上,在数据库上,在分布式粒度都是一个值得考量的地方。

    跟@RequestMapping相关的属性还是有很多的,你有源码的话,ctrl+鼠标右键点进去看一看,

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {

	String name() default "";

	@AliasFor("path")
	String[] value() default {};

	@AliasFor("value")
	String[] path() default {};

	RequestMethod[] method() default {};

	String[] params() default {};
    
    String[] headers() default {};
    
    String[] consumes() default {};

    String[] produces() default {};
}

里面的源码去掉注释大概是这样的,我这里简单的介绍下重要的几个,其实源码注释也说的很明白,英语不好的童鞋,真的应该多多学习英语。

path:映射请求路径,不写的时候默认就是这个,借用源码的例子

@RequestMapping("/foo")
@RequestMapping(path="/foo")
@RequestMapping(value="/foo")

这样写他们实际是一个意思,也就是说其实是相似的。

method:HTTP支持的方法.会web开发的人应该都不陌生,尤其是post,get。当然这里是支持其他所有的方式的,正是这一点,也非常符合Rest的条件。

params:指出请求必须带的参数。

headers:指出头部必须带的内容。

produces:匹配Accept

consumes:匹配Content-type

。。。。。。待续

© 著作权归作者所有

C
粉丝 0
博文 2
码字总数 2219
作品 0
杭州
程序员
私信 提问
spring mvc 访问jsp 样式丢失

今天初学spring mvc 就碰到了个路径问题 具体问题如下: 项目结构如上 在这里打开jsp 样式正常 spring-servlet.xml 的配置 MyMutiActionController toAddPageController 当我浏览器上 http:/...

kong_resty
2012/07/12
3.3K
4
【干货】界面控件DevExtreme视频教程大汇总!

DevExtreme是一款为移动开发者精心准备的,跨平台开发的HTML5/JS框架,可以构建iOS、Android、Tizen和Windows Phone 8应用程序,是Visual Studio开发人员开发跨平台移动产品的优选工具。本文...

鸟栖沙岩
2016/12/07
40
0
Android零基础入门第85节:Fragment使用起来非常简单

Fragment创建完成后并不能单独使用,还需要将Fragment加载到Activity中,在Activity中添加Fragment的方式有两种:静态加载和动态加载,接下来分别进行学习。 一、静态加载 静态加载Fragment非...

鑫鱻
2017/10/27
0
0
Android零基础入门第87节:Fragment添加、删除、替换

前面一起学习了Fragment的创建和加载,以及其生命周期方法,那么接下来进一步来学习Fragment的具体使用,本期先来学习Fragment添加、删除、替换。 一、概述 在前面的学习中,特别是动态加载的...

鑫鱻
2017/11/08
0
0
《鸡啄米C++编程入门系列》系列技术文章整理收藏

《鸡啄米C++编程入门系列》系列技术文章整理收藏 收藏整理鸡啄米C++编程入门系列文章,供个人和网友学习C++时参考 1鸡啄米:C++编程入门系列之前言 2鸡啄米:C++编程入门系列之一(进制数) ...

开元中国2015
2015/05/26
132
0

没有更多内容

加载失败,请刷新页面

加载更多

ES 集群上,业务单点如何优化升级?

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! ES 基础 ES 集群 ES 集群上业务优化 一、ES 基础 ES 的安装下载,网上一大片,我这...

泥瓦匠BYSocket
17分钟前
1
0
input accept属性限制文件上传格式

上传文件的类型;具体做法如下所示: 注意:accept属性可以限制上传格式,其有兼容性如下 《1》上传.csv格式的 <input text="file" accept=".csv" /> 《2》上传.xls格式 <input text="file"......

Jack088
25分钟前
1
0
阿里开发者招聘节 | 面试题01:如何实现一个高效的单向链表逆序输出?

面试,如同玩一场饥饿游戏:既要对环境了然于胸,又要对自身心知肚明。发现一个好工作不容易,但成功应聘又会面临一系列的挑战。 为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别...

阿里云云栖社区
36分钟前
3
0
使用scp命令在多个Linux系统间进行文件复制

一,什么是scp scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。scp命令可以在linux服务器之间复制文件和目录.scp使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而安全的远...

老孟的Linux私房菜
36分钟前
0
0
CentOS7中ESL服务部署记录

在CentOS7上部署价签系统,需要安装Mysql,Redis,emqtt,jdk。 1)Mysql,参考 2)Redis,参考 3)emqtt,参考 4)jdk,参考 在jdk的下载地址中,下载rpm文件,通过ftp上传到虚拟机后,通过...

莫在全
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部