您好,欢迎访问一九零五行业门户网

SpringBoot如何实现整合Jsp和Thymeleaf?

本篇文章给大家带来的内容是关于springboot如何实现整合jsp和thymeleaf ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
前言本篇文章主要讲述springboot整合jsp以及springboot整合thymeleaf,实现一个简单的用户增删改查示例工程。事先说明,有三个项目,两个是单独整合的,一个是将它们整合在一起的。如需其中一个,只需看相应部分的介绍即可。若需工程源代码,可以直接跳到底部,通过链接下载工程代码。
springboot整合jsp开发准备环境要求
jdk: 1.7或以上
sql: mysql
这里我们需要在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依赖如下:
<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包下载完毕之后,我们再来确认项目的工程结构。
首先是后台相关包说明:
src/main/javacom.pancm.web - controller 层com.pancm.dao - 数据操作层 daocom.pancm.pojo- 实体类com.pancm.service - 业务逻辑层application - 应用启动类src/main/resourcesapplication.properties - 应用配置文件,应用启动会自动读取配置
前端的相关文件存放说明:
src/main/webappweb-inf - web.xml web相关的核心配置web-inf/jsp - jsp文件的存放路径
整体工程结构图:
工程结构确认之后,我们再来添加相应的配置。
只需在application.properties 添加相应的配置即可。
数据源的配置和之前的差不多,需要注意的是jsp的相关配置。
由于springboot默认的支持的模版是thymeleaf,所以这里我们需要进行相应的更改。
配置如下:
## 编码banner.charset=utf-8server.tomcat.uri-encoding=utf-8spring.http.encoding.charset=utf-8spring.http.encoding.enabled=truespring.http.encoding.force=truespring.messages.encoding=utf-8## 端口server.port=8088## 数据源spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useunicode=true&characterencoding=utf8spring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.driver## jsp配置# 页面默认前缀spring.mvc.view.prefix=/web-inf/jsp/# 响应页面默认后缀spring.mvc.view.suffix=.jsp
代码编写其实这里的代码和之前文章讲述的基本一致,唯一有点区别的是,这里我是用jpa实现对数据库进行操作的(也就是顺便说下jpa这个框架的使用)。
首先是实体类,这里因为用了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层代码如下:
@mapperpublic interface userdao extends jparepository<user, long>{ }
业务层这块和之前一样调用即可,虽然用的是jpa,但是方法也是很简单的,新增和修改就用save,删除就是delete,findone就是通过id查找,findall就是查询所有等等。
services代码如下:
@servicepublic 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这个注解即可。
控制层代码如下:
@controllerpublic 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到这就结束了。
sringboot整合thymeleafthymeleaf介绍thymeleaf是个模板引擎,可以用于web与非web应用,它可以xml/xhtml/html5, javascript, css ,甚至文本文件。
thymeleaf的使用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单独整合jsp和thymeleaf都还好,没出现什么问题。但是在一起之后,就有了改变,因为springboot默认的模板引擎是thymeleaf,加上jsp之后,jsp的模板引擎并不会生效。但是如果想用jsp模板,此时的禁用到thymeleaf,虽然可以通过多态更改配置实现,但是感觉太过麻烦了。于是研究了一下,找到了共存的方法。
和前面来两个项目区别如下:
之前的jsp和thymeleaf配置都是在application.properties
文件中,这里我将它们的配置改到代码中获取。
2.之前thymeleaf相关文件是放在 src/main/resources 目录下,这里移动到web-inf目录下,和之前的jsp文件夹同级。
3.增加一个控制层,严格区分访问jsp和thymeleaf的路径。访问jsp的路径前缀加上jsp,访问thymeleaf前缀加上templates。
那么新增的配置代码如下:
@configuration@enablewebmvc@componentscanpublic 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
相关推荐:
springboot整合netty并使用protobuf进行数据传输的实现过程
springboot如何进行简单的打包部署?
以上就是springboot如何实现整合jsp和thymeleaf?的详细内容。
其它类似信息

推荐信息