sringboot整合ssm项目纪实

昨天学完了springboot,感觉没什么困难,好多东西都是spring简化来的,今天于是就上手将自己之前写过的一个spring项目进行改进,改进到springboot项目,没想到还是遇到各种突发bug。哎,还是写一些,让后人少采坑吧。

注意:我的maven编译是jdk1.8,注意修改!!详情戳:https://blog.csdn.net/yinweicheng/article/details/80902381

改之前的项目:https://gitee.com/shiker/marketdemo

修改之后的项目:https://gitee.com/shiker/springboot

第一步,创建mvaen项目(war包,由于之前的demo有大量jsp,先打成war项目),引入依赖:

--------------------------补更---------------------------

springboot各模块的功能:

spring-boot-maven-plugin:如果我们要直接Main启动spring,那么以下plugin必须要添加,否则是无法启动的。如果使用maven 的spring-boot:run的话是不需要此配置的。(测试时如果不配置下面的plugin也是直接在Main中运行的。)

spring-boot-maven-parent:提供springboot的maven编译插件,包含spring-boot-maven-plugin,并提供了版本管理:

<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-core</artifactId>
				<version>${spring.version}</version>
				<exclusions>
					<exclusion>
						<groupId>commons-logging</groupId>
						<artifactId>commons-logging</artifactId>
					</exclusion>
				</exclusions>
			</dependency>
		</dependencies>
	</dependencyManagement>

spring-boot-starter-web:springweb核心组件,包括springmvc;

也就是说,我们既可以自己做依赖管理,也可以通过继承spring-boot-starter-parent做版本控制

-------------------------补更完----------------------

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>edu.hrbeu</groupId>
	<artifactId>springboot-jsp</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<properties>
		<springboot.version>2.0.1.RELEASE</springboot.version>
		<tomcat.version>8.5.29</tomcat.version>
		<mybatis.version>1.3.1</mybatis.version>
		<mysqlConnector.version>5.1.26</mysqlConnector.version>
	</properties>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-web</artifactId>
				<version>${springboot.version}</version>
			</dependency>
			<!-- jsp -->
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-tomcat</artifactId>
				<version>${springboot.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.tomcat.embed</groupId>
				<artifactId>tomcat-embed-jasper</artifactId>
				<version>${tomcat.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-test</artifactId>
				<version>${springboot.version}</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.mybatis.spring.boot</groupId>
				<artifactId>mybatis-spring-boot-starter</artifactId>
				<version>${mybatis.version}</version>
			</dependency>
			<!-- 标签库 -->
			<dependency>
				<groupId>taglibs</groupId>
				<artifactId>standard</artifactId>
				<version>1.1.2</version>
			</dependency>
			<!-- jstl -->
			<dependency>
				<groupId>org.glassfish.web</groupId>
				<artifactId>jstl-impl</artifactId>
				<version>1.2</version>
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>commons-dbcp</groupId>
				<artifactId>commons-dbcp</artifactId>
				<version>1.3</version>
			</dependency>
			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>${mysqlConnector.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
		</dependency>
		<!-- jstl -->
		<dependency>
			<groupId>org.glassfish.web</groupId>
			<artifactId>jstl-impl</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>taglibs</groupId>
			<artifactId>standard</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
	</dependencies>
	<build />
</project>

第二步,拷贝项目,注意mapper映射的xml文件放到resource中!!!!


第三步:编辑application.yml,引入数据源,mybatis配置,以及jsp视图控制

server:
  port: 8080

spring:
    datasource:
        name: test
        url: jdbc:mysql://127.0.0.1:3306/csgl
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
        max-active: 20
        max-wait: 60000
        min-idle: 1
    mvc:
        view:
            suffix: .jsp
            prefix: /WEB-INF/jsp/
mybatis:
    #类型别名,实体类位置
    type-aliases-package: edu.hrbeu.po
    #映射文件位置
    mapper-locations: classpath:edu/hrbeu/mapper/*.xml

接下来便是修改代码了,先将mapper.xml中的报名进行修改,在对dao层的接口进行修改。在每个dao层的接口上加上注解:


再对service层进行修改,在serviceimpl中对dao层的调用有两种方式:

1.直接调用mapper接口:

package edu.hrbeu.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import edu.hrbeu.dao.CustomerMapper;
import edu.hrbeu.po.Customer;
import edu.hrbeu.service.CustomerService;


@Service("CustomerService")
public class CustomerServiceImpl implements CustomerService {
	@Autowired
	private CustomerMapper customerMapper;
	@Override
	public Customer selectByPrimaryKey(String phone) {
		// TODO Auto-generated method stub
		return customerMapper.selectByPrimaryKey(phone);
	}
	.......

}

2.还有一种就是我们熟悉的sqlsessiontemplate

package edu.hrbeu.service.impl;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import edu.hrbeu.dao.GoodsMapper;
import edu.hrbeu.po.Goods;
import edu.hrbeu.service.GoodsService;

@Service("GoodsService")
public class GoodsServiceImpl implements GoodsService{

	@Autowired
	private SqlSessionTemplate sqlSession;
	@Override
	public int deleteByPrimaryKey(Integer id) {
		// TODO Auto-generated method stub
		return sqlSession.getMapper(GoodsMapper.class).deleteByPrimaryKey(id);
	}

	......

}

修改完成之后将我们的jsp页面拷贝到相应路径:


好了,现在加入我们的启动类:

package edu.hrbeu.app;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@ComponentScan(basePackages = "edu.hrbeu.*")//组件扫描器
@MapperScan(basePackages="edu.hrbeu.dao")//映射扫描器
@EnableAutoConfiguration
public class App {
	public static void main(String[] args) {
		SpringApplication.run(App.class, args); 
	}
}

大体修改完毕,现在正片开始!!!bug即将登场!!!

1.启动时遇到:

java.lang.NoSuchMethodError: org.apache.tomcat.JarScanner.scan(Ljavax/servlet/ServletContext;Ljava/lang/ClassLoader;Lorg/apache/tomcat/JarScannerCallback;Ljava/util/Set;)V
	at org.apache.jasper.compiler.TldLocationsCache.init(TldLocationsCache.java:245) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.TldLocationsCache.getLocation(TldLocationsCache.java:205) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.JspCompilationContext.getTldLocation(JspCompilationContext.java:607) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:409) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:475) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1427) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.Parser.parse(Parser.java:138) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.ParserController.parse(ParserController.java:102) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:373) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) ~[tomcat-embed-jasper-7.0.47.jar:7.0.47]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) [tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-embed-websocket-8.5.29.jar:8.5.29]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.29.jar:8.5.29]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728) [tomcat-embed-core-8.5.29.jar:8.5.29]
	... ...

出现这个问题是因为我们的依赖产生了矛盾,也就是说项目所需要的tomcat-embed-core版本为8.5.29,而你引入的版本低,达不到要求,所以出现异常。只要我们修改一下版本就行。

2.访问请求时遇到:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): edu.hrbeu.dao.LoginMapper.selectByPrimaryKey
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:225) ~[mybatis-3.4.5.jar:3.4.5]
	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) ~[mybatis-3.4.5.jar:3.4.5]
	at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.5.jar:3.4.5]
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.5.jar:3.4.5]
	at com.sun.proxy.$Proxy68.selectByPrimaryKey(Unknown Source) ~[na:na]
	at edu.hrbeu.service.impl.LoginServiceImpl.selectByPrimaryKey(LoginServiceImpl.java:18) ~[classes/:na]
	at edu.hrbeu.control.LoginController.Login(LoginController.java:29) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_141]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_141]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_141]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_141]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	... ...

出现这种问题有两种情况:

    1. dao层中的mapper映射接口上没有加@Mapper注解

    2.mapper-location的路径不对,或者xml文件中的属性映射的类和映射文件相关的路径不对

3.启动时遇到

Consider defining a bean of type 'edu.hrbeu.dao.CustomerMapper' in your configuration.

  原因:启动类没有加映射扫描。

4.启动时遇到

Consider defining a bean of type 'edu.hrbeu.dao.CustomerMapper' in your configuration

原因:type-aliases-package别名写错了。。。。

5.访问请求时又遇到:

Type interface com.mybatis.mapper.UserMapper is not known to the MapperRegistry

原因:mapper扫描的包路径配置错误,,,,,

---------------------------------------补更------------------------------------------------

6.直接跳转jsp报404错误

原因:springMVC的视图控制器对所有请求进行了拦截,由于没有配置web.xml文件,所以对“*.jsp”进行统一拦截。

package edu.hrbeu.control;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class JspController {
        //对“*-jsp”进行同意拦截,之后再返回到相应的*.jsp界面
	@RequestMapping(value="/{name}-jsp")
	public String jsp(@PathVariable String name){
		return name;
	}
}

猜你喜欢

转载自blog.csdn.net/yinweicheng/article/details/80916960
今日推荐