. lang。NoSuchMethodError:javax.servlet.ServletContext.getContextPath()Ljava / lang / String;

时间:2021-10-17 19:39:32

I have a problem with egovframework of Korea when I have deployed file war to Tomcat after I restarted Tomcat, it showed the error like below :

我在重启Tomcat后将file war部署到Tomcat时,遇到了韩国的egovframework的问题,它显示了如下错误:

2011-12-23 09:16:01,101 ERROR [org.springframework.web.servlet.DispatcherServlet] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'imageRenderer' defined in ServletContext resource [/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
        at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
        at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
        at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
        at javax.servlet.GenericServlet.init(GenericServlet.java:212)
        at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
        at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:791)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:660)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
....................................................

I used :

我使用:

[root@localhost bin]# java -version

java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.10) (rhel-1.23.1.9.10.el5_7-i386)
OpenJDK Client VM (build 19.0-b09, mixed mode)

Here is file WEB-INF/web.xml

这是文件web - inf / web . xml

<display-name>spring security</display-name>
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.mdo</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>HTMLTagFilter</filter-name>
        <filter-class>egovframework.com.cmm.filter.HTMLTagFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HTMLTagFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

        <!-- 0. 로그인 정책 컴포넌트용 필터 -->
        <!--
    <filter>
        <filter-name>LoginPolicyFilter</filter-name>
        <filter-class>egovframework.com.uat.uap.filter.EgovLoginPolicyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginPolicyFilter</filter-name>
        <url-pattern>/uat/uia/actionLogin.do</url-pattern>
    </filter-mapping>
     -->
        <!-- Restoration from HTMLTagFilter's action (certification login) -->

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:egovframework/spring/com/context-*.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config/egovframework/springmvc/egov-com-*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

        <!-- 1. Spring Security 필터 설정-->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
    </listener>

        <!-- 2. Spring Security 로그아웃 설정을 위한 필터 설정 -->
        <filter>
        <filter-name>EgovSpringSecurityLogoutFilter</filter-name>
        <filter-class>egovframework.com.sec.security.filter.EgovSpringSecurityLogoutFilter</filter-class>
        </filter>
        <filter-mapping>
        <filter-name>EgovSpringSecurityLogoutFilter</filter-name>
        <url-pattern>/uat/uia/actionLogout.do</url-pattern>
        </filter-mapping>

        <!-- 2. Spring Security 로그인 설정을 위한 필터 설정 -->
        <filter>
        <filter-name>EgovSpringSecurityLoginFilter</filter-name>
        <filter-class>egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter</filter-class>
                <init-param>
                        <description>로그인 실패시 반활 될 URL설정</description>
                        <param-name>loginURL</param-name>
                        <param-value>/uat/uia/egovLoginUsr.do</param-value>
                </init-param>
        </filter>
        <filter-mapping>
        <filter-name>EgovSpringSecurityLoginFilter</filter-name>
        <url-pattern>*.do</url-pattern>
        </filter-mapping>

        <!-- 3. EgovSSO 로그아웃 설정을 위한 필터 설정 -->
    <!--
    <filter>
        <filter-name>EgovSSOLogoutFilter</filter-name>
        <filter-class>egovframework.com.uat.sso.filter.EgovSSOLogoutFilter</filter-class>
                <init-param>
                        <description>SSO Global Logout 처리후 반환되는 페이지 설정</description>
                        <param-name>returnURL</param-name>
                        <param-value>/j_spring_security_logout</param-value>
                </init-param>
        </filter>
        <filter-mapping>
        <filter-name>EgovSSOLogoutFilter</filter-name>
        <url-pattern>/uat/uia/actionLogout.do</url-pattern>
        </filter-mapping>
        -->

        <!-- 3. EgovSSO 로그인 설정을 위한 필터 설정 -->
    <!--
    <filter>
        <filter-name>EgovSSOLoginFilter</filter-name>
        <filter-class>egovframework.com.uat.sso.filter.EgovSSOLoginFilter</filter-class>
        </filter>
        <filter-mapping>
        <filter-name>EgovSSOLoginFilter</filter-name>
        <url-pattern>*.do</url-pattern>
        </filter-mapping>
        -->


    <!-- AjaxTags configuration START-->
    <servlet>
        <servlet-name>ajaxServlet</servlet-name>
        <servlet-class>net.sourceforge.ajaxtags.servlets.SourceLoader</servlet-class>
        <init-param>
            <param-name>prefix</param-name>
            <param-value>/ajaxtags</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ajaxServlet</servlet-name>
        <url-pattern>/ajaxtags/js/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ajaxServlet</servlet-name>
        <url-pattern>/ajaxtags/img/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ajaxServlet</servlet-name>
        <url-pattern>/ajaxtags/css/*</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>egovDevIndex.jsp</welcome-file>
    </welcome-file-list>
    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>

    <session-config>
        <session-timeout>600</session-timeout>
    </session-config>

    <error-page>
      <error-code>404</error-code>
      <location>/code404.jsp</location>
    </error-page>
    <error-page>
      <error-code>500</error-code>
      <location>/code500.jsp</location>
    </error-page>

</web-app>

Here is /WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml

这是/ web - inf / config / egovframework / springmvc / egov-com-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
        수정일                 수정자                          수정내용
  =========     =======    =================================================
  2011.09.07    서준식                  로그인 체크 인터셉터 추가
  2011.09.29    이기하                  에러페이지 경로수정
-->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
                xmlns:aop="http://www.springframework.org/schema/aop"
                xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                                                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
                                                        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

        <!-- The controllers are autodetected POJOs labeled with the @Controller annotation. -->
        <context:component-scan base-package="egovframework, example">
                <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
                <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
                <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
        </context:component-scan>


        <!-- For Pagination Tag -->
        <bean id="imageRenderer" class="egovframework.com.cmm.ImagePaginationRenderer"/>

        <bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
                <property name="rendererType">
                        <map>
                                <entry key="image" value-ref="imageRenderer"/>
                        </map>
                </property>
        </bean>

        <!--
                - The form-based controllers within this application provide @RequestMapping
                - annotations at the type level for path mapping URLs and @RequestMapping
                - at the method level for request type mappings (e.g., GET and POST).
                - In contrast, ClinicController - which is not form-based - provides
                - @RequestMapping only at the method level for path mapping URLs.
                -
                - DefaultAnnotationHandlerMapping is driven by these annotations and is
                - enabled by default with Java 5+.
        -->

        <!--
                - This bean processes annotated handler methods, applying Application-specific PropertyEditors
                - for request parameter binding. It overrides the default AnnotationMethodHandlerAdapter.
        -->
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
                <property name="webBindingInitializer">
                        <bean class="egovframework.com.cmm.web.EgovBindingInitializer"/>
                </property>
                <property name="customArgumentResolvers">
                        <list>
                                <bean class="egovframework.rte.ptl.mvc.bind.CommandMapArgumentResolver"/>
                        </list>
                </property>
        </bean>

        <!-- 로그인 체크가 필요한 URL과 로그인 여부를 체크해줄 인터셉터를 등록한다. -->
        <!--
        <bean id="selectAnnotaionMapper" class="egovframework.rte.ptl.mvc.handler.SimpleUrlAnnotationHandlerMapping" p:order="1">
                <property name="interceptors">
                        <list>
                                <ref local="authenticInterceptor" />
                        </list>
                </property>
                -->
                <!-- 로그인 체크가 필요한 URL 리스트  -->
                <!--
                <property name="urls">
                        <set>
                                <value>/**/*.do</value>
                        </set>
                </property>
        </bean>
        -->

        <!-- 로그인 체크 인터셉터 -->
        <!-- <bean id="authenticInterceptor" class="egovframework.com.cmm.interceptor.AuthenticInterceptor"> -->
        <!-- 인증 체크가 필요 없는 URL 리스트  -->
        <!--
                <property name="permittedURL">
                        <set>
                                <value>/uat/uia/[a-zA-Z]+\.do</value>
                                <value>/EgovLeft.do</value>
                                <value>/uat/uia/actionLogin.do</value>
                        </set>
                </property>
        </bean>
        -->

        <!--
                - This bean resolves specific types of exceptions to corresponding logical
                - view names for error views. The default behaviour of DispatcherServlet
                - is to propagate all exceptions to the servlet container: this will happen
                - here with all other types of exceptions.
        -->
        <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
                <property name="defaultErrorView" value="egovframework/com/cmm/error/egovError"/>
                <property name="exceptionMappings">
                        <props>
                                <prop key="org.springframework.dao.DataAccessException">egovframework/com/cmm/error/dataAccessFailure</prop>
                                <prop key="org.springframework.transaction.TransactionException">egovframework/com/cmm/error/dataAccessFailure</prop>
                                <prop key="egovframework.rte.fdl.cmmn.exception.EgovBizException">egovframework/com/cmm/error/egovBizException</prop>
                                <prop key="org.springframework.web.HttpSessionRequiredException">egovframework/com/uat/uia/EgovLoginUsr</prop>
                        </props>
                </property>
        </bean>

        <!--
                - This bean configures the 'prefix' and 'suffix' properties of
                - InternalResourceViewResolver, which resolves logical view names
                - returned by Controllers. For example, a logical view name of "vets"
                - will be mapped to "/WEB-INF/jsp/vets.jsp".
        -->
        <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
                  p:viewClass="org.springframework.web.servlet.view.JstlView"
                  p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

        <!--
                - Message source for this context, loaded from localized "messages_xx" files.
                - Could also reside in the root application context, as it is generic,
                - but is currently just used within Application's web tier.
        -->
        <!-- <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="messages/message-common"/> -->
</beans>

Please help me, thanks

请帮助我,谢谢

1 个解决方案

#1


68  

java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;

. lang。NoSuchMethodError:javax.servlet.ServletContext.getContextPath()Ljava / lang / String;

That method was added in Servlet 2.5.

该方法是在Servlet 2.5中添加的。

So this problem can have at least 3 causes:

所以这个问题至少有3个原因:

  1. The servlet container does not support Servlet 2.5.
  2. servlet容器不支持servlet 2.5。
  3. The web.xml is not declared conform Servlet 2.5 or newer.
  4. 网络。xml没有声明为符合Servlet 2.5或更新。
  5. The webapp's runtime classpath is littered with servlet container specific JAR files of a different servlet container make/version which does not support Servlet 2.5.
  6. webapp的运行时类路径中到处都是不同servlet容器的特定JAR文件,不同的servlet容器make/version不支持servlet 2.5。

To solve it,

要解决它,

  1. Make sure that your servlet container supports at least Servlet 2.5. That are at least Tomcat 6, Glassfish 2, JBoss AS 4.1, etcetera. Tomcat 5.5 for example supports at highest Servlet 2.4. If you can't upgrade Tomcat, then you'd need to downgrade Spring to a Servlet 2.4 compatible version.
  2. 确保您的servlet容器至少支持servlet 2.5。至少有Tomcat 6、Glassfish 2、JBoss 4.1等等。例如,Tomcat 5.5支持最高的Servlet 2.4。如果不能升级Tomcat,则需要将Spring降级为Servlet 2.4兼容的版本。
  3. Make sure that the root declaration of web.xml complies Servlet 2.5 (or newer, at least the highest whatever your target runtime supports). For an example, see also somewhere halfway our servlets wiki page.
  4. 确保web的根声明。xml遵从Servlet 2.5(或更新的,无论您的目标运行时支持什么,至少是最高的)。例如,在我们的servlets wiki页面的某个地方也可以看到。
  5. Make sure that you don't have any servlet container specific libraries like servlet-api.jar or j2ee.jar in /WEB-INF/lib or even worse, the JRE/lib or JRE/lib/ext. They do not belong there. This is a pretty common beginner's mistake in an attempt to circumvent compilation errors in an IDE, see also How do I import the javax.servlet API in my Eclipse project?.
  6. 确保您没有任何servlet容器特定的库,比如servlet-api。jar或j2ee。jar in /WEB-INF/lib甚至更糟,JRE/lib或JRE/lib/ext。它们不属于那里。在试图绕过IDE中的编译错误时,这是一个非常常见的初学者错误,请参见如何导入javax。我的Eclipse项目中的servlet API ?

#1


68  

java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;

. lang。NoSuchMethodError:javax.servlet.ServletContext.getContextPath()Ljava / lang / String;

That method was added in Servlet 2.5.

该方法是在Servlet 2.5中添加的。

So this problem can have at least 3 causes:

所以这个问题至少有3个原因:

  1. The servlet container does not support Servlet 2.5.
  2. servlet容器不支持servlet 2.5。
  3. The web.xml is not declared conform Servlet 2.5 or newer.
  4. 网络。xml没有声明为符合Servlet 2.5或更新。
  5. The webapp's runtime classpath is littered with servlet container specific JAR files of a different servlet container make/version which does not support Servlet 2.5.
  6. webapp的运行时类路径中到处都是不同servlet容器的特定JAR文件,不同的servlet容器make/version不支持servlet 2.5。

To solve it,

要解决它,

  1. Make sure that your servlet container supports at least Servlet 2.5. That are at least Tomcat 6, Glassfish 2, JBoss AS 4.1, etcetera. Tomcat 5.5 for example supports at highest Servlet 2.4. If you can't upgrade Tomcat, then you'd need to downgrade Spring to a Servlet 2.4 compatible version.
  2. 确保您的servlet容器至少支持servlet 2.5。至少有Tomcat 6、Glassfish 2、JBoss 4.1等等。例如,Tomcat 5.5支持最高的Servlet 2.4。如果不能升级Tomcat,则需要将Spring降级为Servlet 2.4兼容的版本。
  3. Make sure that the root declaration of web.xml complies Servlet 2.5 (or newer, at least the highest whatever your target runtime supports). For an example, see also somewhere halfway our servlets wiki page.
  4. 确保web的根声明。xml遵从Servlet 2.5(或更新的,无论您的目标运行时支持什么,至少是最高的)。例如,在我们的servlets wiki页面的某个地方也可以看到。
  5. Make sure that you don't have any servlet container specific libraries like servlet-api.jar or j2ee.jar in /WEB-INF/lib or even worse, the JRE/lib or JRE/lib/ext. They do not belong there. This is a pretty common beginner's mistake in an attempt to circumvent compilation errors in an IDE, see also How do I import the javax.servlet API in my Eclipse project?.
  6. 确保您没有任何servlet容器特定的库,比如servlet-api。jar或j2ee。jar in /WEB-INF/lib甚至更糟,JRE/lib或JRE/lib/ext。它们不属于那里。在试图绕过IDE中的编译错误时,这是一个非常常见的初学者错误,请参见如何导入javax。我的Eclipse项目中的servlet API ?