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

 

目录

一 下载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文件,修改为

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="java" version="1.8"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
  <installed facet="jst.web" version="3.1"/>
</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,如下,代码也给你写好了

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Hello {
	@RequestMapping(value = "/hello", method = RequestMethod.GET)
	public String hello() {
		//返回Hello SpringBoot!
		return "Hello SpringBoot!";
	}
}

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

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

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

三. pom.xml文件的迁移

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

<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- 2)这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control 
		/ Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 
		及spring-beans.jar 文件就可以了。 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-beans</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- 3)这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 
		所需的全部类,instrumentation组件以及校验Validation 方面的相关类。 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- 4) 这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- 5) 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- 6)Spring web 包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- 7)包含SpringMVC框架相关的所有类。 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- 8)Spring test 对JUNIT等测试框架的简单封装 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>${spring.version}</version>
		<scope>test</scope>
	</dependency>

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

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

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

<!-- DAO: MyBatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.1</version>
	</dependency>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>2.0.1</version>
	</dependency>

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

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.imooc</groupId>
	<artifactId>o2o</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>o2o</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		
			<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- Spring -->
		<!-- 1)包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心 -->
		
		<!-- Servlet web -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>4.0.1</version>
		</dependency>
		<!-- json解析 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.9</version>
		</dependency>
		<!-- Map工具类 对标准java Collection的扩展 spring-core.jar需commons-collections.jar -->
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
			<version>3.2.2</version>
		</dependency>
		
		<!-- 数据库 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.16</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
		<dependency>
			<groupId>com.mchange</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.5.4</version>
		</dependency>
	
		<!-- 图片处理 -->
		<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
		<dependency>
			<groupId>net.coobird</groupId>
			<artifactId>thumbnailator</artifactId>
			<version>0.4.8</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha -->
		<dependency>
			<groupId>com.github.penggle</groupId>
			<artifactId>kaptcha</artifactId>
			<version>2.3.2</version>
		</dependency>
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.2</version>
		</dependency>
		<!-- redis客户端:Jedis -->
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

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

四 Dao层的迁移

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

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

server.port=8080
#加入/o2o前缀
server.servlet.context-path=/o2o

#DataSource
#数据库驱动
jdbc.driver=com.mysql.cj.jdbc.Driver
#数据库链接
jdbc.url=jdbc:mysql://106.13.78.180:3306/o2o?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
#数据库用户名(已加密)
jdbc.username=WnplV/ietfQ=
#数据库密码(已加密)
jdbc.password=RxQNfAQRZdFbfLs72BFqeQ==

#Mybatis
mybatis_config_file=mybatis-config.xml
mapper_path=/mapper/**.xml
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的属性了

 

package com.imooc.o2o.config.dao;

import java.beans.PropertyVetoException;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.imooc.o2o.util.DESUtil;
import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 配置datasource到ioc容器里面
 * 
 * @author xiangze
 *
 */
@Configuration
// 配置mybatis mapper的扫描路径
@MapperScan("com.imooc.o2o.dao")
public class DataSourceConfiguration {
	@Value("${jdbc.driver}")
	private String jdbcDriver;
	@Value("${jdbc.url}")
	private String jdbcUrl;
	@Value("${jdbc.username}")
	private String jdbcUsername;
	@Value("${jdbc.password}")
	private String jdbcPassword;

	/**
	 * 生成与spring-dao.xml对应的bean dataSource
	 * 
	 * @return
	 * @throws PropertyVetoException
	 */
	@Bean(name = "dataSource")
	public ComboPooledDataSource createDataSource() throws PropertyVetoException {
		// 生成datasource实例
		ComboPooledDataSource dataSource = new ComboPooledDataSource();
		// 跟配置文件一样设置以下信息
		// 驱动
		dataSource.setDriverClass(jdbcDriver);
		// 数据库连接URL
		dataSource.setJdbcUrl(jdbcUrl);
		// 设置用户名
		dataSource.setUser(DESUtil.getDecryptString(jdbcUsername));
		// 设置用户密码
		dataSource.setPassword(DESUtil.getDecryptString(jdbcPassword));
		// 配置c3p0连接池的私有属性
		// 连接池最大线程数
		dataSource.setMaxPoolSize(30);
		// 连接池最小线程数
		dataSource.setMinPoolSize(10);
		dataSource.setInitialPoolSize(10);
		// 关闭连接后不自动commit
		dataSource.setAutoCommitOnClose(false);
		// 连接超时时间
		dataSource.setCheckoutTimeout(10000);
		// 连接失败重试次数
		dataSource.setAcquireRetryAttempts(2);
		return dataSource;
	}

}

第三个,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,也就是什么商店,人,区域,类别这种与数据库对应的实体类

package com.imooc.o2o.config.dao;

import java.io.IOException;

import javax.sql.DataSource;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

@Configuration
public class SessionFactoryConfiguration {
	// mybatis-config.xml配置文件的路径
	private static String mybatisConfigFile;

	@Value("${mybatis_config_file}")
	public void setMybatisConfigFile(String mybatisConfigFile) {
		SessionFactoryConfiguration.mybatisConfigFile = mybatisConfigFile;
	}

	// mybatis mapper文件所在路径
	private static String mapperPath;

	@Value("${mapper_path}")
	public void setMapperPath(String mapperPath) {
		SessionFactoryConfiguration.mapperPath = mapperPath;
	}

	// 实体类所在的package
	@Value("${type_alias_package}")
	private String typeAliasPackage;

	@Autowired
	private DataSource dataSource;

	/**
	 * 创建sqlSessionFactoryBean 实例 并且设置configtion 设置mapper 映射路径 设置datasource数据源
	 * 
	 * @return
	 * @throws IOException
	 */
	@Bean(name = "sqlSessionFactory")
	public SqlSessionFactoryBean createSqlSessionFactoryBean() throws IOException {
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		// 设置mybatis configuration 扫描路径
		sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFile));
		// 添加mapper 扫描路径
		PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
		String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
		sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath));
		// 设置dataSource
		sqlSessionFactoryBean.setDataSource(dataSource);
		// 设置typeAlias 包扫描路径
		sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasPackage);
		return sqlSessionFactoryBean;
	}

}

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

五 service的迁移

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

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

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

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

package com.imooc.o2o.config.service;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;

/**
 * 对标spring-service里面的transactionManager
 * 继承TransactionManagementConfigurer是因为开启annotation-driven
 * 
 * @author xiangze
 *
 */
@Configuration
// 首先使用注解 @EnableTransactionManagement 开启事务支持后
// 在Service方法上添加注解 @Transactional 便可
@EnableTransactionManagement
public class TransactionManagementConfiguration implements TransactionManagementConfigurer {

	@Autowired
	// 注入DataSourceConfiguration里边的dataSource,通过createDataSource()获取
	private DataSource dataSource;

	@Override
	/**
	 * 关于事务管理,需要返回PlatformTransactionManager的实现
	 */
	public PlatformTransactionManager annotationDrivenTransactionManager() {
		return new DataSourceTransactionManager(dataSource);
	}

}

第三个,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/>
第二个,静态资源的配置,文件上传解析器的配置,视图解析器的配置,拦截器的配置,验证码的配置都通过下面的文件的相应方法进行了配置。

package com.imooc.o2o.config.web;

import javax.servlet.ServletException;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import com.google.code.kaptcha.servlet.KaptchaServlet;
import com.imooc.o2o.interceptor.shopadmin.ShopLoginInterceptor;
import com.imooc.o2o.interceptor.shopadmin.ShopPermissionInterceptor;
import com.imooc.o2o.interceptor.superadmin.SuperAdminLoginInterceptor;

/**
 * 开启Mvc,自动注入spring容器。 WebMvcConfigurerAdapter:配置视图解析器
 * 当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean
 * 
 * @author xiangze
 *
 */
@Configuration
// 等价于<mvc:annotation-driven/>
@EnableWebMvc
public class MvcConfiguration implements WebMvcConfigurer, ApplicationContextAware {
	// Spring容器
	private ApplicationContext applicationContext;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		this.applicationContext = applicationContext;
	}

	/**
	 * 静态资源配置
	 * 
	 * @param registry
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		// registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/resources/");
		registry.addResourceHandler("/upload/**").addResourceLocations("file:/Users/baidu/work/image/upload/");
	}

	/**
	 * 定义默认的请求处理器
	 */
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}

	/**
	 * 创建viewResolver
	 * 
	 * @return
	 */
	@Bean(name = "viewResolver")
	public ViewResolver createViewResolver() {
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		// 设置Spring 容器
		viewResolver.setApplicationContext(this.applicationContext);
		// 取消缓存
		viewResolver.setCache(false);
		// 设置解析的前缀
		viewResolver.setPrefix("/WEB-INF/html/");
		// 设置试图解析的后缀
		viewResolver.setSuffix(".html");
		return viewResolver;
	}

	/**
	 * 文件上传解析器
	 * 
	 * @return
	 */
	@Bean(name = "multipartResolver")
	public CommonsMultipartResolver createMultipartResolver() {
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
		multipartResolver.setDefaultEncoding("utf-8");
		// 1024 * 1024 * 20 = 20M
		multipartResolver.setMaxUploadSize(20971520);
		multipartResolver.setMaxInMemorySize(20971520);
		return multipartResolver;
	}

	@Value("${kaptcha.border}")
	private String border;

	@Value("${kaptcha.textproducer.font.color}")
	private String fcolor;

	@Value("${kaptcha.image.width}")
	private String width;

	@Value("${kaptcha.textproducer.char.string}")
	private String cString;

	@Value("${kaptcha.image.height}")
	private String height;

	@Value("${kaptcha.textproducer.font.size}")
	private String fsize;

	@Value("${kaptcha.noise.color}")
	private String nColor;

	@Value("${kaptcha.textproducer.char.length}")
	private String clength;

	@Value("${kaptcha.textproducer.font.names}")
	private String fnames;

	/**
	 * 由于web.xml不生效了,需要在这里配置Kaptcha验证码Servlet
	 */
	@Bean
	public ServletRegistrationBean<KaptchaServlet> servletRegistrationBean() throws ServletException {
		ServletRegistrationBean<KaptchaServlet> servlet = new ServletRegistrationBean<KaptchaServlet>(new KaptchaServlet(), "/Kaptcha");
		servlet.addInitParameter("kaptcha.border", border);// 无边框
		servlet.addInitParameter("kaptcha.textproducer.font.color", fcolor); // 字体颜色
		servlet.addInitParameter("kaptcha.image.width", width);// 图片宽度
		servlet.addInitParameter("kaptcha.textproducer.char.string", cString);// 使用哪些字符生成验证码
		servlet.addInitParameter("kaptcha.image.height", height);// 图片高度
		servlet.addInitParameter("kaptcha.textproducer.font.size", fsize);// 字体大小
		servlet.addInitParameter("kaptcha.noise.color", nColor);// 干扰线的颜色
		servlet.addInitParameter("kaptcha.textproducer.char.length", clength);// 字符个数
		servlet.addInitParameter("kaptcha.textproducer.font.names", fnames);// 字体
		return servlet;
	}

	/**
	 * 添加拦截器配置
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		/** 店家管理系统拦截部分 **/
		String interceptPath = "/shopadmin/**";
		// 注册拦截器
		InterceptorRegistration loginIR = registry.addInterceptor(new ShopLoginInterceptor());
		// 配置拦截的路径
		loginIR.addPathPatterns(interceptPath);
		/** shopauthmanagement page **/
		loginIR.excludePathPatterns("/shopadmin/addshopauthmap");
		/** scan **/
		loginIR.excludePathPatterns("/shopadmin/adduserproductmap");
		loginIR.excludePathPatterns("/shopadmin/exchangeaward");
		// 还可以注册其它的拦截器
		InterceptorRegistration permissionIR = registry.addInterceptor(new ShopPermissionInterceptor());
		// 配置拦截的路径
		permissionIR.addPathPatterns(interceptPath);
		// 配置不拦截的路径
		/** shoplist page **/
		permissionIR.excludePathPatterns("/shopadmin/shoplist");
		permissionIR.excludePathPatterns("/shopadmin/getshoplist");
		/** shopregister page **/
		permissionIR.excludePathPatterns("/shopadmin/getshopinitinfo");
		permissionIR.excludePathPatterns("/shopadmin/registershop");
		permissionIR.excludePathPatterns("/shopadmin/shopoperation");
		/** shopmanage page **/
		permissionIR.excludePathPatterns("/shopadmin/shopmanagement");
		permissionIR.excludePathPatterns("/shopadmin/getshopmanagementinfo");
		/** shopauthmanagement page **/
		permissionIR.excludePathPatterns("/shopadmin/addshopauthmap");
		/** scan **/
		permissionIR.excludePathPatterns("/shopadmin/adduserproductmap");
		permissionIR.excludePathPatterns("/shopadmin/exchangeaward");
		/** 超级管理员系统拦截部分 **/
		interceptPath = "/superadmin/**";
		// 注册拦截器
		InterceptorRegistration superadminloginIR = registry.addInterceptor(new SuperAdminLoginInterceptor());
		// 配置拦截的路径
		superadminloginIR.addPathPatterns(interceptPath);
		superadminloginIR.excludePathPatterns("/superadmin/login");
		superadminloginIR.excludePathPatterns("/superadmin/logincheck");
		superadminloginIR.excludePathPatterns("/superadmin/main");
		superadminloginIR.excludePathPatterns("/superadmin/top");
		superadminloginIR.excludePathPatterns("/superadmin/clearcache4area");
		superadminloginIR.excludePathPatterns("/superadmin/clearcache4headline");
		superadminloginIR.excludePathPatterns("/superadmin/clearcache4shopcategory");
	}

}

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

 

 

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

 

关注微信公众号,获取更多java软件开发学习资源,覆盖java基础,android,网络编程,并发编程,mysql,linux,算法,以及C++和python书籍资源。

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSM项目基于uniappSpringboot的校园失物招领系统的设计与实现.zip是一个使用Java语言开发的Web应用,它采用了Spring Boot整合SSM(Spring Spring MVC MyBatis)框架,并结合了uniapp前端技术。该系统旨在为校园内的学生和员工提供一个便捷的失物招领服务平台,使得用户能够在移动环境中轻松地发布失物信息、浏览招领启事以及管理和认领失物。 项目的主要功能可能包括: 1. **失物信息发布**:用户可以发布丢失物品的详细信息,包括物品特征、丢失地点等。 2. **招领信息发布**:用户可以发布找到物品的招领信息,提供联系方式供失主联络。 3. **信息搜索与筛选**:提供搜索功能,用户可以根据关键词、类别、时间等条件搜索失物或招领信息。 4. **信息展示与管理**:展示最新的失物和招领信息,并提供信息管理功能,如修改、删除已发布的信息。 5. **失物认领**:提供失物认领功能,失主可以通过描述匹配来认领自己的物品。 6. **在线交流**:允许用户通过系统内置的聊天功能直接进行沟通协商。 7. **用户注册与认证**:提供用户注册和登录功能,确保信息的真实性和安全性。 8. **管理员管理**:系统管理员可以管理所有信息,包括审核发布信息、处理违规内容等。 整个项目采用MVC设计模式,Spring Boot简化了配置和部署流程,Spring负责整体业务逻辑的处理和依赖注入,Spring MVC用于处理HTTP请求和页面跳转,而MyBatis负责与数据库的交互操作。数据库设计优化了存储结构和查询效率,以适应校园失物招领平台的需求。 这个项目适合计算机科学或软件工程专业的学生作为课程设计、毕业设计或实践项目。对于希望学习Spring Boot、SSM框架、uniapp移动开发以及公共服务平台设计的开发者来说,这是一个实用的案例。通过参与这个项目,开发者不仅能提升Java Web开发技能,还能了解如何将现代Web技术应用于校园服务领域,提高物品丢失后的寻回率和管理效率。
【资源说明】 1、基于SSM+Springboot+mysql的商城项目源码+项目说明(课程设计).zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 4、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于SSM+Springboot+mysql的商城项目源码+项目说明(课程设计).zip > API接口访问 http://127.0.0.1:8081/shop/swagger-ui.html > 管理员访问 http://127.0.0.1:8081/shop/admin/login > 普通用户访问 http://127.0.0.1:8081/shop/ >管理员帐号 admin 12345678 >用户帐号 root codingzx admin 密码均为 12345678 图片保存路径: 可以全局搜索后替换 windows: D:/upload linux: /usr/upload mac:需要修改代码,见下面已知问题记录. 或者代码全局搜索 // todo mac需要修改地址 **技术栈** * 后端: SpringBoot Swagger Docker(docker需自己搭建docker环境) * 前端: JSP * 数据库:MySQL * 技术语言 jdk 1.8 * 开发平台 Idea 2018 +win10 * 运行环境 Linux/Windows 毕业设计基于SSM/Springboot的商城项目,一个简单的商城,界面友好,但是不是很漂亮。实现了商城所有基本功能。 作为改写的基础模板,可以增加或者改写的功能: 1. [已实现] 增加word和excel模板 ; excel导出 和 文件导入 2. 增加redis,存储商品信息主要存储。 增加mq,订单并发,再购物车层次上做到入库并发控制 3. [已实现] 增加邮件发送,订单支付成功和发货成功给客户和管理员分别发送邮件 ; # 已实现 (代码注释掉,根据自己需求增加) 4. 增加支付功能,可以用支付宝当面付,入门门槛低 5. 增加合作登陆,用QQ/微信/GITHUB等登陆,存储信息入库 6. 增加数据分析,用Echart分析数据 7. 部署采用docker和nginx做到动静分离。需要改写jsp为模板themeleaf。 8. [已实现] swagger 接口在线预览 # 已实现 9. 每天定时任务,清理异常订单 并发送邮件 10. 死信队列处理延迟任务 用户下单1小时后,自动检查订单是否发货 11. html导出pdf - wkhtmltopdf插件 12. [已实现] 增加货物自提功能,输入验证码后用户自提 有两个版本 一个springboot,一个ssm(已废弃)。 <br/> PS:最近发现以前的毕业设计居然有很多人引用,github上的fork和star数也很多,感觉无形之间又'帮助'了很多人。 本项目主要也是改写的基础的商城项目,没有任何的技巧。 一.系统架构 前端:jsp 后台:springboot 二.项目运行图 用户端: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172532928.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTgwOTcz,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172551212.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MTgwOTcz,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521172611947.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0
### 回答1: 将SSM项目改为Spring Boot需要进行以下步骤: 1. 修改pom.xml文件,将原来的SSM依赖替换为Spring Boot依赖。 2. 修改web.xml文件,将原来的DispatcherServlet配置替换为Spring Boot的自动配置。 3. 修改Spring配置文件,将原来的配置文件替换为Spring Boot的自动配置。 4. 修改代码,将原来的注解替换为Spring Boot的注解。 5. 配置application.properties文件,设置Spring Boot的相关配置。 6. 运行Spring Boot应用程序,测试是否正常运行。 需要注意的是,Spring Boot是一种快速开发框架,可以自动配置大部分的应用程序,但是在一些特殊情况下,还需要手动配置。因此,在将SSM项目改为Spring Boot时,需要仔细检查每个配置文件和代码,确保应用程序能够正常运行。 ### 回答2: ssm项目是指使用Spring、Spring MVC和Mybatis这三个框架进行开发的Java Web项目,而Spring Boot是一种基于Spring框架的简化开发的方式,可以快速构建独立的,生产级别的Spring应用程序。 将ssm项目改为Spring Boot项目主要有以下几个步骤: 1.导入Spring Boot相关依赖 通过Maven或Gradle方式,引入Spring Boot相关依赖,例如spring-boot-starter-web、spring-boot-starter-thymeleaf等等。 2.重新配置Spring Boot的配置文件 Spring Boot使用YAML或properties文件进行配置。需要重新配置项目的application.yml或application.properties文件,设置相关参数,例如数据库连接等。 3.转换为自动配置模式 Spring Boot的优势在于自动配置,可以根据类路径和依赖项自动配置应用程序。将项目中的XML配置文件转换为基于Java的配置类,例如@EnableAutoConfiguration、@Configuration、@ComponentScan等注解都可以代替XML配置。 4.修改Controller和Service 将项目的Controller、Service等相关类注解改为Spring Boot中对应的注解,例如@Controller改为@RestController。 5.使用Spring Boot自带的Web容器 Spring Boot默认集成了Tomcat或Jetty的Web容器,可以直接使用Spring Boot自带的Web容器,无需再单独搭建一个Web容器。 总之,将ssm项目转换为Spring Boot项目可以带来更高效、更便捷、更自动化的开发方式。同时还可以让项目更加轻量级、快速启动、更易于维护和部署。 ### 回答3: 将SSM项目改为Spring Boot项目需要进行以下步骤: 1.导入Spring Boot依赖:在pom.xml文件中添加Spring Boot依赖,例如: ```xml <!-- 引入Spring Boot依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 2.修改启动类:将原来基于SSM的启动类改为基于Spring Boot的启动类。在新启动类中添加@SpringBootApplication注解,例如: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 3.删除web.xml文件:Spring Boot项目不需要web.xml文件,可以直接在启动类中配置Servlet、Filter等。 4.添加application.properties文件:在src/main/resources目录下添加application.properties文件,用于配置数据库、服务器端口、日志等。 5.改变Mybatis的配置方式:将原来的Mybatis配置文件改为注解方式。在Mapper接口上添加@Mapper注解,例如: ```java @Mapper public interface UserMapper { User selectUserById(long id); } ``` 6.集成Swagger:如果需要使用Swagger管理API接口文档,可以在pom.xml文件中添加Swagger依赖,并在启动类中配置,例如: ```java @SpringBootApplication @EnableSwagger2 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } } ``` 7.替换原来的Spring和MyBatis配置文件:把原来的Spring和MyBatis配置文件替换成Spring Boot的配置文件,例如:application.properties和application.yml。 8.测试运行项目:修改完成后,运行项目确保能够正常启动并且访问API接口、访问数据库等操作可以正常执行。 总结来说,将SSM项目改为Spring Boot项目需要进行依赖修改、启动类修改、删除web.xml文件、添加application.properties文件、改变Mybatis的配置方式、集成Swagger、替换原来的Spring和MyBatis配置文件以及测试运行项目等步骤。这些工作可以让开发者更加方便快捷地搭建基于Spring Boot的项目,并且提高了项目的易维护性和可拓展性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值