版权声明:版权所有,请勿侵权
转自:https://blog.csdn.net/Smart_YC/article/details/52979982
@Controller
1:spring mvc 中将 controller 认为是 MVC中的C --控制层
2:规范命名 类名 xxxController
3:如果不基于注解: 该类需要继承 CommandController 或者 其他很多 参见 spring帮助
如果基于注解:在类名前 加上 @controller
4:补充:将类名前加上该注解,当spring启动 或者web服务启动 spring会自动扫描所有包(当然,这个可以设置)
作用: 就是告诉服务器 这个类是MVC中的C 这个类可以接收用户请求 处理用户请求
问题:如何接收用户请求
1:假设用户请求URL 是: http://localhost:8080/项目名/xxx.do do不do都一样 不管这个do 你用什么都可以
2:这个时候,spring开始在所有的 C 中,找对应的处理请求的方法
3:在任意的可以C的类中,在你想要处理此请求的方法定义的前面
@RequestMapping("/xxx") 这个时候的xxx 就是用户请求的xxx 不管do
public String 方法名()
{
return “aaa”;
返回一个字符串,非常有用 要注意 用来决定要显示的MVC的 V 视图层 是哪个
}
问题:如何让spring 去扫描类 建立关联
1:在配置文件中 (spring)的 假设是 mvc.xml 中
2:加入 <context:component-scan base-package="包路径"/>
问题 如何返回到视图层 V
1: 解决:此时,需要在配置文件中,加入视图解析器 有很多种 ,太多了
2:这里用基于jsp/jstl 视图
3:在web.xml 中加入bean 配置
<property name="prefix" value="/WEB-INF/views"/> 前缀
<property name="suffix" value=".jsp"/> 后缀
小结:
1:spring 中的C 一般起类名 XXXController 在这个类里面 需要加入@controller 标志这个类可以作为请求处理类 也就是 控制类
2:这个控制类里面可以有很多方法,哪个方法用来处理用户请求,就在那个方法前面 加 @RequestMapping(“/xxxxx请求路径”)
3;当请求处理完毕后 返回值 决定了 该处理完毕后 用户将跳转到那个页面 这个很重要
4:例如
@RequestMapping("/xxx") 这个时候的xxx 就是用户请求的xxx 不管do
public String 方法名()
{
return “aaa”;
返回一个字符串,非常有用 要注意 用来决定要显示的MVC的 V 视图层 是哪个
}
返回 aaa 根据配置文件中的 视图处理器配置 加入前缀 后缀
页面将跳转到 /WEB-INF/views/aaa.jsp
@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
类定义处:规定初步的请求映射,相对于web应用的根目录;
方法定义处:进一步细分请求映射,相对于类定义处的URL。如果类定义处没有使用该注解,则方法标记的URL相对于根目录而言;
RequestMapping注解有六个属性,下面我们把她分成三类进行说明。
还有一个注意的,@RequestMapping的默认属性为value,所以@RequestMapping(value="/example")和@RequestMapping("/example")是等价的。
@RequestMapping除了可以指定URL映射外,还可以指定“请求方法、请求参数和请求头”的映射请求
注解的value、method、params及headers分别指定“请求的URL、请求方法、请求参数及请求头”。它们之间是与的关系,联合使用会使得请求的映射更加精细。
2.1 method属性可以指定请求的类型,http中规定请求有四种类型:get,post,put,delete。其值在枚举类型RequestMethod中有规定。
2.2 params和headers支持简单的表达式:
—— params1:表示请求必须包含名为params1的请求参数
—— !params1:表示请求不能包含名为params1的请求参数
—— params1 != value1:表示请求必须包含名为params1的请求参数,但是其值不能是value1
—— {“params1 = value1”, “param2”}:表示请求必须包含名为params1和params2两个请求参数,且params1的值必须为value1
2.3 Ant风格资源地址支持3种通配符:
—— ? : 匹配文件名中的一个字符
—— * : 匹配文件名中的任意多个字符(至少有一个字符)
—— ** : 匹配多层路径(至少有一层)
@RequestMapping支持Ant风格的URL:
—— /user/create?? 匹配/user/createAA、/user/createBB等URL (??匹配任意两个字符)
—— /user/*/createUser 匹配/user/aaa/createUser、/user/bbb/createUser等URL (*匹配任意字符)
—— /user/**/createUser 匹配/user/createUser、/user/aaa/bbb/createUser等URL (**匹配任意多层路径)
注意:其?和*必须要有,如果为空,则不符合
2.4 @PathVariable 映射URL绑定的占位符
可以在控制器处理方法的入参中使用 @PathVariable 获取到URL中占位符参数。 URL中的{xxx}占位符可以通过 @PathVariable(“xxx”) 绑定到操作方法的入参中。
@RequestBody
作用:
i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
使用时机:
A) GET、POST方式提时, 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);
B) PUT方式提交时, 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded, 必须;
multipart/form-data, 不能处理;
其他格式, 必须;
说明:request的body部分的数据编码格式由header部分的Content-Type指定;
@ResponseBody
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
作者:放眼未来活在当下
来源:CSDN
原文:https://blog.csdn.net/Smart_YC/article/details/52979982
版权声明:本文为博主原创文章,转载请附上博文链接!