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/shopcharacterEncoding=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/shopcharacterEncoding=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文件名字改成一樣看下是否可成功。