springMVC知识点学习笔记

一、 springMVC开发框架原理图
springMVC知识点学习笔记_第1张图片
springMVC知识点学习笔记_第2张图片
其中的组件:
1,前端控制器DispatcherServlet(不需要程序员开发)
作用是接收请求,响应结果,相当于转发器
2,处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的url查找handler
3,处理器适配器HandleAdapter
作用:按照特定规则去执行Handler
注意:编写Handler时要按照HandlerAdapter的要求去做 ,这样适配器才可以去正确执行Handler
4,视图解析器View resolver(不需要程序员开发)
作用:进行视图解析,根据逻辑视图名解析真正的视图(view)
5、视图View(需要程序员开发jsp)
View是一个接口,实现类型支持不同的view类型(jsp,freemarker,pdf,excel等)
6、处理器Handler(重点:需要程序员开发

二、springmvc开发的环境搭建和入门程序
springMVC知识点学习笔记_第3张图片
1,配置前端控制器(是一个servlet,在web.xml中配置映射)
springMVC知识点学习笔记_第4张图片
2、配置处理器映射器,处理器适配器,视图解析器,处理器Handler,都是在springmvc的配置文件springmvc.xml中配置。
2.1、处理器适配器
根据源码分析,框架是根据实现了HandlerAdapter接口都是认为是适配器,handler实现了controller接口
springMVC知识点学习笔记_第5张图片
controller接口 返回值为ModelAndView,根据此接口来编写handler
springMVC知识点学习笔记_第6张图片
2.2、handler(也叫controller)编写,需要实现controller接口
springMVC知识点学习笔记_第7张图片
上图中ModelAndView的addObject()方法(存储数据到域中,以便视图中jsp调用数据)和指定视图方法setViewName()

2.3、配置视图jsp(jstl表达式)省略
2.4、配置处理器映射器和处理器Handler一块配置
springMVC知识点学习笔记_第8张图片

2.5、视图解析器
springMVC知识点学习笔记_第9张图片
3、非注解开发处理器映射器,处理器适配器(了解)
4、使用注解开发处理器映射器,处理器适配器(重点掌握
在springmvc.xml中配置如下图:
springMVC知识点学习笔记_第10张图片
特别是使用注解驱动自动加载更多的配置(比如json转换解析器等),就不用配置上面的二个映射器和适配器.
4.1、注解开发Handler
springMVC知识点学习笔记_第11张图片
上图中使用注解@Controller和@RequestMapping
(1)这样就不需要继承controller接口
(2)不需要在springmvc.xml中为handler配置name属性的url
(3)可以自己定义方法名,而且可以定义多个方法,方便拓展
4.2、在Handler在spring容器中注册
springMVC知识点学习笔记_第12张图片
4.3、部署调试
http://localhost:8080/springMVC/queryItems.action
测试通过

5、视图解析器的前缀和后缀
springMVC知识点学习笔记_第13张图片
5.1、配置前后缀后controller可以简写为
这里写图片描述

三、springmvc和mybatis整合(重点)

springMVC+mybatis三层架构图
面试题:三层架构中spring的作用
springMVC知识点学习笔记_第14张图片

1、整合的思路(先持久层在业务层最后前端表现层)
springMVC知识点学习笔记_第15张图片
2、需求
springmvc+mybatis来实现商品列表查询的需求
3、搭建环境
springMVC知识点学习笔记_第16张图片
4、整合Dao
mybatis和spring进行整合。
4.1、 首先编写mybatis的全局配置文件sqlMapConfig.xml
springMVC知识点学习笔记_第17张图片
4.2、配置spring的配置文件applicationContext-dao.xml
配置信息如下:
(1)数据源(数据库连接池c3p0)
(2) sqlSessionFactory工厂,为创建sqlSession会话
(3)mapper映射文件,采用自动扫描(xml和java文件名一只且必须在同一目录中)
springMVC知识点学习笔记_第18张图片
4.3、编写mapper文件,逆向工程生成pojo类和mapper(单表增删改查)
4.4、手动定义商品查询mapper,ItemsMapperCustom.xml配置
springMVC知识点学习笔记_第19张图片
4.5、itemsMapperCustom.java编写
这里写图片描述
5、整合service
5.1、spring管理service接口
这里写图片描述
和dao层的接口定义一模一样
5.2、定义service接口的实现,去调用dao层数据
springMVC知识点学习笔记_第20张图片
5.3、在spring容器中配置service
创建applicationContext-service.xml文件配置service接口
这里写图片描述
创建applicationContext-transaction.xml,使用声明式方法事务控制
springMVC知识点学习笔记_第21张图片
6、配置表现层的springmvc
6.1、首先配置springmvc.xml配置文件
springMVC知识点学习笔记_第22张图片
6.2、配置前端控制器
springMVC知识点学习笔记_第23张图片
6.3、编写Handler(实际开发叫controller)
springMVC知识点学习笔记_第24张图片
6.4、编写jsp页面(使用jstl表达式)(省略)
6.5、把这些配置加入到spring的ioc容器中
加载mapper,service,controllor到spring容器中
建议使用通配符加载上边的配置文件
在web.xml中添加一个监听器,触发加载spring容器
![这里写图片描述] (https://img-blog.csdn.net/20160510153300659)
6.6、程序调试
在jsp页面上出了问题,就是不能识别el表达式的属性名,耽误了大半时间,后来才想到了没有放在form表单中,而且调试中还出现了缺失2个包aopalliance-1.0.jar和aspectjweaver.jar
7、商品信息修改功能开发
7.1 需求:
1、首先获取商品列表信息页面
2、点击修改,根据id修改商品信息页面,数据要显示在修改页面上
3、修改完成后,数据提交到数据库中,并重定向到商品列表信息页面
7.2 开发步骤和思路
7.2.1 开发mapper(不用开发了,使用逆向工程生成的代码)
(1)根据id查询商品信息
(2)根据id更新商品信息
7.2.2开发service(关键是业务逻辑开发)
也是根据id查询和更新商品信息
springMVC知识点学习笔记_第25张图片
7.2.3开发controller
(1)商品信息修改页面展示
(2)商品更新后提交页面
springMVC知识点学习笔记_第26张图片
上图中的代码不是终极代码,只是为了测试成功,把id值写死了,也没有进行参数绑定和返回值类型都是ModelAndView。
8、一些知识点的讲解
8.1 注解@ResourceMapping的作用
(1)url映射:定义controller方法对应的url,进行处理映射
(2)窄化请求映射
springMVC知识点学习笔记_第27张图片
定义在类的上面进行窄化请求映射,对url进行分类管理
(3)限制http请求方式
出于安全考虑,对http的链接进行方法限制
如果限制请求为post方法,进行get请求就会报错
这里写图片描述
9、controller返回值类型
9.1返回ModelAndView
上面的实例都是这样返回类型,定义ModelAndView,将model和view分别设置
9.2返回string类型
(1)返回视图逻辑名,真正的视图是前缀+视图逻辑名+后缀
springMVC知识点学习笔记_第28张图片
(2)redirect重定向
商品修改提交后,重定向到商品查询列表
redirect重定向的特点:和servlet的重定向和转发时一样的。
1、浏览器中的地址会发生改变
2、修改提交的request数据无法传递到重定向页面(重定向后进行新的request创建,所以request无法共享)
springMVC知识点学习笔记_第29张图片
(3)页面转发forword
页面转发的特点:
1、浏览器地址不改变
2、可以把修改后的request数据传递到转发的页面(request共享)
springMVC知识点学习笔记_第30张图片
9.3返回void类型
springMVC知识点学习笔记_第31张图片
10、参数绑定(重点)
10.1参数绑定的过程
springmvc接收用户请求的key/value数据,是通过参数绑定,把key/value的数据绑定到controller方法的形参的方式接收的。 而不是通过定义成员变量来接收
springMVC知识点学习笔记_第32张图片
10.2、默认支持的形参类型
直接在contorller方法形参上定义下边类型的对象,就可以使用这些对象,在参数绑定过程中,如果遇到下边类型直接进行绑定
(1)httpServletRequest
(2)httpServletResponse
(3)httpSession
(4)Model或者ModelMap
Model是一个接口,ModelMap是一个接口实现。
作用:将Model数据填充到request域中。
10.3、简单类型(8种基本类型都可以)
通过@RequestParam对简单类型的参数进行绑定
如果不使用此注解,要求request传入的参数名和controller方法的形参要一致才可以。
springMVC知识点学习笔记_第33张图片
10.4、绑定pojo 把pojo作为形参传递,特殊情况下,需要自定义参数绑定
1、自定义参数绑定实现日期类型的绑定
对于contorller形参中pojo对象,要转换的日期类型和pojo中日期属性的类型保持一致

2、需要向处理器适配器中注入自定义的参数绑定组件


        <mvc:annotation-driven conversion-service="conversionService"/>
        
        <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
          
          <property name="converters">
          <list>
          
             <bean class="com.jary.ssm.controller.converter.CustomDateConverter">bean>    
          list>
          property>
        bean>

在建立一个包com.jary.ssm.controller.converter下定义CustomDateConverter

/*
 * 日期类型转换器
 * 
 */
public class CustomDateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String  source) {
        //将日期串转换成日期类型(格式:yyyy-MM-dd HH:mm:ss)
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            //转成成功就返回
        return  simpleDateFormat.parse(source);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //如果参数绑定失败就返回空
        return null;
    }

11、springmvc和struts2的区别:
1,springmvc是基于方法开发的,struts2是基于类开发的
2、springmvc可以支持单例开发(通过形参的方式接收数据,每个方法的形参都有自己的独立的内存空间,多线程安全的),建议使用单例开发,方法结束,形参数据销毁。struts2只能多例开发(通过成员变量来接收数据的传递,成员变量是共享的,多线程不安全的)。
3、经过实际测试,struts2速度慢,在于它使用了struts标签,建议使用jstl

12、springmvc的高级部分

12.1springmvc参数绑定包装类型pojo参数绑定
需求:根据id批量删除商品信息,定义一个数组来接收多个id
springMVC知识点学习笔记_第34张图片
jsp中的name一定要和contorller中传入的数组参数名相同
springMVC知识点学习笔记_第35张图片
12.2、springmvc参数绑定list集合类型和map集合类型
需求:批量删除商品信息
springMVC知识点学习笔记_第36张图片
包装类pojo中定义如下:
springMVC知识点学习笔记_第37张图片
jsp中name的值是list集合下ItemsCustom继承类Items下的属性名
写法:如下图中name=”itemsList[${status.index}].name”
springMVC知识点学习笔记_第38张图片

13、springmvc与json交互(重点
springMVC知识点学习笔记_第39张图片
13.1、现在json越来用的越多,这里使用springmvc把用户提交的key/value数据,输出成json数据,此方法用的比较多;也有使用js把用户提交的json数据提交到springmvc,然后再返回json数据,比较麻烦(js来转换成json串)。
13.2、springmvc和json交互 环境的搭建
由于springmvc我使用的4.1.6版本,与之前的3版本所需要的json包不同了。
之前springmvc 3版本需要jackson-core-asl-1.9.11.jar和jackson-mapper-asl-1.9.11.jar这二个包
springmvc4版本需要三个不同的json包:
jackson.annotation..jar(代表不同的version)
jackson.core.*.jar
jackson-databind-2.6.4
13.3、配置json转换器,在处理器适配器中加入messageconverters
springMVC知识点学习笔记_第40张图片
但是我们使用了注解驱动扫描方式后,就不需要配置转换器了。
13.4 、json的交互测试
13.4.1、输入json串,输出json串
(1)jsp页面( 利用jquery的ajax提交json串,对输出的json结果进行解析),这里有一个chrome不能响应onclick事件,在方法前加上javascript:requestJson()后可以执行了。下图中的书写有误注意
springMVC知识点学习笔记_第41张图片
(2) controller(使用springmvc的controller输出json串)
springMVC知识点学习笔记_第42张图片
13.4.2、请求输入的是key/value数据,输出json串
(1) jsp页面书写基本相同
springMVC知识点学习笔记_第43张图片
(2)controller(还是输出json串)
springMVC知识点学习笔记_第44张图片
14、restful格式的url支持(重点)
restful是一个开发理念,其实是对http的诠释
14.1 对url进行规范,写restful格式url
非restful的url:http://……/queryItems.action?id=01&type=T01
RESTful的url风格:http://……/items/01
restful的特点:url简洁,将参数通过url传到服务端
对http的contentType规范
请求时指定contentType,要输出json数据,就设置json格式的type
14.2、需求
根据id查询商品的信息,返回json数据
14.3、controller方法定义
定义方法,进行url映射使用restful风格url,将查询商品信息的id传入controller,输出json使用@ResponseBody注解返回json数据
springMVC知识点学习笔记_第45张图片
14.4、还需要在前端控制器web.xml的配置文件中配置restful的映射(之前配置的是*.action,所有不支持restful,restful支持的映射是/,但是二者可以共存,在之前的基础上添加restful映射)
springMVC知识点学习笔记_第46张图片
14.5、对于静态文件的访问
上面restful风格url在前端控制器配置文件web.xml中配置后,访问静态文件就会找不到的404,配置前我试了试还是可以访问的。
springMVC知识点学习笔记_第47张图片
这样我们对静态文件的访问,springmvc为我们提供了解决方案
在springmvc的配置文件springmvc.xml中添加静态资源解析
这里写图片描述
15、拦截器
15.1定义拦截器,实现HandlerIntercepter接口
有三个方法:

你可能感兴趣的:(springMVC知识点学习笔记)