欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot整合JSP页面,java -jar方式启动

程序员文章站 2024-03-07 16:08:09
...

为什么还选择使用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

相关标签: Spring家族