spring开发环境搭建环境搭建

标题架构演变历史

spring开发环境搭建环境搭建_第1张图片

标题Maven构建的Spring项目需要哪些依赖?

Spring相关的依赖我参考的是这篇文章:

https://www.cnblogs.com/javafucker/p/7566733.html
1)spring核心依赖
spring-core、spring-beans、spring-context
2)spring dao依赖(提供JDBCTemplate)
spring-jdbc、spring-tx
3)spring web依赖
spring-web、spring-webmvc
4)spring test依赖
spring-test

标题完整的pom.xml文件如下




   4.0.0

   com.tusuzer
   springmvc_demo
   1.0-SNAPSHOT
   war

   springmvc_demo Maven Webapp
   
   http://www.example.com

   
      UTF-8
      1.8
      1.8
      4.3.7.RELEASE
   

   
      
         junit
         junit
         4.11
         test
      
      
      
         org.slf4j
         slf4j-api
         1.7.21
      
      
         ch.qos.logback
         logback-classic
         1.1.7
      
      
         ch.qos.logback
         logback-core
         1.1.7
      
      
      
         org.mybatis
         mybatis
         3.3.0
      
      
         org.mybatis
         mybatis-spring
         1.3.1
      
      
         joda-time
         joda-time
         2.3
      
      
         c3p0
         c3p0
         0.9.1.2
      
      
         mysql
         mysql-connector-java
         5.1.25
      
      
      
         javax.servlet
         javax.servlet-api
         3.1.0
      
      
         taglibs
         standard
         1.1.2
      
      
         jstl
         jstl
         1.2
      
      
         com.fasterxml.jackson.core
         jackson-core
         2.8.7
      
      
         com.fasterxml.jackson.core
         jackson-databind
         2.8.7
      
      
         commons-fileupload
         commons-fileupload
         1.3.1
      
      
         commons-io
         commons-io
         2.4
      

      
      
      
         org.springframework
         spring-core
         ${spring.version}
      
      
         org.springframework
         spring-context
         ${spring.version}
      
      
         org.springframework
         spring-beans
         ${spring.version}
      
      
      
         org.springframework
         spring-tx
         ${spring.version}
      
      
         org.springframework
         spring-jdbc
         ${spring.version}
      
      
      
         org.springframework
         spring-web
         ${spring.version}
      
      
         org.springframework
         spring-webmvc
         ${spring.version}
      
      
      
         org.springframework
         spring-test
         ${spring.version}
      
   

   
      springmvc_demo
      
         
            
               maven-clean-plugin
               3.1.0
            
            
            
               maven-resources-plugin
               3.0.2
            
            
               maven-compiler-plugin
               3.8.0
            
            
               maven-surefire-plugin
               2.22.1
            
            
               maven-war-plugin
               3.2.2
            
            
               maven-install-plugin
               2.5.2
            
            
               maven-deploy-plugin
               2.8.2
            
         
      
   


web.xml解析

容器在解析web.xml时,首先会去读取`,提供应用程序上下文信息;

contextConfigLocation classpath:spring/root-context.xml

然后会加载节点,该节点会用到上下文的信息;

org.springframework.web.context.ContextLoaderListener

然后会加载拦截器节点,如果有多个拦截器,则是按照拦截器配置的顺序来进行调用的;

1、字符过滤器
web.xml中写法如下


   CharacterEncodingFilter
   org.springframework.web.filter.CharacterEncodingFilter
   
      encoding
      UTF-8
   


   CharacterEncodingFilter
   /*

2、文件上传的过滤器
web.xml中写法如下


   MultipartFilter
   org.springframework.web.multipart.support.MultipartFilter
   
      multipartResolverBeanName
      multipartResolver
   


   MultipartFilter
   /*

3、扩展form所支持的http方法的过滤器
web.xml中写法如下


   hiddenHttpMethodFilter
   org.springframework.web.filter.HiddenHttpMethodFilter


   hiddenHttpMethodFilter
   /*

浏览器form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求,该过滤器为HiddenHttpMethodFilter。
需要注意的是,由于doFilterInternal方法只对method为post的表单进行过滤,所以在页面中必须如下设置:

......

而不是使用:

    
......

HiddenHttpMethodFilter的实现原理其实就是新建了个HttpMethodRequestWrapper类,覆写了getMethod()方法,也就是将原来本身的HTTP请求方式(POST)给隐藏掉了。

然后才会加载对应的节点;

DispatcherServlet是前端控制器设计模式的实现,提供SpringWebMVC的集中访问点,而且负责职责的分派,而且与
spring IOC容器无缝集成,从而可以获得Spring的优势。
关于DispatcherServlet的执行原理可以看这篇文章。
https://blog.csdn.net/jinnianshilongnian/article/details/84254470
其主要职责是调度工作,本身用于控制流程,具体为:

1.文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2.通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
3.通过handlerAdapter支持多种类型的处理器(handlerExceptionChain中的处理器);
4.通过ViewResolver解析逻辑视图名到具体视图实现;
5.本地化解析;
6.渲染具体的视图等;
7.如果执行过程中遇到异常将交给handlerExceptionResolver来解析;

	
       spring
       org.springframework.web.servlet.DispatcherServlet
       
          contextConfigLocation
          classpath:spring/applicationContext.xml
       
       1
    
    
       spring
       /
    

也就是说,web.xml中的加载顺序是:context-param -> listener -> filter > servlet;而同类型之间的加载顺序则是根据配置的顺序来进行加载的。所以我们配置的时候,需要注意下同类型标签的配置顺序;

完整的web.xml文件如下

web.xml的作用解析我参考的是这篇文章:
https://www.jianshu.com/p/c52776217bab



   大众点评
   
      index.jsp
   
   
   
      contextConfigLocation
      classpath:spring/root-context.xml
   
   
   
      org.springframework.web.context.ContextLoaderListener
   
   
   
      CharacterEncodingFilter
      org.springframework.web.filter.CharacterEncodingFilter
      
         encoding
         UTF-8
      
   
   
      CharacterEncodingFilter
      /*
   
   
   
      MultipartFilter
      org.springframework.web.multipart.support.MultipartFilter
      
         multipartResolverBeanName
         multipartResolver
      
   
   
      MultipartFilter
      /*
   
   
   
      hiddenHttpMethodFilter
      org.springframework.web.filter.HiddenHttpMethodFilter
   
   
      hiddenHttpMethodFilter
      /*
   

   
      spring
      org.springframework.web.servlet.DispatcherServlet
      
         contextConfigLocation
         classpath:spring/applicationContext.xml
      
      1
   
   
      spring
      /
   
   
   
      
         *.jsp
         /WEB-INF/jsp/system/common.jsp
      
   

一系列applicationContext配置文件

spring开发环境搭建环境搭建_第2张图片
因为spring的配置太多,我们这里分成好几个配置文件来进行配置,他们之间的关系是这样的。

  • applicationContext.xml
    • applicationContext-dao.xml
    • applicationContext-service.xml
    • applicationContext-web.xml

这里的配置文件被加载的流程是这样的。
1、applicationContext被web.xml中的下面代码加载
需要注意的是如果我们不像我这样显示的contextConfigLocation的值为classpath:spring/applicationContext.xml的话,系统是去查找默认值的


		spring
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath:spring/applicationContext.xml
		
		1
	

2、applicationContext中代码如下



	
	
	
	

再次强调下加载所有的xml配置文件,大家可以发现我们为了统一xml配置文件都是applicationContext-xxx.xml这样的命名格式,就是为了能在这里用通配符一次匹配到所有的配置文件。

properties文件夹下面的配置文件和spring文件夹下的配置文件有什么差别

以properties下面的dao.properties文件为例:

dataSource.url=jdbc:mysql://127.0.0.1:3306/comment?useUnicode=true&characterEncoding=utf8
dataSource.username=root
dataSource.password=123456

很明显,dao.properties里面配置的是一些变量的值,applicationContext加载这些properties为后缀的配置文件是为了在applicationContext-dao.xml这些xml文件使用,比如applicationContext-dao.xml中有设置数据库相关信息的代码如下:




我们可以利用${dataSource.url}这样的语法引用被加载的dao.properties中的变量的值。
关于读取properties中的值我参考的这篇文章:
https://blog.csdn.net/HaHa_Sir/article/details/79105951

配置的源代码

spring开发环境搭建环境搭建_第3张图片

spring下的几个配置文件的源代码

applicationContext.xml



	
	
	
	

applicationContext-dao.xml



	
	
	
	
		
		
		
		
        
        
         
		
        
        
		
		
		
        
        
  		
		
		
        
  		
        
		
        
        
        
  		
    
    
    
    
    	
    	
    	
    	
    	
    	
    	
    	
    
    
    
    
    	
    	
    

applicationContext-service.xml



	
	
	
	  
		
	
	
	

applicationContext-task.xml



	
	
	
	
	
	
		
		
	

applicationContext-web.xml



	
	
	
	 
	
	
		
			
			
			
			
			
			
			
		
		
		
		
			
			
			
			
			
			
			
			
			
			
		
		
	
	
	
		
		
		
	
	
	
	

mybatis.xml




	
		
		
	
	
	
		
	

root-context.xml





	
	 
          
         
         
    

properties文件夹下的配置文件的源代码

dao.properties

dataSource.url=jdbc:mysql://127.0.0.1:3306/comment?useUnicode=true&characterEncoding=utf8
dataSource.username=root
dataSource.password=123456

logback.properties

log.base=/Users/tuszer/logs/
log.level=DEBUG
log.appender.ref=stdout

system.properties

# 广告图片保存路径
adImage.savePath=G:/apache-tomcat-7.0.62/webapps/upload/ad/
# 广告图片访问URL
adImage.url=http://127.0.0.1:8081/upload/ad/
# 首页广告列表接口每页条数
ad.number=6
# 商户图片保存路径
businessImage.savePath=G:/apache-tomcat-7.0.62/webapps/upload/business/
# 商户图片访问URL
businessImage.url=http://127.0.0.1:8081/upload/business/
# 首页商户推荐列表每页条数
businessHome.number=5
# 商户搜索列表每页条数
businessSearch.number=7

resource下的logback.xml和system.properties的源代码




	
	
	
		
			%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method\(\):%L -%msg%n
		
	
	
	
        UTF-8
        ${log.base}comment.log
        
            ${log.base}comment.%d{yyyy-MM-dd}.log.zip
        
        
            %date|%msg%n
        
    

    
        
        
    

system.properties源代码

# 广告图片保存路径
adImage.savePath=D:\\apache-tomcat-7.0.62\\webapps\\upload\\ad\\
# 广告图片访问URL
adImage.url=http://127.0.0.1:8081/upload/ad/
# 首页广告列表接口每页条数
ad.number=6
# 商户图片保存路径
businessImage.savePath=D:\\apache-tomcat-7.0.62\\webapps\\upload\\business\\
# 商户图片访问URL
businessImage.url=http://127.0.0.1:8081/upload/business/
# 首页商户推荐列表每页条数
businessHome.number=5
# 商户搜索列表每页条数
businessSearch.number

你可能感兴趣的:(JAVA,Spring)