복붙노트

[HADOOP] JSP 서블릿 예외

HADOOP

JSP 서블릿 예외

아마도이 질문에 대한 비슷한 대답을 보았을 것입니다. 그러나 제 상황이 다르다고 느낍니다. 지금까지 잘 작동하는 봄 MVC 응용 프로그램을 개발 중입니다. 프로젝트 프로젝트에 hadoop API를 포함 시켰습니다. 이전에 작동했던 초기 대시 보드 페이지를 열려고 할 때이 예외가 발생하기 시작했습니다.

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>

일단 이것을 내 앱에 추가하면 더 이상 사용할 수 없으며 이러한 종속성이 없으면 자연스럽게 매우 원활하게 실행됩니다. 내가 여기서 무엇을 놓치고 있니?

해결법

  1. ==============================

    1.문제는 hadoop이 classpath에있는 "올바른"서블릿 API 앞에 오는 서블릿 API 버전을 포함하고 있다는 것입니다. Hadoop은 Jetty에 의존하고 있으며, Jetty는 서블릿 API를 포함하려고합니다.

    문제는 hadoop이 classpath에있는 "올바른"서블릿 API 앞에 오는 서블릿 API 버전을 포함하고 있다는 것입니다. Hadoop은 Jetty에 의존하고 있으며, Jetty는 서블릿 API를 포함하려고합니다.

    나는 매우 비슷한 설정, Spring MVC, Hadoop을 가진 프로젝트를 가지고있다. 나는 hadoop 의존성에 대해 다음과 같은 예외를 가지고있다. 이것은 당신의 hadoop 분포에 따라 약간 다를 수 있습니다. cloudera를 사용하고 있습니다. 사용중인 서블릿 컨테이너는 일반적으로 고유 한 javax.servlet 종속성을 제공하므로이 경우를 제외해야합니다. 아래의 구성 만 테스트했습니다.

               <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 -->
    
  2. ==============================

    2.나는 최근에 웹 애플리케이션에서 hadoop-core 1.2.1과 비슷한 경험을했다. 의존성 Paul Sanwald가 지적한 바에 따라 org.eclipse.jetty 종속성을 제외했습니다.

    나는 최근에 웹 애플리케이션에서 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>
    

    이 모든 것들이 제외되어야하는지는 분명하지 않지만, 불필요한 의존성이 생기지 않도록하고 싶습니다. JSP와 서블릿 라이브러리를 제공하는 Tomcat을 사용하고 있습니다. 부두 서블릿은 반드시 가야했습니다.

  3. from https://stackoverflow.com/questions/12423883/jsp-servlet-exception by cc-by-sa and MIT license