原框架是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有冲突导致解决后,运行正常了