javaweb项目转springboot问题记录总结
1、无法访问.jsp的文件
首先要明白的是springboot官方整合的模板文件类型是thymeleaf,而恰巧的是thymeleaf它并不兼容jsp文件,所以如果只是导入thymeleaf的依赖包的话,那项目就会在templates目录下找文件,但它不会找jsp文件,只会找html文件。
有两种解决办法:
1、重写模板文件,按thymeleaf语法重新写所有的jsp模板文件,这肯定需要一定的时间来学习thymeleaf的语法,甚至如果你不会jsp,还要学学jsp怎么写的。这种方法赶时间的话肯定不可取,但他也有优点,就是方便容易,不用配配置什么,就是耗时间而已。
2、springboot整合jsp项目,这种就是不用thymeleaf模板的方法。需要一定的配置,网上有教程,但是很多都有坑,也是耗时间,但耗时没那么多,毕竟不用重写文件嘛。
接下来说下springboot怎么整合jsp文件:
网上教程参考:
参考1
参考2
步骤一: 导依赖包。这一步挺重要的,网上很多教程要导入的包都是大同小异,但就是这个异导致了很多问题,目前我发现能成功解决需要导入的包有:
<!-- tomcat 依赖包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope>provided</scope>-->
</dependency>
<!-- servlet 依赖包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<!--<scope>provided</scope>-->
</dependency>
<!-- JSTL (JSP standard Tag Library) JSP 标准标签库 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
步骤二: 配置路径前缀后缀。在项目的配置文件(application.yml/application.properties)中配置如下:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
步骤三: 建立jsp的目录。在main目录下建立如下目录:
步骤四: 建立测试的controller。
@Controller
public class thisController {
@RequestMapping("index")
public String index(){
return "index";
}
}
配置完成后访问localhost:8001/index即可,把源项目的jsp导入也可以访问了。
细节点:
如果这时候出现“Error resolving template [index], template might not exist or might not be accessible by any of the configured Template Resolvers”这个错误,很有可能是你安装了thymeleaf的依赖,去掉即可。
2、报错:“Access denied for user ''@'localhost' (using password: NO)”
开始没理解什么意思,以为只是没有登录网站的小问题,但后来发现,不管跳转什么链接都会有这个报错,就让我很疑惑,后来发现是数据库连接这边的问题。
首先说明这个问题的原因是因为你配置文件中关于数据库连接配置没有成功配置好,导致项目根本没连上数据库,所以网页获取数据库资源没获取到,说是没有登录数据库成功的意思。
造成这个问题的原因有2种:
- url、username、password打错了,建议检查一下是不是打错了。
- 这可能是真正的原因:配置项名字格式写错了,如果你的配置文件时如下配置,那么你就是犯了这种错误。
#数据库
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.datausername=root
spring.datasource.url=jdbc:mysql://localhost:3306/shop?characterEncoding=utf8&serverTimezone=GMT
spring.datasource.data-password=
正确写法应该是:
#数据库
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.url=jdbc:mysql://localhost:3306/shop?characterEncoding=utf8&serverTimezone=GMT
spring.datasource.password=
大同小异,以后注意一点即可。
3、报错 “Invalid bound statement (not found):”
问题解析: 个人理解这个这个问题是因为dao层与mapper没有连在一起而造成的。在ssm框架中这部分应该是由mybatis来完成的,而转到了springboot时,mybatis是不需要配置什么的,所以本人做的时候并没有注意这方面,只是加了@MapperScan扫描mapper而已。按网上的参考,报这个错的本质原因可能有5种:
- 检查xml文件的namespace是否正确
- Mapper.java的方法在Mapper.xml中没有,然后执行Mapper的方法会报此错误
- xxxMapper.java的方法返回值是List,而select元素没有正确配置ResultMap,或者只配置ResultType
- 如果你确认没有以上问题,请任意修改下对应的xml文件,比如删除一个空行,保存.问题解决
- 看下mapper的XML配置路径是否正确
如果以上的都不行,还有一种可能就是Mapper接口文件和xxxMapper.xml文件名字改成一样看下是否可成功。