前言
jsp已经很久之前的东西了,但是很多现在的新项目对接老系统,有时候不得不通过jsp来传输数据,这里记录一下,我在新项目中整合jsp和引用外部jar遇到的问题和解决办法。
很多时候你在开发工具中(比如ide)中很正常,一打jar包单独运行就会出问题。
我这边新项目使用jeecg框架,也是普通的springboot项目。
访问jsp的问题
IDE中可以访问,打jar无法访问jsp页面。
解决办法:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 版本一定要是这个,否则还是404 -->
<version>1.4.2.RELEASE</version>
</plugin>
</plugins>
<resources>
<!-- 打包时将jsp文件拷贝到META-INF目录下,解决jsp jar包下404问题 -->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到 -->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
前后端一直有这个错误 Path with "WEB-INF" or "META-INF": [WEB-INF/jsp/page.jsp]
。
解决办法:加入下方三个依赖。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat的支持-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
jsp中无法解析java类
我这里的原因很简单,是因为打jar包的时候没有把外部引用的包打进jar包里。
这样会一直报两个错误:
Jsp出现xxxx cannot be resolved to a type
Only a type can be imported. xxx res
项目结构如下:
pom中引用
即使这样,依然无法将lib中的包打入jar中,而且必须保证在这个文件夹中能找到外部jar。
这里虽然有,但是没有用。
解决办法:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 版本一定要是这个,否则还是404 -->
<version>1.4.2.RELEASE</version>
<configuration>
<!-- 保证引用的外部包被打进jar中 -->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
至此,所有问题得以解决。
完整配置
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- tomcat的支持-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 版本一定要是这个,否则还是404 -->
<version>1.4.2.RELEASE</version>
<configuration>
<!-- 保证引用的外部包被打进jar中 -->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
<resources>
<!-- 打包时将jsp文件拷贝到META-INF目录下 -->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到 -->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>