SpringMVC项目快速启动,Springroot与SpringMVC双容器配置及基本依赖导入

前言

Spring有两个容器,与Web有关的bean我们一般放在SpringMVC容器中
而与服务层和Mapper有关的bean我们放在SpringRoot容器中

关系

在这里插入图片描述

正如上图,他们存放的东西大致能分开,而SpringRoot是SpringMVC的父容器,其实很多情况下SpringRoot容器很多程序员都不用,其实也对,该容器的最大作用是Spring和其他框架搭配使用比如Struse啊这种,让Spring的IOC容器统一管理其他实体类的这么一种存在

代码

我贴一下带着日志,模板引擎乱七八糟一整套的双容器和web.xml的代码吧,方便以后大家和我搭载工程
👇SpringRoot.xml

<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

	<context:component-scan base-package="com.etoak">
		<!-- 不排除@Service、@Repository -->
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
		<context:include-filter type="annotation"
			expression="org.springframework.stereotype.Repository" />

		<!-- 排除@Controller、@RestController @ControllerAdvice -->
		<context:exclude-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
		<context:exclude-filter type="annotation"
	expression="org.springframework.web.bind.annotation.RestController" />	
	     <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
	</context:component-scan>

	<!-- 导入db.preperties -->
	<context:property-placeholder location="classpath:db.properties" />

	<!-- 数据源 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${db.driver}" />
		<property name="url" value="${db.url}" />
		<property name="username" value="${db.username}" />
		<property name="password" value="${db.password}" />
	</bean>

	<!-- SqlSessionFactoryBean -->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="typeAliasesPackage" value="com.etoak.bean" />
		<!-- mappers -->
		<property name="mapperLocations" value="classpath:mapper/*.xml" />
		<property name="plugins">
			<list>
				<bean class="com.github.pagehelper.PageInterceptor"></bean>
			</list>
		</property>
	</bean>

	<!-- MapperScannerConfigurer: 扫描指定包下的Mapper接口, 为接口创建代理对象,并代理对象注册到Spring容器中 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.etoak.mapper" />
	</bean>
	<!--事务管理-->
	<tx:annotation-driven/>
</beans>

SpringRoot java版-rootConfig

@Configuration
@ComponentScan(basePackages = {"com.etoak"},
        excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class, RestController.class, ControllerAdvice.class,EnableWebMvc.class}),
},
        includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Service.class, Repository.class})})
@PropertySource(value = "classpath:db.properties")//该注解只能引入properties文件
@MapperScan(basePackages = "com.etoak.mapper")//MapperScannerConfigurer
@EnableTransactionManagement //<tx:annotation-driven>
public class RootConfig {
	/*读取配置文件*/
    @Value("${db.driver}")
    private String driverClassName;

    @Value("${db.url}")
    private String url;

    @Value("${db.username}")
    private String username;

    @Value("${db.password}")
    private String password;
	/*
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="${db.driver}" />
		<property name="url" value="${db.url}" />
		<property name="username" value="${db.username}" />
		<property name="password" value="${db.password}" />
	</bean>
*/
    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setInitialSize(10);//初始化10个连接
        dataSource.setMaxActive(30);
        return dataSource;
    }
/*
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="typeAliasesPackage" value="com.etoak.bean" />
		<!-- mappers -->
		<property name="mapperLocations" value="classpath:mapper/*.xml" />
		<property name="plugins">
			<list>
				<bean class="com.github.pagehelper.PageInterceptor"></bean>
			</list>
		</property>
	</bean>
*/
    @Bean
    public SqlSessionFactoryBean sessionFactoryBean(){
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(this.dataSource());
        sessionFactoryBean.setTypeAliasesPackage("com.etoak.bean");
        PathMatchingResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
        try {
            sessionFactoryBean.setMapperLocations(patternResolver.getResources("classpath:mapper/*.xml"));
        } catch (Exception e) {
            e.printStackTrace();
        }

        PageInterceptor interceptor = new PageInterceptor();
        Properties properties = new Properties();
        properties.setProperty("reasonable","true");
        interceptor.setProperties(properties);
        sessionFactoryBean.setPlugins(new Interceptor[]{interceptor});

        return sessionFactoryBean;
    }

    /*事务管理器 注解事务*/
    @Bean
    public DataSourceTransactionManager transactionManager(){
        return new DataSourceTransactionManager(dataSource());
    }
}

👇SpringMVC xml版

<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

	<context:component-scan base-package="com.etoak">
		<!-- 扫描@Controller@RestController @ControllerAdvice-->
		<context:include-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
		<context:include-filter type="annotation"
			expression="org.springframework.web.bind.annotation.RestController" />
		       <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
		<!-- 排除@Service@Repository -->
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
		<context:exclude-filter type="annotation"
			expression="org.springframework.stereotype.Repository" />
	</context:component-scan>
	<!--启动器 @ResponseBody @RequestBody @PathValiable @RequestParam @ExceptionHandle...注解主要靠它-->
	<mvc:annotation-driven></mvc:annotation-driven>
	<!--静态资源加载-->
	<mvc:default-servlet-handler />
	
	<mvc:resources location="file:d:/upload/et2009/" 
	mapping="/pic/**" />

	<!-- InternalResourceViewResolver 视图解析器和模板引擎冲突 选择一个使用 -->
	<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/jsps/" 
		/> <property name="suffix" value=".jsp" /> </bean> -->

	<!-- SpringResourceTemplateResolver 根据Controller返回的字符串去找到 文件->对象-->
	<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
		<!-- prefix:页面放置位置 -->
		<property name="prefix" value="calsspath:/templates/" />
		<!-- suffix:页面后缀名 -->
		<property name="suffix" value=".html" />
		<!-- 模板类型 -->
		<property name="templateMode" value="HTML" />
		<!-- 页面编码 -->
		<property name="characterEncoding" value="UTF-8" />
		<!-- cacheable:是否缓存页面,在开发换下不缓存 -->
		<property name="cacheable" value="false" />
	</bean>

	<!-- SpringTemplateEngine 我们可以使用thymeleaf模版来生产html文件 处理渲染结果-->
	<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
		<property name="templateResolver" ref="templateResolver" />
	</bean>

	<!-- ThymeleafViewResolver 根据逻辑view名字,找到找到thymeleaf模板view(对象)-->
	<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
		<property name="templateEngine" ref="templateEngine" />
		<!-- 页面内容编码 -->
		<property name="characterEncoding" value="UTF-8" />
	</bean>

	<!-- 文件上传解析器CommonsMultipartResolver -->
	<!-- id必须是multipartResolver -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 最大上传大小为1MB -->
		<property name="maxUploadSize" value="1048576" />
	</bean>
	    <!--页面跳转不需要携带数据的情况下可以这么写 删除原本的jsp文件 根路径下会跳转到resources/templetes/index.html-->
    <mvc:view-controller path="/" view-name="index"/>
</beans>

SpringMVC容器 java版-MvcConfig👇我注释里是两者的对照

@Configuration
@ComponentScan(basePackages = {"com.etoak"},includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class, RestController.class, ControllerAdvice.class,EnableWebMvc.class}),
},excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Service.class, Repository.class})})
@EnableWebMvc//<mvc:annotation-driven />
public class MvcConfig implements WebMvcConfigurer {
    /*<mvc:default-servlet-handler />*/
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    /*
    * 	<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
		<!-- prefix:页面放置位置 -->
		<property name="prefix" value="calsspath:/templates/" />
		<!-- suffix:页面后缀名 -->
		<property name="suffix" value=".html" />
		<!-- 模板类型 -->
		<property name="templateMode" value="HTML" />
		<!-- 页面编码 -->
		<property name="characterEncoding" value="UTF-8" />
		<!-- cacheable:是否缓存页面,在开发换下不缓存 -->
		<property name="cacheable" value="false" />
	</bean>
    * */
    @Bean
    public SpringResourceTemplateResolver templateResolver(){
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setPrefix("classpath:/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false);
        return templateResolver;
    }
    /*
	<!-- SpringTemplateEngine 我们可以使用thymeleaf模版来生产html文件 处理渲染结果-->
	<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
		<property name="templateResolver" ref="templateResolver" />
	</bean>
    */
    @Bean
    public SpringTemplateEngine templateEngine(@Qualifier("templateResolver") SpringResourceTemplateResolver templateResolver){
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }
    /*
    * 	<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
		<property name="templateEngine" ref="templateEngine" />
		<!-- 页面内容编码 -->
		<property name="characterEncoding" value="UTF-8" />
	</bean>
    * */
    @Bean
    public ThymeleafViewResolver viewResolver(@Qualifier("templateEngine") SpringTemplateEngine templateEngine){
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine);
        viewResolver.setCharacterEncoding("UTF-8");
        return viewResolver;
    }
}

👇web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<!-- Spring通过ContextLoaderListener加载Spring父容器,
		 默认加载/WEB-INF/applicationContext.xml,
		 可以使用context-param指定父容器 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-root.xml</param-value>
	</context-param>
	<!-- POST请求编码过滤器 -->
	<filter>
		<filter-name>encoding</filter-name>
		<filter-class>
			org.springframework.web.filter.CharacterEncodingFilter
		</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
		<!-- HiddenHttpMethodFilter:用于将表单的post请求转换成delete或put请求 -->
	<filter>
		<filter-name>rest</filter-name>
		<filter-class>
			org.springframework.web.filter.HiddenHttpMethodFilter
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>rest</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!--监听器-->
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
	<!-- DispatcherServlet -->
	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>
			org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
</web-app>

java版web.xml

//相当于web.xml
public class MvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /*
    * SpringRoot
    * */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }
    /*
     * SpringMVC
     * */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{MvcConfig.class};
    }
    /*
     * DispatcherServlet拦截路径
     * */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
      /*
     * 配置过滤器,解决前端请求中的中文乱码
     * */
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        return new Filter[]{encodingFilter};
    }
}

一个基本的SpringMVC需要的依赖 帮助快速启动工程
Pom.xml👇

<dependencies>
		<!-- servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<!-- spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.2.6.RELEASE</version>
		</dependency>
		 <!-- commons-codec -->
    <dependency>
      <groupId>commons-codec</groupId>
      	<artifactId>commons-codec</artifactId>
      <version>1.14</version>
    </dependency>
    <!--fastJson-->
    <dependency>
      <groupId>com.alibaba</groupId>
      	<artifactId>fastjson</artifactId>
      <version>1.2.70</version>
    </dependency>
		<!-- jackson-databind -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.9</version>
		</dependency>
		<!-- lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.10</version>
			<scope>provided</scope>
		</dependency>
		<!-- 整合Thymeleaf 自选-->
		<dependency>
			<groupId>org.thymeleaf</groupId>
			<artifactId>thymeleaf-spring5</artifactId>
			<version>3.0.11.RELEASE</version>
		</dependency>
		<!--
========================Spring整合MyBatis=========================================
		-->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.2.6.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.46</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.10</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.3</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.1</version>
		</dependency>
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>5.1.10</version>
		</dependency>
		<!-- logback-classic 自选-->
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- commons-fileupload 自选-->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.3</version>
		</dependency>
		<!--
==============================aop=====================================
		-->
		<!-- spring-aspects -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>5.2.6.RELEASE</version>
		</dependency>
		<!-- aspectjrt -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>1.9.2</version>
		</dependency>
		<!-- aopalliance -->
		<dependency>
			<groupId>aopalliance</groupId>
			<artifactId>aopalliance</artifactId>
			<version>1.0</version>
		</dependency>
		<!-- cglib 动态代理-->
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib</artifactId>
			<version>3.3.0</version>
		</dependency>
	</dependencies>

总结

今天主要就向阐明上面那一张图,然后方便大家快速启动工程
java版目录结构
在这里插入图片描述

xml目录结构
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

商朝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值