首先,tomcat启动,加载工程 web.xml配置
web.xml执行顺序
- listener(监听器
- filter(过滤器)
- servelt(第一次触发请求时,创建servlet对象servelt(第一次触发请求时,创建servlet对象
servlet详解(https://blog.csdn.net/yanmiao0715/article/details/79949911)
嘻嘻QAQ
第一步 .加载spring (listener) org.springframework.web.context.ContextLoaderListener 加载spring配置文件 application Context*. xml(applicationContext.xml | applicationContext-mybatis.xml)
`<context:component-scan base-package="com.etoak" />
扫描ssm工程 com.etoak包结构下所有的类
实例化:@Controller @Service @Repository @Component
注入 : 类中包含属性或方法 加入 @Autowired @Resource 注入信息
1.controller层 service层 dao层
applicationContext-mybatis.xml
<!-- 引入资源文件properties -->
<context:property-placeholder
location="classpath:jdbc.properties"
file-encoding="UTF-8"/>
#spring实例化DriverManagerDataSource
org.springframework.jdbc.datasource.DriverManagerDataSource
#注入信息
#setDriverClassName 驱动
#setUrl 连接
#setUesrname 用户
#setPassword 密码
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
最为重要
#spring实例化**SqlSessionFactoryBean**
org.mybatis.spring.SqlSessionFactoryBean
#注入信息
#setDataSource 注入数据源
#setMapperLocations 加载mybatis sql.xml配置文件 并解析sql语句
#setTypeAliasePackage 起别名==========》 例如 User user
#spring实例化
org.mybatis.spring.mapper.MapperScannerConfigurer
#注入信息
#setSqlSessionFactoryBeanName 注入SqlSessionFactoryBean对象
#setBasePackage 扫描接口,并创建对象,然后放进容器。
#setAnnotationClass 扫描接口时,该接口必须引入@Respository,才会实例化
#spring实例化
org.springframework.jdbc.datasource.DataSourceTransactionManager
#注入信息
#setDataSource 注入数据源 加入事务 但是还没有开始使用事务
#使用声明式事务 注解
<tx:annotation-driven />
spring加载 applicationContext*.xml 加载完毕
实例化 注入`
第二步,
处理post乱码(filter)
org.springframework.web.filter.CharacterEncodingFilter
设置请求和响应乱码 encoding=UTF-8 forceEncoding=true
兼容所有请求 /*
第三步,
springmvc(servlet)
******* 第一次触发请求时才用创建springmvc对象DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
加载springmvc.xml配置文件
<context:component-scan base-package="com.etoak" />
扫描ssm工程 com.etoak包结构下所有的类
实例化:@Controller @Service @Repository @Component
注入 : 类中包含属性或方法 加入 @Autowired @Resource 注入信息
1.controller层 service层 dao层
注意事项:@Controller
spring 实例化
springmvc 实例化 服务端 @RequestMapping
由于springmvc也扫描一遍包结构,这时有加入有关系的注解
也会实例化 和 注入,这时springmvc把spring实例化对象覆盖
tx
spring @Controller @Service(有tx) tx:aop 事务spring加载
springmvc @Controller @Service(无tx)
spring 除了Controller注解 不扫描
springmvc 只扫描controller注解
springmvc必须有controller注解 需要作为服务端
父子容器
子容器会集成父容器ioc信息 但是不会集成aop信息
实例化 映射器 适配器 类型转换器等
<mvc:anntation-driven />
实例化视图解析器
org.springframework.web.servlet.view.InternalResourceViewResolver
#注入信息
#setPerfix 前缀
#setSuffix 后缀
使用上传 兼容上传类型MultipartFile
实例化上传解析器对象
org.springframework.web.multipart.commons.CommonsMultipartResolver
注意事项:id="multipartResolver"
spingmvc 使用/请求 不兼容静态资源
<mvc:resources location="/js/"
mapping="/js/**" />
web.xml加载完毕
测试
打开浏览器
http://localhost:8080/SSM/pages/add.jsp
新增信息 用户名、密码
点击新增按钮 触发 add函数 function add(){}
访问后台Controller层 /user/add 请求地址
controller层调用service层
UserSerice注入到Controller中
service.add方法
service层调用dao层
mapper.add方法
mapper层信息返回service层信息返回controller层
controller层处理完业务逻辑 返回给ajax 触发success函数
系不系现在很清楚啦。