1、SpringBoot虽然支持JSP,但是官方不建议使用
在《Spring官方文档》中对于JSP的支持有这么一段描述:
使用翻译软件上述内容:
JSP局限性
当运行使用嵌入式servlet容器(并打包为可执行档案)的Spring Boot应用程序时,JSP支持存在一些限制。
- 对于Jetty和Tomcat,如果使用war包装,它应该可以工作。 与java -jar一起启动时,可执行的war将起作用,并且还将可部署到任何标准容器中。 使用可执行jar时,不支持JSP。
- Undertow不支持JSP。
- 创建定制的error.jsp页面不会覆盖默认视图以进行错误处理。 应改用自定义错误页面。
有一个JSP实例,因此您可以了解如何进行设置。
SpringBoot是内嵌Web容器的,推荐打成 jar包不是 war包。如果想使用JSP也可以,自建WEB-INF\web.xml 然后像往常一样使用JSP。打成war包使用外部容器即可,这就相当于失去了一些SpringBoot的特性了。
2、SpringBoot项目中使用JSP的步骤
下面将通过一个示例来介绍如何在SpringBoot项目中使用JSP,首先创建SpringBoot项目。
2.1 pom.xml文件的配置
使用Maven进行项目的构建,pom.xml文件的配置如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 添加Servlet依赖模块 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- 添加JSTL标签库依赖模块 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--添加Tomcat依赖模块.-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- 使用JSP引擎,SpringBoot内置Tomcat没有此依赖 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
2.2 构建webapp目录
在与同级java和resources目录下,创建webapp目录,然后在webapp目录下再创建WEB-INF目录等,目录结构如下图:
2.3 创建web.xml配置文件
在WEB-INF目录下,创建web.xml配置文件,配置信息如下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
</web-app>
2.4 编写application.properties配置文件
在application.properties配置文件中,添加如下配置信息:
#Spring boot视图配置
spring.mvc.view.prefix=/WEB-INF/page/
spring.mvc.view.suffix=.jsp
2.5 创建Controller控制器
在源代码目录下,创建controller目录(控制器成),并创建IndexController(首页控制器类),代码如下:
package com.pjb.jspdemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
/**
* 首页控制器
* @author pan_junbiao
**/
@Controller
public class IndexController
{
/**
* 首页
*/
@RequestMapping("/index")
public String index(HttpServletRequest request)
{
//将用户信息保存到Request对象中
request.setAttribute("name","pan_junbiao的博客");
request.setAttribute("blog","");
request.setAttribute("remark","您好,欢迎访问 pan_junbiao的博客");
//返回首页
return "index";
}
}
2.6 创建JSP页面
在webapp\WEB-INF\目录下,创建page目录(用于存放JSP页面),并在page目录下创建index.jsp首先,页面代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>首页</title>
<meta name="author" content="pan_junbiao的博客">
</head>
<body>
<h3>使用JSP表达式:</h3>
用户姓名:<%= request.getAttribute("name") %><br/>
博客地址:<%= request.getAttribute("blog") %><br/>
备注信息:<%= request.getAttribute("remark") %><br/>
<h3>使用EL表达式语言:</h3>
用户姓名:${requestScope.name}<br/>
博客地址:${requestScope.blog}<br/>
备注信息:${requestScope.remark}<br/>
<h3>使用JSTL标签库:</h3>
用户姓名:<c:out value="${requestScope.name}" /><br/>
博客地址:<c:out value="${requestScope.blog}" /><br/>
备注信息:<c:out value="${requestScope.remark}" /><br/>
</body>
</html>
2.7 运行测试
启动SpringBoot,在浏览器中输入地址:http://127.0.0.1:8080/index
执行结果:
3、解决IDEA中无法新建JSP文件的问题
选择菜单:File → Project Structure。