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

发布了62 篇原创文章 · 获赞 4 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_20282955/article/details/104193941