整合了jsp的springboot项目打包成jar问题的解决

原框架是springmvc+jsp的项目,后来突发奇想想整改为springboot项目,一开始整合为springboot并用jar形式发布,于是乎,总结了一下springboot整合jsp的方法:

首先创建springboot项目如下,然后点击next:

进入如下界面,java版本这里没法选择1.8暂时先这样宣,稍后再到pom中改,然后点击next

然后进入下面界面,至于spring boot版本暂时先这样选,稍后到pom中修改,其他的依赖页稍后加上,点击next:

进入下图界面,项目路径自定义即可,点击Finish

点击OK

点击New Window

进入File->Settings然后搜索maven,设置界面及设置如下,自己按照自己的maven安装配置即可,此处仅供参考:

点击左侧importing,进入如下界面,选中Import Maven projects automatically,方便自动导入maven项目:

然后点击OK,maven相关配置即配置好了
点击File->Project Structure,进入如下界面:

选择好相关配置后,点击左侧的Modules,进入如下界面配置好后

初始pom.xml文件如下,并将springboot版本改为2.5.2,将java版本改为1.8,刷新pom文件,自动下载依赖及插件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.myself</groupId>
    <artifactId>springboot-jsp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-jsp</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

将application.properties改为application.yml

并在此配置文件中添加如下配置

server:
  port: 9999
  servlet:
    context-path: /springbootjsp

创建Result.java类,用于返回接口访问的json结果,代码如下,此处进攻参考,可自行定义:
 

package com.myself.springbootjsp.framework.utils;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * ClassName:Result <br/>
 * Function: 返回结果对象. <br/>
 * Reason:   返回结果对象. <br/>
 * Date:     2024-2-22 上午10:15:19 <br/>
 *
 * @author dpp
 * @version 1.0.0
 * @since JDK 1.8
 */
@Data
public class Result<T> implements Serializable {
    /**
     * serialVersionUID:serialVersionUID.
     *
     * @since JDK 1.8
     */
    private static final long serialVersionUID = 1L;
    /**
     * MESSAGE_ALL_SHOW:成功失败都显示消息.
     *
     * @since JDK 1.8
     */
    public static final String MESSAGE_ALL_SHOW = "11";
    /**
     * MESSAGE_ONLY_SUCCESS_SHOW:只有成功的时候显示消息.
     *
     * @since JDK 1.8
     */
    public static final String MESSAGE_ONLY_SUCCESS_SHOW = "10";
    /**
     * MESSAGE_ONLY_ERROR_SHOW:只有失败的显示消息.
     *
     * @since JDK 1.8
     */
    public static final String MESSAGE_ONLY_ERROR_SHOW = "01";
    /**
     * MESSAGE_NOT_SHOW:成功失败都不显示.
     *
     * @since JDK 1.8
     */
    public static final String MESSAGE_NOT_SHOW = "00";
    /**
     * CODE_NO_LOGIN:状态编码 未登录.
     *
     * @since JDK 1.8
     */
    public static final String CODE_NO_LOGIN = "CODE_NO_LOGIN";
    /**
     * CODE_NO_LOGIN:状态编码 业务错误.
     *
     * @since JDK 1.8
     */
    public static final String CODE_BUSINESS_ERROR = "CODE_BUSINESS_ERROR";
    /**
     * CODE_NO_LOGIN:状态编码 系统错误.
     *
     * @since JDK 1.8
     */
    public static final String CODE_SYS_ERROR = "CODE_SYS_ERROR";
    /**
     * success:是否成功.
     *
     * @since JDK 1.8
     */
    private boolean success = true;
    /**
     * message:返回消息.
     *
     * @since JDK 1.8
     */
    private String message;
    /**
     * code:状态编码.
     *
     * @since JDK 1.8
     */
    private String code;
    /**
     * isShow:告诉客户端是否显示message消息,默认MESSAGE_ONLY_ERROR_SHOW.
     *
     * @since JDK 1.8
     */
    private String isShow = "01";
    /**
     * result:结果对象.
     *
     * @since JDK 1.8
     */
    private Map<String, T> result = new HashMap<>();

    /**
     * addResult:添加一个结果. <br/>
     * 添加一个结果.<br/>
     *
     * @param key   键
     * @param value 值
     * @author dpp
     * @since JDK 1.8
     */
    public void put(String key, T value) {
        result.put(key, value);
    }

    /**
     * remove:删除一个结果. <br/>
     * 删除一个结果.<br/>
     *
     * @param key void
     * @author dpp
     * @since JDK 1.8
     */
    public void remove(String key) {
        result.remove(key);
    }
}

创建TestController.java,代码如下,具体项目结构目录自定义即可:

package com.myself.springbootjsp.cs.common.controller;

import com.myself.springbootjsp.framework.utils.Result;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("test")
public class TestController {

    @RequestMapping("test")
    @ResponseBody
    public Result getTestParam() {
        return new Result<>();
    }
}

主类SpringbootJspApplication.java默认即可

点击idea左上角运行的如下按钮红框中的按钮,运行项目:

然后浏览器访问页面http://localhost:9999/springbootjsp/test/test接口,结果如下:

到这里springboot项目创建成功,接下来整合jsp
首先pom.xml新增如下依赖:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>
<!-- 添加jstl标签库依赖模块 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    </dependency>
    <!--添加tomcat依赖模块.-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
    <!-- 使用jsp引擎,springboot内置tomcat没有此依赖 -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>


由于传统的springmvc项目中jsp通常是放在src/main/webapp/WEB-INF下,因此现在main目录下创建webapp目录,并在该目录下创建assets(用于存放静态资源,例如css,img,js等),WEB-INF,并在WEB-INF下创建index.jsp文件

<%@ page language = "java" contentType = "text/html; charset=UTF-8"
         pageEncoding = "UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
<html>
<head>
    <title>hello jsp</title>
</head>
<body>
    ${message}
</body>

在TestController.java中增加如下访问index页面的代码,

@RequestMapping ( "/index" )
public String hello(ModelMap map ) {
    map .put( "message" , "this data is from the backing server" );
    return "index" ;
}

此时,如果重启项目,并访问http://localhost:9999/springbootjsp/test/index是访问不成功的,会报错,如下

要加上WebMvcConfig.java,代码如下:

package com.myself.springbootjsp.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    private static final String DEFAULT_JSP_PREFIX = "/WEB-INF/views/";

    private static final String JSP_SUFFIX = ".jsp";


    //静态资源处理
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/assets/**").addResourceLocations("/assets");
        registry.addResourceHandler("/res/**").addResourceLocations("/res/");
    }


    //视图解析器,这里使用了 InternalResourceViewResolver 类来解析 JSP 视图。设置了 JSTL 视图类(JstlView.class)、JSP 文件的前缀和后缀
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix(DEFAULT_JSP_PREFIX);
        viewResolver.setSuffix(JSP_SUFFIX);
        registry.viewResolver(viewResolver);
    }
}

再次访问页面,报404错误

打开idea的File->Project Structure,增加如下配置

还是没访问到 后来发现jsp的路径错误应该在WEB-INF下的views目录下而不是在WEB-INF下,修正如下,再次访问成功访问到

在assets下创建img文件夹,在网上随便搜了章png透明图片favicon.png放在此文件夹下供下面的jsp使用:

另外在WEB-INF/views下创建include目录并在其下添加两个嵌入工具jsp文件
global.jsp和head.jsp代码如下

<%--global.jsp--%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
  // 定义全局变量
  String path = request.getContextPath();
  String sysTitle = "test";
%>
<%-- head.jsp --%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/views/include/globel.jsp"%>
<head>
    <meta charset="utf-8" />
    <title><%=sysTitle %></title>

    <meta name="description" content="Dashboard" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="shortcut icon" href="<%=path%>/assets/img/favicon.png" type="image/x-icon">

    <!--Basic Styles-->
    <link id="bootstrap-rtl-link" rel="stylesheet" />

    <!--Beyond styles-->
    <link id="skin-link" rel="stylesheet" type="text/css" />

    <!--Skin Script: Place this script in head to load scripts for skins and rtl support-->
    <script>
	/**
	 * 全局变量
	 */
	var g = {
	        basePath:"<%=path%>"
	};
	</script>
</head>

并在index.jsp页面引入如下:

访问页面发现头部的图片没有正常显示,这是由于静态资源url没有映射处理的原因

于是在config目录下增加ServletConfig.java代码如下:

package com.myself.springbootjsp.config;

import org.apache.catalina.servlets.DefaultServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ServletConfig {

    @Bean
    public ServletRegistrationBean defaultServletBean() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new DefaultServlet());
        servletRegistrationBean.addUrlMappings("*.js", "*.css", "*.png", "*.gif", "*.jpg", "*.woff", "*.woff2", "*.eot",
                "*.svg", "*.ttf", "*.mp3", "*.swf");
        return servletRegistrationBean;
    }
}

再次访问图标成功显示如下:

打包jar运行如下:

在pom.xml所在目录下运行mvn clean package

到target目录下找到jar包

在此目录下打开cmd,然后运行java -jar springboot-jsp-0.0.1-SNAPSHOT.jar

访问浏览器http://localhost:9999/springbootjsp/test/index但是访问报404错误这是因为静态资源没有打包进去,在pom.xml添加以下配置:

<resources>
    <!-- 打包时将jsp文件拷贝到META-INF目录下 -->
    <resource>
        <!-- 指定resources插件处理哪个目录下的资源文件 -->
        <directory>src/main/webapp</directory>
        <!--注意此次必须要放在此目录下才能被访问到 -->
        <targetPath>META-INF/resources</targetPath>
        <includes>
            <include>**/**</include>
        </includes>
        <!-- 是否开启pom解析占位符,根据自己项目实际情况配置 -->
        <filtering>false</filtering>
    </resource>
    <resource>
        <!-- 由于默认会被上面的配置覆盖,所以要手动加上下面的配置 -->
        <directory>src/main/resources</directory>
        <!-- 默认是如下配置,因此此处可以省略 -->
        <includes>
            <include>**/**</include>
        </includes>
        <!-- 是否开启pom解析占位符 -->
        <filtering>false</filtering>
    </resource>
</resources>

重新打包运行,还是404错误,最后确定是应为打包插件版本的额问题,需要改变一下打包插件的版本,改为如下版本即可:
 

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>1.4.2.RELEASE</version>
        <!-- 注意如果main方法有多个的话 要指定主类 -->
        <configuration>
            <fork>true</fork>
            <mainClass>com.myself.springbootjsp.SpringbootJspApplication</mainClass>
        </configuration>
    </plugin>
</plugins>

再次运行成功如下:

异常处理:
运行之后发现,总是报异常,异常如下:
 

2024-02-21 17:06:46.689 [http-nio-9999-exec-1] ERROR o.a.c.c.C.[.[.[/omsrbac].[jsp] - Servlet.service() for servlet [jsp] threw exception java.lang.ClassNotFoundException: com.sun.el.ExpressionFactoryImpl at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.loadClass(TomcatEmbeddedWebappClassLoader.java:72) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1220) at javax.el.FactoryFinder.newInstance(FactoryFinder.java:87) at javax.el.FactoryFinder.find(FactoryFinder.java:197) at javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:197) at javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:168) at org.apache.jasper.compiler.PageInfo.<init>(PageInfo.java:80) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:120) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:391) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:367) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:351) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:385) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:171) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1401) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at com.eastcom.omsrbac.framework.filter.UriFilter.doFilter(UriFilter.java:60) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:750) 2024-02-21 17:06:46.715 [http-nio-9999-exec-1] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [/omsrbac] threw exception [Unable to compile class for JSP] with root cause java.lang.ClassNotFoundException: com.sun.el.ExpressionFactoryImpl at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.loadClass(TomcatEmbeddedWebappClassLoader.java:72) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1220) at javax.el.FactoryFinder.newInstance(FactoryFinder.java:87) at javax.el.FactoryFinder.find(FactoryFinder.java:197) at javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:197) at javax.el.ExpressionFactory.newInstance(ExpressionFactory.java:168) at org.apache.jasper.compiler.PageInfo.<init>(PageInfo.java:80) at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:120) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:391) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:367) at org.apache.jasper.compiler.Compiler.compile(Compiler.java:351) at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:385) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:171) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1401) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1145) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1084) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at com.eastcom.omsrbac.framework.filter.UriFilter.doFilter(UriFilter.java:60) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:750)

 解决办法为在pom.xml中添加如下依赖:
 

<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <version>3.0.0</version>
</dependency>

这可能是由于SpringBoot用的el解析包跟tomcat有冲突导致解决后,运行正常了

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值