springboot(16)-jsp

2020-11-19 15:17:48 浏览数 (1)

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或者使用目前比较流行的前后端分离方案。

0 人点赞