本篇文章主要講述SpringBoot整合Jsp以及SpringBoot整合Thymeleaf,實現一個簡單的用戶增刪改查示例工程。事先說明,有三個項目,兩個是單獨整合的,一個是將它們整合在一塊兒的。如需其中一個,只需看相應部分的介紹便可。若需工程源代碼,能夠直接跳到底部,經過連接下載工程代碼。css
環境要求 JDK: 1.7或以上 SQL: MySqlhtml
這裏咱們須要在mysql中創建一張用戶表,用於存儲用戶的信息。 數據庫腳本以下:前端
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`name` varchar(10) DEFAULT NULL COMMENT '姓名',
`age` int(2) DEFAULT NULL COMMENT '年齡',
`password` varchar(24) NOT NULL COMMENT '密碼',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8
複製代碼
新建好表以後,咱們再來建立工程。 咱們的這個工程是經過maven建立一個普通的web工程。 建立好工程以後,咱們須要下載相應的jar包,而後再來進行相關的開發。 這些jar包咱們在pom.xml文件中添加springBoot和Jsp相關的jar便可。 相關的註釋以及寫在其中了,這裏就不在過多講述了。 Maven依賴以下:java
<dependencies>
<!-- Spring Boot Web 依賴 核心 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot 熱部署 class文件以後會自動重啓 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot Test 依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Spring Boot Mybatis 依賴 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--fastjson 相關jar -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson}</version>
</dependency>
<!--JSP 依賴 -->
<!-- servlet依賴. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- tomcat的支持.-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
複製代碼
相關的Jar包下載完畢以後,咱們再來確認項目的工程結構。 首先是後臺相關包說明:mysql
src/main/java
com.pancm.web - Controller 層
com.pancm.dao - 數據操做層 DAO
com.pancm.pojo- 實體類
com.pancm.service - 業務邏輯層
Application - 應用啓動類
src/main/resources
application.properties - 應用配置文件,應用啓動會自動讀取配置
複製代碼
前端的相關文件存放說明:git
src/main/webapp
WEB-INF - web.xml web相關的核心配置
WEB-INF/jsp - JSP文件的存放路徑
複製代碼
總體工程結構圖: github
工程結構確認以後,咱們再來添加相應的配置。 只需在application.properties 添加相應的配置便可。 數據源的配置和以前的差很少,須要注意的是Jsp的相關配置。 因爲springBoot默認的支持的模版是Thymeleaf,因此這裏咱們須要進行相應的更改。web
配置以下:spring
## 編碼
banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
## 端口
server.port=8088
## 數據源
spring.datasource.url=jdbc:mysql://localhost:3306/springBoot?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
## JSP配置
# 頁面默認前綴
spring.mvc.view.prefix=/WEB-INF/jsp/
# 響應頁面默認後綴
spring.mvc.view.suffix=.jsp
複製代碼
其實這裏的代碼和以前文章講述的基本一致,惟一有點區別的是,這裏我是用JPA實現對數據庫進行操做的(也就是順便說下JPA這個框架的使用)。sql
首先是實體類,這裏由於用了JPA,因此和以前的有點不一樣,添加了一些註解。 Entity:表示這是個實體類。 Table:該實體類映射的數據表名。 Column:指定該字段的屬性,nullable 表示是否非空,unique 表示是不是惟一。
那麼實體類的代碼以下:
@Entity
@Table(name = "t_user")
public class User {
/** 編號 */
@Id
@GeneratedValue
private Long id;
/** 姓名 */
@Column(nullable = false, unique = true)
private String name;
/** 密碼*/
@Column(nullable = false)
private String password;
/** 年齡 */
@Column(nullable = false)
private Integer age;
//getter和setter略
}
複製代碼
因爲用的是JPA,dao層這塊只需繼承JpaRepository該類便可,須要指定實體類和主鍵類型。 dao層代碼以下:
@Mapper
public interface UserDao extends JpaRepository<User, Long>{
}
複製代碼
業務層這塊和以前同樣調用便可,雖然用的是JPA,可是方法也是很簡單的,新增和修改就用save,刪除就是delete,findOne就是經過ID查找,findAll就是查詢全部等等。
services代碼以下:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public boolean addUser(User user) {
boolean flag=false;
try{
userDao.save(user);
flag=true;
}catch(Exception e){
System.out.println("新增失敗!");
e.printStackTrace();
}
return flag;
}
@Override
public boolean updateUser(User user) {
boolean flag=false;
try{
userDao.save(user);
flag=true;
}catch(Exception e){
System.out.println("修改失敗!");
e.printStackTrace();
}
return flag;
}
@Override
public boolean deleteUser(Long id) {
boolean flag=false;
try{
userDao.delete(id);
flag=true;
}catch(Exception e){
System.out.println("刪除失敗!");
e.printStackTrace();
}
return flag;
}
@Override
public User findUserById(Long id) {
return userDao.findOne(id);
}
@Override
public List<User> findAll() {
return userDao.findAll();
}
}
複製代碼
到了控制層這塊,這裏提供仍是提供接口給Jsp進行調用,不過這裏類的註解就不能用以前的RestController這個註解,這個註解以json的格式返回數據,可是咱們有時返回的時候須要跳轉界面,因此應該使用Controller這個註解。若是想在某個方法中返回的數據格式是json的話,在該方法上加上ResponseBody這個註解便可。
控制層代碼以下:
@Controller
public class UserRestController {
@Autowired
private UserService userService;
@RequestMapping("/hello")
public String hello() {
return "hello";
}
@RequestMapping("/")
public String index() {
return "redirect:/list";
}
@RequestMapping("/list")
public String list(Model model) {
System.out.println("查詢全部");
List<User> users=userService.findAll();
model.addAttribute("users", users);
return "user/list";
}
@RequestMapping("/toAdd")
public String toAdd() {
return "user/userAdd";
}
@RequestMapping("/add")
public String add(User user) {
userService.addUser(user);
return "redirect:/list";
}
@RequestMapping("/toEdit")
public String toEdit(Model model,Long id) {
User user=userService.findUserById(id);
model.addAttribute("user", user);
return "user/userEdit";
}
@RequestMapping("/edit")
public String edit(User user) {
userService.updateUser(user);
return "redirect:/list";
}
@RequestMapping("/toDelete")
public String delete(Long id) {
userService.deleteUser(id);
return "redirect:/list";
}
}
複製代碼
後端代碼介紹就到這裏了,至於前端JSP的代碼就不在多說了(主要緣由是界面寫得太醜了...),咱們直接啓動項目,查看效果。 啓動項目,在瀏覽器上輸入:http://localhost:8088/list 主界面:
添加一條數據以後的界面:
其它的修改和刪除也能實現,這裏就在一一不貼圖了。 springBoot整合 Jsp到這就結束了。
該工程參考:http://www.ityouknow.com/springboot/2017/09/23/spring-boot-jpa-thymeleaf-curd.html
Thymeleaf是個模板引擎,能夠用於Web與非Web應用,它能夠XML/XHTML/HTML5, JavaScript, CSS ,甚至文本文件。
Thymeleaf這塊我的使用不太熟練,這個也不是本篇文章主要講述的內容,詳細的能夠查看官方文檔。 https://www.thymeleaf.org/documentation.html
基本和上面的SringBoot整合Jsp差很少,這裏就再也不贅述了。
因爲SpringBoot默認的模版引擎就是Thymeleaf,因此Maven 依賴這塊只須要在原先的springBoot項目添加Thymeleaf的依賴就行。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
複製代碼
application.properties 配置這塊,能夠和以前的項目基本一致,須要注意的也只有spring.thymeleaf.cache配置,爲false的時候是關閉Thymeleaf的緩存,更改界面以後會自動重啓而後生效。
SringBoot整合Thymeleaf和SringBoot整合Jsp有個比較大的不一樣是,Thymeleaf的資源文件是放在src/main/resources目錄下,Jsp的是放在src/main/webapp目錄下。其中resources目錄下的的static目錄用於放置靜態內容,好比css、js、jpg圖片等。templates目錄用於放置項目使用的頁面模板,也就是**.html**文件。
它的項目結構圖以下:
代碼基本和SringBoot整合Jsp一致,這裏就不在贅述了。
啓動該項目,在瀏覽器輸入:http://localhost:8085 主界面:
修改用戶數據以後的:
其它的功能也是能夠實現的,這裏就再也不過多貼圖了。 springBoot整合 Thymeleaf到這就結束了。
注:這個是後來新加的一個項目。 SpringBoot單獨整合Jsp和Thymeleaf都還好,沒出現什麼問題。可是在一塊兒以後,就有了改變,由於SpringBoot默認的模板引擎是Thymeleaf,加上JSP以後,JSP的模板引擎並不會生效。可是若是想用JSP模板,此時的禁用到Thymeleaf,雖然能夠經過多態更改配置實現,可是感受太過麻煩了。因而研究了一下,找到了共存的方法。
和前面來兩個項目區別以下:
2.以前Thymeleaf相關文件是放在 src/main/resources 目錄下,這裏移動到WEB-INF目錄下,和以前的jsp文件夾同級。
3.增長一個控制層,嚴格區分訪問Jsp和Thymeleaf的路徑。訪問Jsp的路徑前綴加上jsp,訪問Thymeleaf前綴加上templates。
那麼新增的配置代碼以下:
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setSuffix(".jsp");
resolver.setViewNames("jsp/*");
resolver.setOrder(2);
return resolver;
}
@Bean
public ITemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setTemplateMode("HTML5");
templateResolver.setPrefix("/WEB-INF/");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("utf-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
public ThymeleafViewResolver viewResolverThymeLeaf() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("utf-8");
viewResolver.setViewNames(new String[]{"thymeleaf/*"});
viewResolver.setOrder(1);
return viewResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
}
}
複製代碼
項目的結構圖以下:
在瀏覽器輸入:http://localhost:8089/list 查看Thymeleaf模板的界面
在瀏覽器輸入:http://localhost:8089/list2 查看JSP模板的界面
能夠看到已經成功整合了
關於SpringBoot整合Jsp和Thymeleaf 到這裏就結束了。 SpringBoot整合Jsp的項目工程地址: https://github.com/xuwujing/springBoot-study/tree/master/springboot-jsp-jpa SpringBoot整合Thymeleaf的項目工程地址: https://github.com/xuwujing/springBoot-study/tree/master/springboot-thymeleaf SpringBoot整合Jsp和Thymeleaf的項目工程地址: https://github.com/xuwujing/springBoot-study/tree/master/springboot-jsp-thymeleaf
原創不易,若是感受不錯,但願給個推薦!您的支持是我寫做的最大動力! 版權聲明: 做者:虛無境 博客園出處:http://www.cnblogs.com/xuwujing CSDN出處:http://blog.csdn.net/qazwsxpcm 我的博客出處:http://www.panchengming.com