栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC总结

SpringMVC总结
  • MVC思想
  • SpringMVC
  • SpringMVC运行流程
  • SpringMVC常用注解
      • @Controller
      • @RequestMapping
          • name
          • value
          • path
          • method
          • params
          • headers
          • consumes / produces
      • @RequestParam / @PathVariable / @RequestBody / @SessionAttributes / @ModelAttribute

MVC思想

MVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑、数据与界面显示分离。把众多的业务逻辑聚集到一个部件里面

SpringMVC

SpringMVC是基于java实现MVC框架模式的轻量级框架,通过分离model,view,controller,将web程序进行解耦,简化开发

SpringMVC运行流程

1、用户发送请求至前端控制器DispatcherServlet,DispatcherServlet请求 HandlerMapping 查找 Handler,可以根据 xml 配置、注解进行查找。
2、HandlerMapping根据url找到具体的Handler,生成处理器对象及处理器拦截器一并返回给DispatcherServlet。
3、DispatcherServlet调用处理器适配器去执行 Handler
4、处理器适配器执行 Handler
5、Handler 执行完成后给适配器返回 ModelAndView
6、处理器适配器向前端控制器返回 ModelAndView
7、DispatcherServlet请求试图解析器去进行视图解析,根据逻辑视图名来解析真正的视图。
8、视图解析器向DispatcherServlet返回 view
9、DispatcherServlet进行视图渲染,将模型数据(在 ModelAndView 对象中)填充到 request 域
10、DispatcherServlet响应用户

SpringMVC常用注解 @Controller

上文知道SpringMVC会根据url去找处理器,而SpringMVC提供了一个很简单的定义Controller的方式就是在类上面添加@Controller,这只是告诉SpringMVC这是个Controller,找处理器需要到这些Controller里面找,所以SpringMVC会扫描包里所有@Controller注解的类,真正的处理器还是Controller里面注解了@RequestMapping的方法,所以@Controller只是标记了这个类是Controller。

@RequestMapping


@RequestMapping中一共有8个参数,我们分别来解析一下

name

这个属性是Spring4.1后新增,他的作用是指定映射的名称

<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
...
Get Address

转载-这边文章对name的解释非常详细,可以看看你知道@RequestMapping的name属性有什么用吗?

value

指定请求的实际地址

path

与value同义,path 和 value 互相引用
@RequestMapping(value=“login”)、@RequestMapping(path=“login”),这两种情况都能对login()方法进行访问
path属性支持通配符匹配:
@RequestMapping(path=“login/*”);

method

指定请求类型, 如GET、POST、PUT、DELETE等;
在spring4.3之后,提供了更方便的注解方式
如@GetMapping,@PostMapping,@PutMappingd等等,和method方法同义

params

必须包含参数名,参数对应值有没有无所谓,只要包含参数名就可以,否则无法访问

headers

指定request中必须包含某些指定的header值,才能让该方法处理请求,headers中支持Spring的SpEL表达式

consumes / produces

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
常见的媒体格式类型如下:
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
application/xhtml+xml :XHTML格式
application/xml: XML数据格式
application/atom+xml :Atom XML聚合格式
application/json: JSON数据格式
application/pdf:pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

@RequestParam / @PathVariable / @RequestBody / @SessionAttributes / @ModelAttribute

1、@RequestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),它有三个常用参数:defaultValue = “0”, required = false, value = “isApp”;defaultValue 表示设置默认值,required 同过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型名字。

2、@PathVariable是uri占位符,用来获取uri template中的variable,常用于restful风格的写法

	@RequestMapping("test/{id}")
    public String testAntPath(@PathVariable(value = "id") Integer id) {
        System.out.println("testAntPath" + id);
        return OK;
    }

3、@RequestBody是通过解析请求体然后映射到我们的参数,在整个SpringMVC的处理流程中,会通过HandlerMethod来代理每个Map后的controller和method,在通过反射invoke method的过程中,会解析request来获得arguments,而@RequestBody就是在解析参数的这个过程中起作用的,对于@RequestBody来说,它对应的解析器是RequestResponseBodyMethodProcessor。
该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。
因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap里,这种情况在某些特殊需求下使用,详情查看FormHttpMessageConverter api;

4、@SessionAttributes / @ModelAttribute
@SessionAttributes:如果希望在多个请求里共用数据,可以在Controller上面加一个@SessionAttributes注解,
它会把model中对应的参数暂存到httpSession中。
@SessionAttributes只能定义在类上面

@ModelAttribute:该注解有两个用法,一个是用于方法上,一个是用于参数上;
用于方法上时: 通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上

-------------如有错误,请及时指正--------------------

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/967462.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号