本篇文章对springMVC进行简单介绍
spring介绍
spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目的是简化企业开发.
所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。
面向切面,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
创建工程
创建工程,引入jar包
创建各目录,并创建配置文件
SqlConfigMap.xml
applicationContext.xml
在applicationContext.xml中配置数据源
在applicationContext.xml中配置sqlSessionFactory
SqlConfigMap.xml配置
1 | typeAliases为别名配置,可省略domain的包名 |
applicationContext.xml配置
1 | <?xml version="1.0" encoding="UTF-8"?> |
整合后mybatis的使用
1 | 原始dao方式 |
Spring MVC介绍
spring MVC是spring框架的一个模块,spring MVC和spring之间无需通过中间整合层进行整合(spring与mybatis需要mybatis-spring-1.2.2.jar)
spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所没有的优势。而且框架本身有代码,看起来容易理解。
工作原理
用户request请求前端控制器DispatcherServlet
前端控制器通过处理器映射器HandlerMapping查找使哪一个处理器适配器HandlerAdapter(返回一个执行链)
前端控制器通过执行链请求处理器适配器HandlerAdapter
处理器适配器HandlerAdapter执行Handler处理器得到一个ModelAndView
将ModelAndView返回给前端控制器
前端控制器将ModelAndView发给视图解析器View resolver
view resolver解析后会返回一个纯view
将view返回给用户
springmvc配置文件
1 | <?xml version="1.0" encoding="UTF-8"?> |
配置前端控制器
该配置信息在web.xml下配置
1 | <servlet> |
配置处理器适配器
1 | <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> |
配置处理器映射器
1 | <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> |
配置视图解析器
1 | <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> |
配置处理器
1 | 编写处理器,必须实现Controller接口 |
非注解的处理器映射器
1 | 第一种org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping |
非注解的处理器适配器
1 | 第一种org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter要求编写的Handler实现 Controller接口。 |
注解方式
1 | 在spring3.1之前使用 |
注解方式handler(处理器)的开发
1 | @Controller//使用Controller标识 它是一个控制器 |
在spring中加载handler(处理器)
1 | 第一种方式 |
web工程加载spring配置文件
1 | 在web.xml文件加入如下代码,启动工程自动加载spring配置文件 |
窄化请求路径
1 | @RequestMapping()不仅可以放在方法上使用,用来确定路径,也可以用作Controller类上,那么访问时需要在方法基础之上再加一层目录,这样的访问方式叫窄化请求路径。 |
视图解析器配置前缀、后缀
1 | 为了简化jsp跳转url,视图解析器提供了两个参数,可以配置jsp访问url的前缀和后缀。 |
Controller里面方法的返回值
1 | 返回ModelAndView,需要在方法结束时,定义ModelAndView,将model和view分别进行设置。 |
参数绑定
默认支持的类型
HttpServletRequest
HttpServletResponse
HttpSession
简单类型(基本数据类型)通过@RequestParam对简单类型进行绑定。如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,才能绑定成功。如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。
domain类绑定参数需要页面中input的name和controller的pojo形参中的属性名称一致,才能将页面中数据绑定到domain对应的属性。(与简单类型互不影响)
字符集过滤器
1 | Spring的字符集过滤通常用于处理项目中的post乱码问题,该过滤器位于org.springframework.web.filter包中,指向类CharacterEncodingFilter。 |
文件上传
1 | 复制所需jar包到工程lib目录下commons-io-2.3.jar |