Springmvc第一天总结
1.Springmvc和struts2的区别
(1)核心前端控制器,一个是filter,一个是servlet
(2)接收参数,struts2使用模型驱动,接收到的是全局变量,线程不安全,action需要配置成多例的。Springmvc接收到的是局部变量。
2.在web.xml中配置servlet,使用init-param来指定springmvc核心配置文件位置.servlet为DispacherServlet.
(1)Springmvc核心过滤器拦截路径的配置/代表拦截所有请求但不包括.jsp,/*代表拦截所有请求,包括.jsp
(2)Springmvc提供了请求乱码的过滤器,可以直接配置在web.xml中。
3.使用requestMapping注解进行路径和实现方法的映射(映射的路径要能被springmvc核心servlet拦截住.)
(1)在类上注解,窄化请求路径.作用类似与namespace
(2)在方法上注解,与类上的路径一起拼接成请求路径
(3)在方法上此注解的method属性,可以限制请求方法类型.
(4)其他注解:
①Requestparam(“”)此注解的主要作用是页面的参数名和此注解中的参数名对应即可,这时与接收的参数名称无关.没有此注解时,要求页面的参数名等于方法中的参数名.
4.Springmvc的参数绑定
(1)Springmvc有默认支持的参数类型,如request,response,session,model.获取参数时可以使用这些对象。这些对象可以在方法的参数中加入任意个。其中model是springmvc中返回到页面的数据的封装对象,其底层使用的是request域。但是对request域进行了扩展,例如在请求重定向时,使用这个对象,可以在重定向中传递参数。
(2)Springmvc支持基本类型和pojo类型的参数
①根据请求中参数的名称,自动对应到方法中的参数名称,而且可以自动的进行类型转换。
②在接收pijo对象时,传参的时候写属性名。类似于struts中的ognl表达式。
(3)Springmvc支持接收vo对象(实际上和pojo是一样的)
(4)Springmvc支持接收参数类型转换的自定义,例如正常情况下,传递日期格式(传递参数字符串,接收的参数是日期类型)的数据会报错,经过自定义转换器转换之后可以传递。
①自定义转换器需要实现converter接口(spring核心包中),然后实现其中的方法。
②在springmvc的配置文件中配置自定义转换器,FormattingConversionServiceFactoryBean。将自定义的转换器配置到它的属性中.
③将配置的自定义转换器的id配置在注解驱动中。(注解驱动的功能是简化配置处理器映射器和处理器适配器。转换器的工作是由处理器适配器所指定的)
(5)Springmvc支持数组参数的接收,例如复选框,使用String[] id(也可以是Integer [],自动类型转换)进行接收.也可以是vo中的数组属性.
(6)Springmvc支持集合类型参数的接收,只有list比较常用.接收时,接收参数正常以集合的形式出现.主要是页面上要写清楚存入集合的哪个对象,例如list[0].id
5.Springmvc中controller方法的返回值.主要有三种形式
(1)使用void,此时与springmvc的框架已经脱离,使用web中的对象进行数据的返回.例如request.setAttr(),跳转页面使用请求转发或请求重定向.
(2)使用modelandview对象进行返回,这是springmvc中的返回对象.使用这个对象的model可以进行数据的传输,model中存放返回到页面的数据.使用addObject进行对象的存放.使用view视图指定返回页面的位置.使用setviewname进行指定.此方法中的路径会自动拼接springmvc中配置的视图解析器的前后缀.
(3)返回String,此时分为三种情况
①返回简单的String,此时认为返回的是页面的位置,会自动拼接视图解析器的前后缀.此时返回数据可以使用model对象(springmvc参数支持的默认类型).
②返回以forward:开头的字符串,这时使用的是请求转发(使用model传递数据)
③返回以redirect:开头的字符串,这时使用的是请求重定向(使用model传递数据)
6.Springmvc架构原理,springmvc通过处理器映射器进行路径请求与方法的匹配.通过处理器适配器调用controller中的方法进行业务处理.最后进行页面渲染,然后将数据返回给客户端.
7.Springmvc的三大组件
(1)处理器映射器,指定url到请求方法的映射
(2)处理器适配器,根据不同的handler(处理器,controller中的方法)找到不同的处理器适配器去调用handler执行.一个很形象的例子–java虚拟机.当使用不同的操作系统时,需要不同的方式方法去处理操作.当有了java虚拟机就不用考虑操作系统不同了.处理器适配器就是能对接各种处理器的全能适配.
(3)视图解析器,根据不同的视图解析渲染.视图可以是jsp,pdf等.
8.三大组件的配置及配置的作用
(1)在不配置处理器映射器和处理器适配器时,程序一样可以执行,但是效率会低很多.每个请求都要去默认的配置文件中查找对应的处理器映射器和处理器适配器使用.所以应该显示的配置处理器映射器和处理器适配器.常规配置比较麻烦,可以使用注解驱动的方式进行配置annotion-driven.注解驱动的配置可以帮我们查找到最新的处理器映射器和处理器适配器使用.(注意注解驱动和注解扫描的区别.完全不是一回事).
(2)配置视图解析器InternalResourceViewResolver(也可以不配置,一般都配置).作用可以配置前缀和后缀,这样方便设置controller中方法返回的页面位置.
9.SSM整合
(1)Dao层
①Mybatis配置文件sqlMapconfig.xml
②Spring配置文件Application-dao.xml,在这里需要配置数据源,会话工厂,扫描mapper
(2)Service层
①Application-trans.xml,配置事务相关的东西
②Application-service.xml,配置注解扫描
(3)Controller层
①Springmvc.xml,配置注解驱动,注解扫描,视图解析器.
(4)Web.xml
①Springmvc核心过滤器
②Spring监听器
10.Springmvc全局异常处理
(1)实现HandlerExceptionResolver接口
(2)在springmvc配置文件中配置
11.Springmvc文件上传
(1)导入文件上传jar,springmvc需要依赖这写jar.fileupload
(2)表单enctype等
(3)在springmvc配置文件中配置文件上传相关类
(4)使用MultipartFile类型接收上传的文件(处理器适配器的用处),常用方法如下
①Getoriginalfilename 获取文件名称
②Transferto存储到硬盘中
12.Json数据交互
(1)导入json依赖使用的jar包
(2)如果配置了注解驱动,就不需要在springmvc中额外配置.(如果没有配置注解驱动,需要显示的配置处理器适配器,并在处理器适配器中配置)
(3)在参数上使用requestBody注解将json中的属性映射到pojo对象中.json是传过来的数据,pojo是接收参数.(扩展:fastjson中有修改pojo属性对应名称的注解)
(4)在方法上使用requestbody注解,可以将返回的pojo对象变为json,此时返回 return pojo,实际上返回的就是json格式的数据.
13.Springmvc对restful的支持
(1)Restful是一种风格,要求URI中不能出现动词,只有名词,且不能问号传参.
(2)在requestmapping注解上映射的路径修改为/path/{id},在接收的参数上使用pathvarable(“id”)注解来接收请求路径中的参数.注意两个注解中的”id”名称要相同,和方法中的参数名称无关.这样就使用了方法中的参数接收路径中的参数了.
(3)在请求重定向是不要使用model对象传参了,这样传参实际上是问号传参,会破坏restful风格.
14.Springmvc拦截器
(1)实现HandlerInterceptor接口
(2)实现其中的三个方法
①PreHandle,执行时机:controller方法没有执行,modelandview没有被返回,此方法返回true代表放行,返回false代表拦截.使用场景:权限验证
②Posthandle,执行时机:controller方法已经执行,return没有被返回.使用场景:在此方法中设置全局数据处理业务.
③Afterconpletion,执行时机:controller方法已经执行,return已经返回.使用场景:记录操作日志,ip,时间等.
(3)在springmvc的配置文件中配置拦截器(注意配置拦截所有路径要配置成/**),拦截器的执行顺序就是配置顺序,pre方法是由前到后执行,剩下2个方法是由后向前执行的.就像方法链返回那样.