springmvc基础知识
什么是springmvc?
springmvc框架原理
处理器映射器、处理器适配器、视图解析器
springmvc入门程序
目的:对前端控制器、处理器映射器、处理器适配器、视图解析器
非注解的处理器映射器、处理器适配器
注解的处理器映射器、处理器适配器
什么是springmvc?
Springmvc是spring框架的一个模块,是一个基于mvc的web框架
什么是mvc?
mvc是一个设计模式
用户请求 (request请求)-> C(控制器)Controller
response响应<- 请求模型进行处理
处理结果返回
渲染视图(将模型数据填充至request域) M(模型)pojo、action、service、dao
V(视图)jsp、freemarker、work、pdf
什么是springmvc?
用户请求 (request请求) -> 前端控制器(DispatcherServlet) (请求查找handler)-> 处理器映射器(HandlerMapping)
<-(返回一个执行链
HandlerExcecutionChain{
HandlerInterceptor
Handler
}
)
请求处理器适配器执行Handler
返回ModelAndView
请求进行视图解析
返回view
视图渲染
视图 视图解析器 Handler 处理器
(jsp、freemarker...) (事实是一个Controller)
执行Hanler
返回ModelAndView
处理器适配器(HandlerAdapter)执行Handler
步骤:
1.发出请求到前端控制器DispatcherServlet
2.前端控制器请求HandlerMapping查找Handler(可以根据xml配置、注解进行查找)
3.处理器映射器HandlerMapping向前端控制器返回Handler
4.前端控制器调用处理器适配器执行Handler
5.处理器适配器执行Handler
6.处理器给处理器适配器返回ModelAndView
7.处理器适配器向前端控制器返回ModelAndView
8.前端控制器请求视图解析器解析(根据逻辑视图名解析成真正的视图)
9.视图解析器向前端控制器返回view
10.前端控制器渲染view(渲染视图(将模型数据填充至request域))
11.前端控制器向用户响应
springmvc入门
1.配置环境
jdk1.8 eclipse
2.springmvc版本4.2
3.非注解的处理器映射器和处理器适配器
3.1.处理器设配器
3.1版本之前用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
3.1版本之后用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
3.2.处理器映射器
3.1版本之前用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
3.1版本之后用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
4.注解的处理器映射器和处理器适配器
4.1.<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<!--使用mvc:annotation-driven代替上邊註解映射器和註解適配器配置
mvc:annotation-driven默認加載很多的參數綁定方法,比如json轉換解析器就默認加載了,
如果使用mvc:annotation-driven不用配置上邊的RequestMappingHandlerAdapter和RequestMappingHandlerMapping
實際開發時使用mvc:annotation-driven
-->
<mvc:annotation-driven></mvc:annotation-driven>
4.2.在spring容器中加载handler
<!-- 可以掃描controller、service,指定controller的包名 -->
<context:component-scan base-package="com.app.chx.controller"></context:component-scan>
4.3.在handler中使用注解
@Controller
public class GoodsController {
@RequestMapping(value = "queryGoods")
public ModelAndView queryGoods() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("value", "數據");
modelAndView.setViewName("/WEB-INF/jsp/items/items_controller.jsp");
return modelAndView;
}
}
5.源码跟踪
通过前端控制器源码分析springmvc的执行过程
1.前端控制器接收请求
执行doDispatch
2.前端控制器请求HandlerMapping查找Handler
getHandler();获取HandlerExecutionChain
3.调用处理器适配器执行handler,得到ModelAndView
ha.handler(processedRequest, response, mappedHandler.getHandler());
4.视图渲染,将model数据填充到request域
视图解析,得到view
view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);
调用view的渲染方法,将model数据填充到request域
渲染方法:
view.render(mv.getModelInternal(), request, response);
执行了exposeModelAsRequestAttributes方法遍历model的map集合将key-value填充至request中
入门程序
1.配置view前缀和后缀
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
2.搭建工程
com.itcast.ssm.controller 表现层
com.itcast.ssm.mapper dao层(mybatis)
com.itcast.ssm.po
com.itcast.ssm.service.impl 接口和实现
springmvc和mybatis整合
springmvc和mybatis的系统架构
表现层(handler)
springmvc
业务层(service接口) spring将各层进行整合,通过spring管理持久层的mapper(相当于dao接口)
spring 通过spring管理业务层service,service中可以调用mapper接口,通过spring管理表现层handler,
handler可以调用service接口,mapper、service、handler都是javabean
持久层(mapper)
mybatis
数据库
mysql
3.整合dao
spring和mybatis整合,通过spring管理mapper接口
使用mapper的扫描器自动扫描mapper接口
3.1.在config文件夹创建包名为:mybatis->sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<!-- 全局setting配置,根据需要添加(二级缓存) -->
<!-- 配置别名 -->
<typeAliases>
<!-- 批量扫描别名 -->
<package name="com.itcast.ssm.po" />
</typeAliases>
<!-- 配置mapper
由于使用spring和mybatis的整合包进行mapper扫描,这里不需要配置了.
必须遵循:mapper.xml和mapper.java文件同名且在同一个目录
-->
<!-- <mappers>
</mappers> -->
</configuration>
3.2.在config文件夹创建包名为:spring->springApplication-dao.xml
配置springApplication-dao.xml文件的步骤:
3.2.1.加载db.properties文件中的内容
3.2.2.配置数据源
3.2.3.配置session工厂
3.2.4.自动扫描所有的Mapper接口与文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 加载db.properties文件中的内容,db.properties文件中key命名要有一定的特殊规则 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 配置数据库,dbcp -->
<!-- 配置数据源 -->
<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass}" />
<property name="url" value="${jdbc.jdbcUrl}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="30" />
<property name="maxIdle" value="5" />
</bean>
<!-- 配置session工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"></property>
<!-- 加载mybatis.cfg.xml文件 -->
<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"></property>
<!-- 自动扫描需要定义类别名的包,将包内的JAVA类的类名作为类别名 -->
<!-- <property name="typeAliasesPackage" value="com.app.entity"></property> -->
</bean>
<!-- 自动扫描所有的Mapper接口与文件 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号,隔开 -->
<property name="basePackage" value="com.itcast.ssm.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
</beans>
4.整合service