SpringBoot整合JSP页面,java -jar方式启动
为什么还选择使用jsp?
这是一篇在idea中整合的,eclipse中没试,但应该差不多。官方不推荐使用jsp作为页面,而是推荐使用模板thymeleaf作为页面展示。但是目前来说,很多项目的页面还是用的jsp.而且很多现成的项目用的jsp页面,扒过来就能用,当然如果时间允许的情况,还是不建议大家使用jsp,而是采用官方推荐的模板。
整合jsp的坑
正常情况下包含jsp的页面是无法用jar的运行的,因为jsp默认是在webapp目录下,可是打包成jar是没有webapp这个目录结构的。
虽然网上有介绍说通过pom.xml配置,把WEB-INF目录复制到META-INF/resources下面。我试了一下还是访问不了,最后放弃了。谁有兴趣可以继续尝试,毕竟war也可以通过java -jar命令来启动。
具体原因说是什么路径的原因,本人也没有去调试,可以参考以下博客:
https://juejin.im/post/5ad21eb5f265da23945feb62
https://segmentfault.com/a/1190000009785247
整合过程
该过程使用的是SpringBoot1.5.6.RELEASE,如果有其他情况,可能是版本不一致。
源码下载:点此下载 支持 mvn clean spring-boot:run;
java -jar XXX.war
和 外部tomcat
三种方式启动,外部tomcat访问时注意带上项目名。
第一步:
在src/main/下创建web资源文件夹webapp,webapp 和 java, resources属于同级目录。
第二步:
在webapp下创建WEB-INF文件夹。并在WEB-INF下创建views文件夹。
第三步:pom 添加依赖
<!--jsp页面使用jstl标签-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--用于编译jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
第四步:application.properties添加属性
#配置tomcat
server.port=9090
server.servlet-path=/
#jsp 支持
spring.mvc.view.suffix=.jsp
spring.mvc.view.prefix=/WEB-INF/views/
#关闭默认模板引擎
spring.thymeleaf.cache=false
spring.thymeleaf.enabled=false
#配置日志文件
logging.config=classpath:config/logback-spring.xml
#配置jdbc数据源
jdbc.ds.driverClassName=com.mysql.jdbc.Driver
jdbc.ds.url=jdbc:mysql://127.0.0.1:3306/ruubypayoauthcenter?useUnicode=true&characterEncoding=UTF-8
jdbc.ds.username=root
jdbc.ds.password=123456
第五步:编写一个Controller用来跳转页面
@Controller
@RequestMapping("/testjsp")
public class TestController {
@RequestMapping("/index")
public String testJsp(){
return "index";
}
}
第六步:在/WEB-INF/views/下编辑index.jsp
这里为了测试,对静态资源的访问,特意加了一张图片试一下 ,index.jsp内容如下:
<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<img src="${pageContext.request.contextPath}/images/heihei.png"/>
</body>
</html>
第七步:在reources下添加一个 static文件夹,放入一张图片
注意:不建议在/WEB-INF/下创建static文件夹,和整合Thymeleaf一样,静态资源放到resources/static
路径下
第八步:配置静态资源的映射
在启动类所在类的同级目录以及它的子目录下,添加以下类
@Configuration
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
}
第七步,第八步参考该篇博客:Spring Boot配置静态资源访问,整合Thymeleaf模板
第九步:启动spring boot项目
注意:这里不能直接运行启动类的main方法,使用 mvn clean spring-boot:run命令启动,原因也是路径的获取不一样,参考文章开头介绍的两篇博客文章,在 idea 中具体启动如下:
访问http://localhost:9090/testjsp/index
本人亲测,使用mvn clean spring-boot:run;
和 java -jar XXX.war
都可以访问jsp。也可以访问到静态资源。
外部tomcat启动tomcat
上面的方式启动,也没办法使用启动类启动 使用mvn的debug又很麻烦,调试不方便,还不如使用外部tomcat,反正感觉是非常的不爽,最后还是选择了使用外部的tomcat启动
①pom.xml添加以下属性
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!--用于编译jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
注意:这两个依赖的jar 都是provided级别的, 对于编译和测试classpath有效,但在运行时候无效。依赖外部tomcat这些包都有,避免jar包冲突
②将启动类改为如下:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
本人亲测使用以下三种方式都可以启动:
mvn clean spring-boot:run;
java -jar XXX.war
外部tomcat
上一篇: Django数据库查询优化(一)
下一篇: 复合类型之指针