內置Jetty配置JSP支持過程中的常見報錯


1. 常見報錯及解決

內置jetty,jsp支持報錯,基本都是jetty、jsp相關依賴配置問題。下面是幾個常見報錯的例子:

1.1 JSP support not configured

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標簽解析

解決: 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

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
    JasperException NoClassDefFoundError: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;

NestedServletException

NestedServletException: Handler dispatch failed nested exception is java.lang.NoSuchMethodError: org.apache.jasper.runtime.TagHandlerPool

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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM