1. 常見報錯及解決
內置jetty,jsp支持報錯,基本都是jetty、jsp相關依賴配置問題。下面是幾個常見報錯的例子:
1.1 JSP support not configured

解決: 檢查pom文件是否有相關依賴,如果沒有則添加。注意使用9.3.0.M1版本不行。使用release版本可以,如:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jsp</artifactId>
<version>9.2.26.v20180806</version>
</dependency>
注意jetty9.2以后使用apache-jsp
1.2 JSTL標簽解析
- PWC6188: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved
解決: taglib加上"_rt"
即
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
更新成:
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
更新taglib后,問題解決。
1.3 JSP編譯
- org.apache.jasper.JasperException: Unable to compile class for JSP
解決:添加WebXmlConfiguration、AnnotationConfiguration
Configuration.ClassList classlist = Configuration.ClassList.setServerDefault(server);
classlist.clear();
classlist.add("org.eclipse.jetty.webapp.WebXmlConfiguration");
classlist.add("org.eclipse.jetty.annotations.AnnotationConfiguration");
server.setHandler(getServletContextHandler());
1.4 JSP實現依賴
- NoClassDefFoundError: org/apache/jasper/runtime/JspSourceImports
解決:jetty9.2之前jsp實現是Glassfish,9.2之后為Apache,對應依賴jetty-jsp更新為apache-jsp。
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jsp</artifactId>
<version>9.4.10.v20180503</version>
</dependency>
如果jetty-jsp和apache-jsp依賴同時都添加了,則有以下報錯:
- org.apache.jasper.JasperException: javax.el.ELException: java.lang.IllegalAccessException
- org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: org.apache.jasper.runtime.TagHandlerPool.get(Ljava/lang/Class;)Ljavax/servlet/jsp/tagext/Tag;
1.5 EL表達式支持
- org.apache.jasper.JasperException: javax.servlet.ServletException: javax.el.ELException: Provider com.sun.el.ExpressionFactoryImpl not found
添加相關依賴即可:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>
備注:javax.el.javax.el-api javax.el-api-3.0.0.jar中無此ExpressionFactoryImpl實現。
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
2. 小結
注意相關版本依賴關系即可。pom相關配置:
<properties>
<jetty.version>9.4.10.v20180503</jetty.version>
</properties>
<!-- web容器- jetty -->
<!-- https://mvnrepository.com/artifact/org.eclipse.jetty.aggregate/jetty-all -->
<dependency>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-all</artifactId>
<version>${jetty.version}</version>
<type>pom</type>
</dependency>
<!-- jsp實現-->
<!-- https://mvnrepository.com/artifact/org.eclipse.jetty/apache-jsp -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>apache-jsp</artifactId>
<version>${jetty.version}</version>
</dependency>
<!--el表達式-->
<!-- https://mvnrepository.com/artifact/javax.el/el-api -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>el-impl</artifactId>
<version>2.2</version>
</dependency>