接下来我将为你详细讲解 “详解SpringBoot集成jsp(附源码)+遇到的坑”的完整攻略,并且提供两条示例。
一、前言
SpringBoot的主要目标是简化Spring应用程序的开发以及部署。在实际开发中,我们常常需要集成jsp,但是SpringBoot默认情况下是不支持jsp的,需要我们进行特殊的配置,下面将详细讲解SpringBoot集成jsp的步骤。
二、SpringBoot集成jsp的基本步骤
1. 添加spring-boot-starter-web依赖
在pom.xml中添加 spring-boot-starter-web 依赖,如下所示。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 配置application.properties
在src/main/resources
目录下新建application.properties
文件,添加如下配置。
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
3. 创建Controller
创建一个Controller类,用于处理请求。
@Controller
public class HomeController {
@RequestMapping("/home")
public String home(Model model) {
model.addAttribute("message", "欢迎访问Spring Boot JSP页面");
return "home";
}
}
在这个类上添加@Controller
注解,表明这是一个Controller组件,并添加一个访问/home
路径的@RequestMapping
注解。在home
方法中,将一个message信息赋值给Model,并返回"home"字符串,表示指向页面名称。
4. 创建jsp视图页面
在src/main/webapp/WEB-INF/jsp
目录下,新建一个home.jsp
页面,包含如下内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Spring Boot - 集成 JSP 示例</title>
</head>
<body>
<h1>${ message }</h1>
</body>
</html>
这个页面是一个简单的jsp页面,使用el表达式${ message }
显示从Controller中传递过来的值。
5. 启动应用程序
运行SpringBoot应用程序,启动成功后,访问http://localhost:8080/home即可看到页面效果。
三、遇到的坑
在实际开发中,如果直接按照上述步骤操作可能会遇到以下问题:
1. Tomcat Embed Jasper not supporting EL
运行应用后,可能出现以下异常信息:
2018-09-08 11:48:07.777 ERROR 7780 --- [ main] o.a.catalina.core.ContainerBase.[Tomcat].[localhost].[/spring-boot-jsp] : Servlet [dispatcherServlet] in web application [/spring-boot-jsp] threw load() exception
java.lang.IllegalStateException: Tomcat cannot use this engine, because there is no default servlet configured. Probably you have multiple Servlets mapping to "/", which is not supported. Try to use another base path for your application, o r add a default servlet mapping.
这是因为Tomcat内置Jasper引擎默认不支持EL表达式,需要在pom.xml
文件中添加如下依赖。
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
2. jsp页面找不到
页面在/WEB-INF/jsp/
目录下,但是如果没有进行特殊的配置,程序将无法找到页面。
要解决这个问题,需要在application.properties
文件中添加如下配置。
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
这将告诉SpringBoot查找jsp文件的路径和后缀。
四、示例
以下是两个简单的示例。
示例1:显示当前时间
创建一个Controller类,定义一个访问路径/time
,用于显示当前时间。
@Controller
public class TimeController {
@RequestMapping("/time")
public String time(Model model) {
model.addAttribute("now", new Date());
return "time";
}
}
在jsp视图页面中,使用el表达式${ now }
显示当前时间。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Spring Boot JSP页面示例 - 显示当前时间</title>
</head>
<body>
<h1>当前时间:</h1>
<h2>${ now }</h2>
</body>
</html>
示例2:计算器
创建一个Controller类,定义两个访问路径/add
和/calculate
,用于实现计算器功能。
@Controller
public class CalculatorController {
@GetMapping("/add")
public String add() {
return "add";
}
@PostMapping("/calculate")
public String calculate(Integer num1, Integer num2, Model model) {
Integer result = num1 + num2;
model.addAttribute("result", result);
return "calculate";
}
}
在add
页面中,添加一个表单用于输入两个数,使用post方式提交表单到/calculate
路径,将结果返回到calculate
页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Spring Boot - 集成 JSP示例 - 计算器</title>
</head>
<body>
<form method="post" action="/calculate">
<input type="number" name="num1" placeholder="1">
<input type="number" name="num2" placeholder="2">
<input type="submit" value="计算">
</form>
</body>
</html>
在calculate
页面中,使用el表达式${ result }
显示计算结果。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Spring Boot - 集成 JSP示例 - 计算器</title>
</head>
<body>
<h1>结果:</h1>
<h2>${ result }</h2>
</body>
</html>
五、总结
本文详细讲解了SpringBoot集成jsp的基本步骤,还提供了两个示例。在实际开发中,可能会遇到一些问题,本文也对这些问题进行了详细的介绍。希望本文能够帮助大家更好地理解SpringBoot集成jsp的过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SpringBoot集成jsp(附源码)+遇到的坑 - Python技术站