飞道的博客

java项目从SSM向SrpingBoot迁移教程,吐血一步一步整理,第一次弄真的踩了好多坑

550人阅读  评论(0)

 

目录

一 下载spring tool suite

二 项目的生成与初步测试

三. pom.xml文件的迁移

四 Dao层的迁移

五 service的迁移

六 web层的迁移

七 前端页面的迁移直接复制过来,再配置一下路径就好了

 


一 下载spring tool suite

1.1下载spring tool suite,选择下面一个匹配的并下载,我这里用的是windows,下载地址https://spring.io/tools

1.2 下载完毕后,运行然后会生成一个文件夹

1.3 然后里面会有这个程序的快捷方式,运行这个快捷方式就会进入到这个构建工具当中

二 项目的生成与初步测试

2.1 在spring的官网生成一个项目,你可以根据自己的需要选择相应的内容,,https://start.spring.io/

2.2 在打开项目之前,先进入.setting文件中修改一下版本,修改org.eclipse.wst.common.project.facet.core文件,修改为


  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <faceted-project>
  3. <fixed facet="wst.jsdt.web"/>
  4. <installed facet="java" version="1.8"/>
  5. <installed facet="wst.jsdt.web" version="1.0"/>
  6. <installed facet="jst.web" version="3.1"/>
  7. </faceted-project>

因为这个地方有一个BUG,如果直接去下面这个页面是修改不了的

这个配置文件修改的就是dynamic web module的版本

2.3 打开spring tool suite并导入在官网生成的项目,选择刚才的路径,并添加完成

2.4构建完成的目录结构

2.5 插入一个大坑,就是Source folder is not a Java project.,这是由于没有勾选dynamic web module,勾选,并重新启动软件,注意!!!这里不是update maven,而且你在已经打开项目的时候,去修改.setting里面的那个3.1版本配置,maven update它又会将这个3.1重新更新为4,所以最好重启一下软件。

 2.6 插入一个大坑,看一下jre和jdk的版本是不是之前的,版本不一样的话也会发生错误,这里好好确认一下。

2.7 插入一个大坑,一定要配置好maven的这两个

配置过程,首先下载maven http://maven.apache.org/download.cgi

 然后解压到相应的文件夹下,再进行配置相应的路径就可以了。

2.8 插入一个巨大大大大大大坑,spring tool suite这个软件是有内嵌的tomcat的,所以我们不需要额外配置相应的tomcat,只需要到下面这个类中,右键,run as ,java application就可以了(当时自己傻乎乎的像eclipse一样配置了一个额外的tomcat8,然后报错,网上说用tomcat8.5就好了,我就下载了tomcat8.5,然后还是报错,服务器不能运行,原来它有自己的内嵌tomcat啊,啊啊啊),当然,你像下面这样直接运行是不好用的,你需要再pom文件中将mybatis的依赖先注释掉,现在还有没配置相关的内容,spring一定会报错的。

2.9 初步测试,创建一个hello.java,如下,代码也给你写好了


  
  1. import org.springframework.web.bind.annotation.RequestMapping;
  2. import org.springframework.web.bind.annotation.RequestMethod;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. public class Hello {
  6. @RequestMapping(value = "/hello", method = RequestMethod.GET)
  7. public String hello() {
  8. //返回Hello SpringBoot!
  9. return "Hello SpringBoot!";
  10. }
  11. }

2.10 像上面提到的那样,开启项目

2.10 在浏览器中测试,刚才我设置的映射是/hello

这样一个项目的初步创建就完成了,中间的时候真的踩了好多坑,浪费了好多时间,一定要有耐心,并且一定要仔细才行啊,好的开始是成功的一半,这里仅仅是初步创建,重头戏还在后面,那么整个项目是如何迁移的呢,不用担心,在后面我会写一些springboot的知识,以及注解,还有就是详细的图文迁移过程。后面的迁移主要包含dao的迁移,service的迁移,web的迁移,前端的迁移,验证码的迁移,拦截器的迁移等等,当然有时候你的项目里还有其他的一些内容可以去迁移。

三. pom.xml文件的迁移

3.1 将原来spring的相关依赖删去,springboot已经封装好了。下面是删掉的部分


  
  1. <dependency>
  2. <groupId>org.springframework </groupId>
  3. <artifactId>spring-core </artifactId>
  4. <version>${spring.version} </version>
  5. </dependency>
  6. <!-- 2)这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control
  7. / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar
  8. 及spring-beans.jar 文件就可以了。 -->
  9. <dependency>
  10. <groupId>org.springframework </groupId>
  11. <artifactId>spring-beans </artifactId>
  12. <version>${spring.version} </version>
  13. </dependency>
  14. <!-- 3)这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI
  15. 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。 -->
  16. <dependency>
  17. <groupId>org.springframework </groupId>
  18. <artifactId>spring-context </artifactId>
  19. <version>${spring.version} </version>
  20. </dependency>
  21. <!-- 4) 这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。 -->
  22. <dependency>
  23. <groupId>org.springframework </groupId>
  24. <artifactId>spring-jdbc </artifactId>
  25. <version>${spring.version} </version>
  26. </dependency>
  27. <!-- 5) 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。 -->
  28. <dependency>
  29. <groupId>org.springframework </groupId>
  30. <artifactId>spring-tx </artifactId>
  31. <version>${spring.version} </version>
  32. </dependency>
  33. <!-- 6)Spring web 包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 -->
  34. <dependency>
  35. <groupId>org.springframework </groupId>
  36. <artifactId>spring-web </artifactId>
  37. <version>${spring.version} </version>
  38. </dependency>
  39. <!-- 7)包含SpringMVC框架相关的所有类。 -->
  40. <dependency>
  41. <groupId>org.springframework </groupId>
  42. <artifactId>spring-webmvc </artifactId>
  43. <version>${spring.version} </version>
  44. </dependency>
  45. <!-- 8)Spring test 对JUNIT等测试框架的简单封装 -->
  46. <dependency>
  47. <groupId>org.springframework </groupId>
  48. <artifactId>spring-test </artifactId>
  49. <version>${spring.version} </version>
  50. <scope>test </scope>
  51. </dependency>

3.2 将junit依赖去掉,因为springboot已经有了相关测试类的东西,下面是删掉的部分


  
  1. <dependency>
  2. <groupId>junit </groupId>
  3. <artifactId>junit </artifactId>
  4. <version>3.8.1 </version>
  5. <scope>test </scope>
  6. </dependency>

3.3 将mybatis的相关部分干掉,因为我在最开始的时候引入了mybatis依赖了,下面是删掉的部分


  
  1. <!-- DAO: MyBatis -->
  2. <dependency>
  3. <groupId>org.mybatis </groupId>
  4. <artifactId>mybatis </artifactId>
  5. <version>3.5.1 </version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.mybatis </groupId>
  9. <artifactId>mybatis-spring </artifactId>
  10. <version>2.0.1 </version>
  11. </dependency>

4.4 将剩余的依赖复制到新的项目的pom文件的依赖中,并把刚才的mybatis依赖的注释去掉,下面是springboot的整合好的pom.xml文件


  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0 </modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot </groupId>
  7. <artifactId>spring-boot-starter-parent </artifactId>
  8. <version>2.2.6.RELEASE </version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.imooc </groupId>
  12. <artifactId>o2o </artifactId>
  13. <version>0.0.1-SNAPSHOT </version>
  14. <packaging>war </packaging>
  15. <name>o2o </name>
  16. <description>Demo project for Spring Boot </description>
  17. <properties>
  18. <java.version>1.8 </java.version>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>ch.qos.logback </groupId>
  23. <artifactId>logback-classic </artifactId>
  24. <version>1.2.3 </version>
  25. </dependency>
  26. <!-- Spring -->
  27. <!-- 1)包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心 -->
  28. <!-- Servlet web -->
  29. <dependency>
  30. <groupId>javax.servlet </groupId>
  31. <artifactId>javax.servlet-api </artifactId>
  32. <version>4.0.1 </version>
  33. </dependency>
  34. <!-- json解析 -->
  35. <dependency>
  36. <groupId>com.fasterxml.jackson.core </groupId>
  37. <artifactId>jackson-databind </artifactId>
  38. <version>2.9.9 </version>
  39. </dependency>
  40. <!-- Map工具类 对标准java Collection的扩展 spring-core.jar需commons-collections.jar -->
  41. <dependency>
  42. <groupId>commons-collections </groupId>
  43. <artifactId>commons-collections </artifactId>
  44. <version>3.2.2 </version>
  45. </dependency>
  46. <!-- 数据库 -->
  47. <dependency>
  48. <groupId>mysql </groupId>
  49. <artifactId>mysql-connector-java </artifactId>
  50. <version>8.0.16 </version>
  51. </dependency>
  52. <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
  53. <dependency>
  54. <groupId>com.mchange </groupId>
  55. <artifactId>c3p0 </artifactId>
  56. <version>0.9.5.4 </version>
  57. </dependency>
  58. <!-- 图片处理 -->
  59. <!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
  60. <dependency>
  61. <groupId>net.coobird </groupId>
  62. <artifactId>thumbnailator </artifactId>
  63. <version>0.4.8 </version>
  64. </dependency>
  65. <!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
  66. <dependency>
  67. <groupId>com.github.penggle </groupId>
  68. <artifactId>kaptcha </artifactId>
  69. <version>2.3.2 </version>
  70. </dependency>
  71. <dependency>
  72. <groupId>commons-fileupload </groupId>
  73. <artifactId>commons-fileupload </artifactId>
  74. <version>1.3.2 </version>
  75. </dependency>
  76. <!-- redis客户端:Jedis -->
  77. <dependency>
  78. <groupId>redis.clients </groupId>
  79. <artifactId>jedis </artifactId>
  80. <version>2.9.0 </version>
  81. </dependency>
  82. <dependency>
  83. <groupId>org.springframework.boot </groupId>
  84. <artifactId>spring-boot-starter-web </artifactId>
  85. </dependency>
  86. <dependency>
  87. <groupId>org.mybatis.spring.boot </groupId>
  88. <artifactId>mybatis-spring-boot-starter </artifactId>
  89. <version>2.1.2 </version>
  90. </dependency>
  91. <dependency>
  92. <groupId>org.springframework.boot </groupId>
  93. <artifactId>spring-boot-starter-tomcat </artifactId>
  94. <scope>provided </scope>
  95. </dependency>
  96. <dependency>
  97. <groupId>org.springframework.boot </groupId>
  98. <artifactId>spring-boot-starter-test </artifactId>
  99. <scope>test </scope>
  100. <exclusions>
  101. <exclusion>
  102. <groupId>org.junit.vintage </groupId>
  103. <artifactId>junit-vintage-engine </artifactId>
  104. </exclusion>
  105. </exclusions>
  106. </dependency>
  107. </dependencies>
  108. <build>
  109. <plugins>
  110. <plugin>
  111. <groupId>org.springframework.boot </groupId>
  112. <artifactId>spring-boot-maven-plugin </artifactId>
  113. </plugin>
  114. </plugins>
  115. </build>
  116. </project>

如果粘贴过来之后,某些版本标记黄色了,可能是与springboot的里jar包的版本冲突,可以把版本信息去掉。

四 Dao层的迁移

主要包含两大部分,配置的迁移和普通类的迁移

4.1 application.properties感觉是一个变量库,像是一个key-value,然后我们在之后配置的时候通过@value进行调用,后面会提到。先来简单看一下这个application.properties


  
  1. server.port=8080
  2. #加入/o2o前缀
  3. server.servlet.context-path=/o2o
  4. #DataSource
  5. #数据库驱动
  6. jdbc.driver=com.mysql.cj.jdbc.Driver
  7. #数据库链接
  8. jdbc.url=jdbc:mysql://106.13.78.180:3306/o2o?useUnicode= true&characterEncoding=utf8&useSSL= false&serverTimezone=UTC
  9. #数据库用户名(已加密)
  10. jdbc.username=WnplV/ietfQ=
  11. #数据库密码(已加密)
  12. jdbc.password=RxQNfAQRZdFbfLs72BFqeQ==
  13. #Mybatis
  14. mybatis_config_file=mybatis-config.xml
  15. mapper_path=/mapper/**.xml
  16. type_alias_package=com.imooc.entity

4.2 springboot是尽量去除XML代码,然后以代码的形式进行配置,所以最后会有若干个对应的class文件,用以代替XML配置文件

4.3 首先来看一下之前的dao配置文件都有什么,然后再看看一个一个改成什么。既然是项目迁移,我想大家应该都有原来的文件,我就不在这里献丑了,直接说了。

第一个,jdbc.properties文件,主要配置与mysql的连接,然后里面的内容会在datasource中得到调用,以${jdbc.driver}的形式,这一部分直接迁移到application.properties文件当中

第二个,datasource,这一部分会创建类来进行配置,如下:

这里面一共有四个标签值得注意

@Configuration这个标签表示它是一个配置,这个配置也会自动写入到spring容器当中

@MapperScan("com.imooc.o2o.dao")这个标签扫描的是dao相关的包

@Value("${jdbc.driver}")这个标签刚才提到了,是从application.properties属性文件中获取相应的内容

@Bean(name = "dataSource")这个注明这个dataSource也是一个bean生成之后也要写入到spring容器当中

然后其他的操作就是配置相应的dataSource的属性了

 


  
  1. package com.imooc.o2o.config.dao;
  2. import java.beans.PropertyVetoException;
  3. import org.mybatis.spring.annotation.MapperScan;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. import com.imooc.o2o.util.DESUtil;
  8. import com.mchange.v2.c3p0.ComboPooledDataSource;
  9. /**
  10. * 配置datasource到ioc容器里面
  11. *
  12. * @author xiangze
  13. *
  14. */
  15. @Configuration
  16. // 配置mybatis mapper的扫描路径
  17. @MapperScan( "com.imooc.o2o.dao")
  18. public class DataSourceConfiguration {
  19. @Value( "${jdbc.driver}")
  20. private String jdbcDriver;
  21. @Value( "${jdbc.url}")
  22. private String jdbcUrl;
  23. @Value( "${jdbc.username}")
  24. private String jdbcUsername;
  25. @Value( "${jdbc.password}")
  26. private String jdbcPassword;
  27. /**
  28. * 生成与spring-dao.xml对应的bean dataSource
  29. *
  30. * @return
  31. * @throws PropertyVetoException
  32. */
  33. @Bean(name = "dataSource")
  34. public ComboPooledDataSource createDataSource() throws PropertyVetoException {
  35. // 生成datasource实例
  36. ComboPooledDataSource dataSource = new ComboPooledDataSource();
  37. // 跟配置文件一样设置以下信息
  38. // 驱动
  39. dataSource.setDriverClass(jdbcDriver);
  40. // 数据库连接URL
  41. dataSource.setJdbcUrl(jdbcUrl);
  42. // 设置用户名
  43. dataSource.setUser(DESUtil.getDecryptString(jdbcUsername));
  44. // 设置用户密码
  45. dataSource.setPassword(DESUtil.getDecryptString(jdbcPassword));
  46. // 配置c3p0连接池的私有属性
  47. // 连接池最大线程数
  48. dataSource.setMaxPoolSize( 30);
  49. // 连接池最小线程数
  50. dataSource.setMinPoolSize( 10);
  51. dataSource.setInitialPoolSize( 10);
  52. // 关闭连接后不自动commit
  53. dataSource.setAutoCommitOnClose( false);
  54. // 连接超时时间
  55. dataSource.setCheckoutTimeout( 10000);
  56. // 连接失败重试次数
  57. dataSource.setAcquireRetryAttempts( 2);
  58. return dataSource;
  59. }
  60. }

第三个,sqlSessionFactory,这个也会以类的形式进行配置,如下:

同样的,这里面首先有一个configuration,然后通过@value进行调用参数,这些参数在总配置文件当中

mybatis_config_file=mybatis-config.xml
mapper_path=/mapper/**.xml
type_alias_package=com.imooc.entity

其实也就是扫描相应的依赖的mybatis-config.xml配置文件

扫描相应的dao层开发mapper文件

还有相应的实体类bean,也就是什么商店,人,区域,类别这种与数据库对应的实体类


  
  1. package com.imooc.o2o.config.dao;
  2. import java.io.IOException;
  3. import javax.sql.DataSource;
  4. import org.mybatis.spring.SqlSessionFactoryBean;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.core.io.ClassPathResource;
  10. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  11. import org.springframework.core.io.support.ResourcePatternResolver;
  12. @Configuration
  13. public class SessionFactoryConfiguration {
  14. // mybatis-config.xml配置文件的路径
  15. private static String mybatisConfigFile;
  16. @Value( "${mybatis_config_file}")
  17. public void setMybatisConfigFile(String mybatisConfigFile) {
  18. SessionFactoryConfiguration.mybatisConfigFile = mybatisConfigFile;
  19. }
  20. // mybatis mapper文件所在路径
  21. private static String mapperPath;
  22. @Value( "${mapper_path}")
  23. public void setMapperPath(String mapperPath) {
  24. SessionFactoryConfiguration.mapperPath = mapperPath;
  25. }
  26. // 实体类所在的package
  27. @Value( "${type_alias_package}")
  28. private String typeAliasPackage;
  29. @Autowired
  30. private DataSource dataSource;
  31. /**
  32. * 创建sqlSessionFactoryBean 实例 并且设置configtion 设置mapper 映射路径 设置datasource数据源
  33. *
  34. * @return
  35. * @throws IOException
  36. */
  37. @Bean(name = "sqlSessionFactory")
  38. public SqlSessionFactoryBean createSqlSessionFactoryBean() throws IOException {
  39. SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
  40. // 设置mybatis configuration 扫描路径
  41. sqlSessionFactoryBean.setConfigLocation( new ClassPathResource(mybatisConfigFile));
  42. // 添加mapper 扫描路径
  43. PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
  44. String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
  45. sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath));
  46. // 设置dataSource
  47. sqlSessionFactoryBean.setDataSource(dataSource);
  48. // 设置typeAlias 包扫描路径
  49. sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasPackage);
  50. return sqlSessionFactoryBean;
  51. }
  52. }

4.4 将相关的dao,mapper,实体类的包迁移过来 

五 service的迁移

5.1 还是上面的套路,先看看service层原来有什么,然后再看看把它改成什么。

第一个,扫描相应的service包,这个在O2oApplication.java主类中有@SpringBootApplication注解,这个注解就是进行全体扫描,所以原来的扫描service包那个部分就可以不要了。

第二个,事务的管理,transactionManager,这里采用类的方式进行配置,如下:

@EnableTransactionManagement开启事务支持后在Service方法上添加注解 @Transactional 便可,这个事务配置还是比较简单的。
 


  
  1. package com.imooc.o2o.config.service;
  2. import javax.sql.DataSource;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.context.annotation.Configuration;
  5. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  6. import org.springframework.transaction.PlatformTransactionManager;
  7. import org.springframework.transaction.annotation.EnableTransactionManagement;
  8. import org.springframework.transaction.annotation.TransactionManagementConfigurer;
  9. /**
  10. * 对标spring-service里面的transactionManager
  11. * 继承TransactionManagementConfigurer是因为开启annotation-driven
  12. *
  13. * @author xiangze
  14. *
  15. */
  16. @Configuration
  17. // 首先使用注解 @EnableTransactionManagement 开启事务支持后
  18. // 在Service方法上添加注解 @Transactional 便可
  19. @EnableTransactionManagement
  20. public class TransactionManagementConfiguration implements TransactionManagementConfigurer {
  21. @Autowired
  22. // 注入DataSourceConfiguration里边的dataSource,通过createDataSource()获取
  23. private DataSource dataSource;
  24. @Override
  25. /**
  26. * 关于事务管理,需要返回PlatformTransactionManager的实现
  27. */
  28. public PlatformTransactionManager annotationDrivenTransactionManager() {
  29. return new DataSourceTransactionManager(dataSource);
  30. }
  31. }

第三个,redis,如果你的项目中存在redis的话,这个地方也需要redis的迁移,因为redis是在service层进行应用的,这个地方本文就先不说了,可以参考别的文章。

5.2 将相应的service,util等相关的包,全部复制过去就可以了。

5.3 这里面插入一条内容,在SSM的时候,利用junit进行测试,@Test标签,再加入相应的包的支持就可以进行单元测试了。在springboot里变得更加简单,只要用两个标签标记一下就好了,一个是@RunWith,另一个是@SpringBootTest

六 web层的迁移

6.1 还是先看看原来有什么,然后改为什么,web层的配置主要通过一个类文件来迁移。

第一个,原来有springmvc注解,现在用@EnableWebMvc等价于<mvc:annotation-driven/>
第二个,静态资源的配置,文件上传解析器的配置,视图解析器的配置,拦截器的配置,验证码的配置都通过下面的文件的相应方法进行了配置。


  
  1. package com.imooc.o2o.config.web;
  2. import javax.servlet.ServletException;
  3. import org.springframework.beans.BeansException;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  6. import org.springframework.context.ApplicationContext;
  7. import org.springframework.context.ApplicationContextAware;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  11. import org.springframework.web.servlet.ViewResolver;
  12. import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
  13. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  14. import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
  15. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  16. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  17. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  18. import org.springframework.web.servlet.view.InternalResourceViewResolver;
  19. import com.google.code.kaptcha.servlet.KaptchaServlet;
  20. import com.imooc.o2o.interceptor.shopadmin.ShopLoginInterceptor;
  21. import com.imooc.o2o.interceptor.shopadmin.ShopPermissionInterceptor;
  22. import com.imooc.o2o.interceptor.superadmin.SuperAdminLoginInterceptor;
  23. /**
  24. * 开启Mvc,自动注入spring容器。 WebMvcConfigurerAdapter:配置视图解析器
  25. * 当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean
  26. *
  27. * @author xiangze
  28. *
  29. */
  30. @Configuration
  31. // 等价于<mvc:annotation-driven/>
  32. @EnableWebMvc
  33. public class MvcConfiguration implements WebMvcConfigurer, ApplicationContextAware {
  34. // Spring容器
  35. private ApplicationContext applicationContext;
  36. @Override
  37. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  38. this.applicationContext = applicationContext;
  39. }
  40. /**
  41. * 静态资源配置
  42. *
  43. * @param registry
  44. */
  45. @Override
  46. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  47. // registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/resources/");
  48. registry.addResourceHandler( "/upload/**").addResourceLocations( "file:/Users/baidu/work/image/upload/");
  49. }
  50. /**
  51. * 定义默认的请求处理器
  52. */
  53. @Override
  54. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  55. configurer.enable();
  56. }
  57. /**
  58. * 创建viewResolver
  59. *
  60. * @return
  61. */
  62. @Bean(name = "viewResolver")
  63. public ViewResolver createViewResolver() {
  64. InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  65. // 设置Spring 容器
  66. viewResolver.setApplicationContext( this.applicationContext);
  67. // 取消缓存
  68. viewResolver.setCache( false);
  69. // 设置解析的前缀
  70. viewResolver.setPrefix( "/WEB-INF/html/");
  71. // 设置试图解析的后缀
  72. viewResolver.setSuffix( ".html");
  73. return viewResolver;
  74. }
  75. /**
  76. * 文件上传解析器
  77. *
  78. * @return
  79. */
  80. @Bean(name = "multipartResolver")
  81. public CommonsMultipartResolver createMultipartResolver() {
  82. CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
  83. multipartResolver.setDefaultEncoding( "utf-8");
  84. // 1024 * 1024 * 20 = 20M
  85. multipartResolver.setMaxUploadSize( 20971520);
  86. multipartResolver.setMaxInMemorySize( 20971520);
  87. return multipartResolver;
  88. }
  89. @Value( "${kaptcha.border}")
  90. private String border;
  91. @Value( "${kaptcha.textproducer.font.color}")
  92. private String fcolor;
  93. @Value( "${kaptcha.image.width}")
  94. private String width;
  95. @Value( "${kaptcha.textproducer.char.string}")
  96. private String cString;
  97. @Value( "${kaptcha.image.height}")
  98. private String height;
  99. @Value( "${kaptcha.textproducer.font.size}")
  100. private String fsize;
  101. @Value( "${kaptcha.noise.color}")
  102. private String nColor;
  103. @Value( "${kaptcha.textproducer.char.length}")
  104. private String clength;
  105. @Value( "${kaptcha.textproducer.font.names}")
  106. private String fnames;
  107. /**
  108. * 由于web.xml不生效了,需要在这里配置Kaptcha验证码Servlet
  109. */
  110. @Bean
  111. public ServletRegistrationBean<KaptchaServlet> servletRegistrationBean() throws ServletException {
  112. ServletRegistrationBean<KaptchaServlet> servlet = new ServletRegistrationBean<KaptchaServlet>( new KaptchaServlet(), "/Kaptcha");
  113. servlet.addInitParameter( "kaptcha.border", border); // 无边框
  114. servlet.addInitParameter( "kaptcha.textproducer.font.color", fcolor); // 字体颜色
  115. servlet.addInitParameter( "kaptcha.image.width", width); // 图片宽度
  116. servlet.addInitParameter( "kaptcha.textproducer.char.string", cString); // 使用哪些字符生成验证码
  117. servlet.addInitParameter( "kaptcha.image.height", height); // 图片高度
  118. servlet.addInitParameter( "kaptcha.textproducer.font.size", fsize); // 字体大小
  119. servlet.addInitParameter( "kaptcha.noise.color", nColor); // 干扰线的颜色
  120. servlet.addInitParameter( "kaptcha.textproducer.char.length", clength); // 字符个数
  121. servlet.addInitParameter( "kaptcha.textproducer.font.names", fnames); // 字体
  122. return servlet;
  123. }
  124. /**
  125. * 添加拦截器配置
  126. */
  127. @Override
  128. public void addInterceptors(InterceptorRegistry registry) {
  129. /** 店家管理系统拦截部分 **/
  130. String interceptPath = "/shopadmin/**";
  131. // 注册拦截器
  132. InterceptorRegistration loginIR = registry.addInterceptor( new ShopLoginInterceptor());
  133. // 配置拦截的路径
  134. loginIR.addPathPatterns(interceptPath);
  135. /** shopauthmanagement page **/
  136. loginIR.excludePathPatterns( "/shopadmin/addshopauthmap");
  137. /** scan **/
  138. loginIR.excludePathPatterns( "/shopadmin/adduserproductmap");
  139. loginIR.excludePathPatterns( "/shopadmin/exchangeaward");
  140. // 还可以注册其它的拦截器
  141. InterceptorRegistration permissionIR = registry.addInterceptor( new ShopPermissionInterceptor());
  142. // 配置拦截的路径
  143. permissionIR.addPathPatterns(interceptPath);
  144. // 配置不拦截的路径
  145. /** shoplist page **/
  146. permissionIR.excludePathPatterns( "/shopadmin/shoplist");
  147. permissionIR.excludePathPatterns( "/shopadmin/getshoplist");
  148. /** shopregister page **/
  149. permissionIR.excludePathPatterns( "/shopadmin/getshopinitinfo");
  150. permissionIR.excludePathPatterns( "/shopadmin/registershop");
  151. permissionIR.excludePathPatterns( "/shopadmin/shopoperation");
  152. /** shopmanage page **/
  153. permissionIR.excludePathPatterns( "/shopadmin/shopmanagement");
  154. permissionIR.excludePathPatterns( "/shopadmin/getshopmanagementinfo");
  155. /** shopauthmanagement page **/
  156. permissionIR.excludePathPatterns( "/shopadmin/addshopauthmap");
  157. /** scan **/
  158. permissionIR.excludePathPatterns( "/shopadmin/adduserproductmap");
  159. permissionIR.excludePathPatterns( "/shopadmin/exchangeaward");
  160. /** 超级管理员系统拦截部分 **/
  161. interceptPath = "/superadmin/**";
  162. // 注册拦截器
  163. InterceptorRegistration superadminloginIR = registry.addInterceptor( new SuperAdminLoginInterceptor());
  164. // 配置拦截的路径
  165. superadminloginIR.addPathPatterns(interceptPath);
  166. superadminloginIR.excludePathPatterns( "/superadmin/login");
  167. superadminloginIR.excludePathPatterns( "/superadmin/logincheck");
  168. superadminloginIR.excludePathPatterns( "/superadmin/main");
  169. superadminloginIR.excludePathPatterns( "/superadmin/top");
  170. superadminloginIR.excludePathPatterns( "/superadmin/clearcache4area");
  171. superadminloginIR.excludePathPatterns( "/superadmin/clearcache4headline");
  172. superadminloginIR.excludePathPatterns( "/superadmin/clearcache4shopcategory");
  173. }
  174. }

七 前端页面的迁移直接复制过来,再配置一下路径就好了

 

 

总结,不同的项目应用的技术不同,迁移的难度就不同,本文仅仅介绍了简单的迁移过程,具体的还得针对自己的项目去体会。

 

 

 

 

 

 

 

 

 

 


转载:https://blog.csdn.net/qq_41901915/article/details/105659453
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场