spring-mvc-继续学习

生命周期:
springmvc提供了,request,session两个生命周期

@Scope("session")

表示每一个session创建一个对象。

@Scope(“request”)

表示每一个请求创建一个对象

spring默认对象是单例的,单例对象含有成员属性时会相互影响。

由于部分后面新增的功能只支持注解,所以使用这部分功能时需要使用<mvc:annotation-driven>启动注解,不然会失效。

文件上传:

SpringMVC支持文件上传组件。commons-fileupload组件,commons-fileupload依赖commons-io组件。

配置步骤:

第一步:导入包 commons-fileuplad组件
第二步:配置springmvc支持上传组件
(1)启动SpringMVC注解支持
(2)配置上传解释器 (对象名必须是固定)

 

第三步:构建一个上传表单
第四步:在业务控制器编写保存上传文件的逻辑

 

注意,因为核心控制器对上传解释器的名字是固定的.是multipartResolver,所以我们配置上传解释器,名字必须是multipartResolver

文件下载:

所谓的文件下载就是将文件写入到HttpServletResponse里面

拦截器:

拦截器与过滤的区别?(回顾)

  1. 过滤器拦截的是请求路径
  2. 拦截器拦截的是表示层方法的映射路径
  3. 既然拦截器与Servlet的过滤器功能基本一样,为什么需要使用拦截器呢
    如果使用过滤器SpringMVC的一些功能组件就无法使用。而拦截器是SpringMVC的功能,可以使用SpringMVC里面的一些组件!!

拦截器配置

静态资源设置:

SpringMVC的DispatcherServlet是不可以/*拦截请求的,否则会将JSP都拦截了,但有时候我们的请求路径不能有后缀(如:Restful风格的接口需要)。如何实现

/表示拦截所有的静态资源(html,css....)以及请求,除了动态页面(jsp)的其他所有东西

/*表示拦截所有的东西,包含动态页面和静态资源.

SpringMVC支持<url-pattern>/</url-pattern>的这种配置.但是如果这个路径是/,意味着,所有的静态资源都不能访问。

 

为什么不能访问,因为SpringMVC拦截了又不处理,所以导致无法访问!!!

配置放开静态资源即可

<mvc:default-servlet-handler/>:开放所有的静态资源访问

JSON支持:

所谓的对JSON的支持,就是SpringMVC支持自动将JSON对象转换成JAVA对象,也支持将Java对象自动转成JSON.

SpringMVC本身没有对JSON数据处理的类库.要支持JSON的自动转换必须导入JSON的支持包

请求发送一个JSON的对象给执行方法,执行方法根据@RequestBody这个注解强制将请求发送过来的JSON转换成Java对象

 

注意事项:表单请求默认是不支持PUT,DELETE 请求的。
所谓的表单请求就是enctype是enctype="application/x-www-form-urlencoded"
的请求.除了表单请求,其他的请求格式都是支持PUT,DELETE。

Spring Web有提供将POST转PUT和DELETE的解放方案来解决表单请求不支持PUT和DELETE的类型解决方法。
通过过滤器:org.springframework.web.filter.HiddenHttpMethodFilter支持。

作用:

目的是为了,远程接口可以访问这些方法,也可以让本地的表单请求也可以访问这些方法。

如果配置了PUT与DELETE就让本地的表单不可以访问,本来这种设计就是有缺陷!!

原文地址:https://www.cnblogs.com/cdeelen/p/10828213.html