SSM巨详细的流程

首先,tomcat启动,加载工程 web.xml配置

web.xml执行顺序

  1. listener(监听器
  2. filter(过滤器)
  3. 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函数

系不系现在很清楚啦。

猜你喜欢

转载自blog.csdn.net/qq_43011881/article/details/87934368