前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot(16)-jsp

springboot(16)-jsp

作者头像
叔牙
发布2020-11-19 15:17:48
3480
发布2020-11-19 15:17:48
举报

springboot&jsp

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

springboot整合html模板引擎的时候,官方建议使用Thymeleaf和freemarker,已经放弃了对jsp的支持也不建议使用jsp,但是我们还是使用springboot整合jsp来讲述使用方法和中间遇到的一些坑。

一、目标

基于springboot2.x,整合jsp模板引擎,并展示用户的基本信息。

二、springboot整合jsp

1

引入依赖

springboot整合jsp除了引入基础依赖之外,还要引入javax.servlet-api和tomcat-embed-jasper。

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <!--用于编译jsp--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--<scope>provided</scope>--> </dependency>

springboot将引入所有必须的依赖并且注入所有必需的配置来使用jsp。

2

修改application.properties

要支持jsp,需要在application.properties中配置返回文件的路径以及类型。

spring.mvc.view.prefix=/WEB-INF/jsp spring.mvc.view.suffix=.jsp

springboot会去src/main/webapp/WEB-INF/jsp下寻找jsp文件。

3

编码实现

用户信息实体类:

@Setter @Getter @ToString public class User implements Serializable { private Long id; // 主键ID private String name; // 姓名 private Date createTime; private Integer sex; private Integer age; }

编写IndexController处理简单的用户信息查询请求:

@Controller @Slf4j public class IndexController { @GetMapping("/user/{id}") public String queryUser(@PathVariable("id") Long id, Model model) { User user = new User(); user.setId(id); user.setName("Typhoon"); user.setAge(28); user.setSex(1); model.addAttribute("user",user); return "/index"; } }

在src/main/webapp/WEB-INF/jsp目录下新建index.jsp文件:

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>jsp</title> </head> <body> <p> 你好 ${user.name}</p> <p> 年龄 ${user.age}</p> </body> </html>

编写应用启动类:

@SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }

4

启动应用&测试

使用Main启动应用,浏览器输入http://localhost:8080/user/1:

应用启动成功,但是发送请求出现404,服务端无法接收并处理请求。

使用mvn -U clean compile spring-boot:run命令启动应用,再次发起请求:

这种方式启动就能正常处理请求,为什么?在StackOverflow中搜索新的关键字,找到这个文章https://stackoverflow.com/questions/30237768/run-spring-boots-main-using-ide 里面有人遇到类似的问题"Seems like mvn spring-boot:run does some more magic that does not happen when running the main directly." 相关答案帖子里的1L,2L说的很详细了. IntelliJ IDEA没有将<scope>provided </scope>的依赖注入到类路径中,用main()方法启动的话就会出现上述问题,所以springboot整合jsp的时候建议使用mvn spring-boot:run启动。

总结

此篇幅中我们基于springboot2.x整合了jsp,并且在使用过程中遇到了一些问题,由于springboot官方不建议使用jsp作为模板引擎,所以其对jsp原生支持不太好,一些常见的问题也没有主动修复,所以springboot与jsp整合建议仅限于个人学习和知识扩展,真正的项目开发中建议使用Thymeleaf和freemarker替代jsp或者使用目前比较流行的前后端分离方案。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PersistentCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档