Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jsp servlet异常_Java_Jsp_Maven_Servlets_Hadoop - Fatal编程技术网

Java Jsp servlet异常

Java Jsp servlet异常,java,jsp,maven,servlets,hadoop,Java,Jsp,Maven,Servlets,Hadoop,对于这个问题,我可能已经看到了一些类似的答案,但我觉得我的情况有所不同。到目前为止,我正在开发一个spring MVC应用程序,它工作得非常好,也就是说,我在项目中包含了hadoop api,当我包含hadoop时,当我试图打开以前工作过的初始仪表板页面时,这个异常开始发生: java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ ServletCo

对于这个问题,我可能已经看到了一些类似的答案,但我觉得我的情况有所不同。到目前为止,我正在开发一个spring MVC应用程序,它工作得非常好,也就是说,我在项目中包含了hadoop api,当我包含hadoop时,当我试图打开以前工作过的初始仪表板页面时,这个异常开始发生:

java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ 
ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
 org.apache.jsp.ServerInfo_jsp._jspInit(ServerInfo_jsp.java:63)
 org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52)
 org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:158)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:9
以下是我的hadoop依赖项的外观:

<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>0.23.1-mr1-cdh4.0.0b2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-core</artifactId>
            <version>0.23.1-mr1-cdh4.0.0b2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

org.apache.hadoop
hadoop客户端
0.23.1-mr1-cdh4.0.0b2
org.apache.hadoop
hadoop内核
0.23.1-mr1-cdh4.0.0b2
org.mortbay.jetty
码头
javax.servlet
servlet api

一旦我把它添加到我的应用程序中,它就不再可用了,而且如果没有这些依赖项,事情自然会运行得非常顺利。我在这里遗漏了什么?

我认为您的问题是hadoop在类路径中包含了一个版本的servlet API,它位于“正确”的servlet API之前。Hadoop依赖于Jetty,Jetty将转而尝试包含ServletAPI

我有一个设置非常类似的项目,SpringMVC和Hadoop。我对hadoop依赖项有以下排除。请注意,这可能会因hadoop发行版的不同而略有不同,我使用的是cloudera。由于您正在使用的servlet容器通常会附带其自己的javax.servlet依赖项,因此您的排除需要捕获这种情况。我仅使用Jetty测试了以下配置:

           <dependency>     
              <groupId>org.apache.hadoop</groupId>
              <artifactId>hadoop-core</artifactId>
              <version>${hadoop.version}</version>
           <exclusions>

          <exclusion>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-util</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jsp-2.1</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jsp-api-2.1</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>servlet-api-2.1</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>tomcat</groupId>
                <artifactId>jasper-compiler</artifactId>
            </exclusion>
            <exclusion>
                <groupId>tomcat</groupId>
                <artifactId>jasper-runtime</artifactId>
            </exclusion>
            <!-- other exclusions snipped for brevity -->

org.apache.hadoop
hadoop内核
${hadoop.version}
org.mortbay.jetty
码头
org.mortbay.jetty
码头
org.mortbay.jetty
jsp-2.1
org.mortbay.jetty
jsp-api-2.1
org.mortbay.jetty
servlet-api-2.1
javax.servlet
servlet api
javax.servlet.jsp
jsp api
雄猫
贾斯珀编译器
雄猫
jasper运行时

我最近在我的web应用程序中使用hadoop core 1.2.1时也有过类似的经历。除了Paul Sanwald指出的依赖项之外,我还排除了一些org.eclipse.jetty依赖项:

            <exclusion>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-server</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-servlet</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-client</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-plus</artifactId>
            </exclusion>

org.eclipse.jetty
jetty服务器
org.eclipse.jetty
码头servlet
org.eclipse.jetty
码头客户机
org.eclipse.jetty
jetty plus
我并不完全清楚是否必须排除其中的每一个,但我想确保没有不必要的依赖项进入——我正在使用Tomcat,它提供JSP和servlet库jetty servlet肯定得走了。