SpringBoot + JSP项目打包成jar后 JSP页面404的解决方案
问题背景
最近从同学那里拿来一个 Spring Boot + JSP
java -jar xxxxxx.jar
命令运行时,发现不能正常运行。
我们都知道Spring Boot 官方并不推荐使用JSP,Spring Boot 推荐模板引擎:
-
Thymeleaf
-
Freemarker
-
Mustache
-
Groovy Templates
因为在打包的jar包里面默认是没有JSP资源的,需要在pom文件中进行一些配置,在这里进行记录一下。
解决方案
因为项目中,使用了JSP作为页面模板,但是SpringBoot 对于JSP又不友好,所以需要添加以下jsp相关依赖:
<!-- 使用jsp引擎,springboot内置tomcat没有此依赖 -->
<!--内置tocat对jsp支持的依赖,用于编译jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- 添加jstl标签库依赖模块 -->
<!-- JavaServer Pages Standard Tag Library,JSP标准标签库 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
scope(作用域)值列表代表含义解释如下:
-
(默认值): 表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。
-
test
:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit。 -
runtime
:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段。 -
provided
:打包不会包含进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作。 -
system
以上依赖坐标是基本的,最关键的还是后面的build
需要指定jsp页面的位置,也就是通过插件把jsp页面也打包进jar。
首先添加如下依赖坐标:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
然后配置插件和指定资源文件的位置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.2.RELEASE</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<fork>true</fork>
<addResources>true</addResources>
<mainClass>com.aaa.DemoJspApplication</mainClass><!--主类的路径-->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 指定资源文件的位置,否则maven打包的时候不会jsp页面打包进jar -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/webapps</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
</resources>
</build>
经过以上操作,然后使用Maven项目构建工具进行打包即可。注意:在打包之前可以先进行清除操作。
Linux后台运行Jar
方法一:
$ nohup java -jar test.jar &
//nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
//当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中
//除非另外指定了输出文件。
方法二:
$ nohup java -jar test.jar >temp.txt &
//这种方法会把日志文件输入到你指定的文件中,没有则会自动创建
列出所有后台执行的作业:
$ jobs
//那么就会列出所有后台执行的作业,并且每个作业前面都有个编号。
//如果想将某个作业调回前台控制,只需要 fg + 编号即可。
$ fg 2
查看某端口占用的线程的pid:
netstat -nlp |grep :8080
微信关注
阅读剩余
版权声明:
作者:理想
链接:https://www.imyjs.cn/archives/1149
文章版权归作者所有,未经允许请勿转载。
THE END