maven org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter

使用maven将项目部署到tomcat容器,启动的时候报如下错误:

 

解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题

http://blog.csdn.net/z69183787/article/details/19911935

[java] view plain copy

  1. 严重: Exception starting filter charsetFilter  
  2. java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter  
  3.     at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)  
  4.     at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)  
  5.     at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)  
  6.     at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)  
  7.     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)  
  8.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  
  9.     at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)  
  10.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  
  11.     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)  
  12.     at org.apache.catalina.startup.Embedded.start(Embedded.java:825)  
  13.     at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)  
  14.     at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)  
  15.     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)  
  16.     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)  
  17.     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)  
  18.     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)  
  19.     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)  
  20.     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)  
  21.     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)  
  22.     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)  
  23.     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:355)  
  24.     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)  
  25.     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)  
  26.     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:216)  
  27.     at org.apache.maven.cli.MavenCli.main(MavenCli.java:160)  
  28.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  29.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
  30.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  31.     at java.lang.reflect.Method.invoke(Method.java:483)  
  32.     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)  
  33.     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)  
  34.     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)  
  35.     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)  
  36.   
  37. 五月 29, 2015 11:01:46 上午 org.apache.catalina.core.StandardContext filterStart  
  38. 严重: Exception starting filter springSecurityFilterChain  
  39. java.lang.ClassCastException: org.springframework.web.filter.DelegatingFilterProxy cannot be cast to javax.servlet.Filter  
  40.     at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)  
  41.     at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)  
  42.     at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)  
  43.     at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)  
  44.     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)  
  45.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  
  46.     at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)  
  47.     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)  
  48.     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)  
  49.     at org.apache.catalina.startup.Embedded.start(Embedded.java:825)  
  50.     at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)  
  51.     at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)  
  52.     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)  
  53.     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)  
  54.     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)  
  55.     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)  
  56.     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)  
  57.     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)  
  58.     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)  
  59.     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)  
  60.     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:355)  
  61.     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)  
  62.     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)  
  63.     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:216)  
  64.     at org.apache.maven.cli.MavenCli.main(MavenCli.java:160)  
  65.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  66.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
  67.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  68.     at java.lang.reflect.Method.invoke(Method.java:483)  
  69.     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)  
  70.     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)  
  71.     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)  
  72.     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)  

 

 

pom.xml文件部分配置如下:

[java] view plain copy

  1. <pre class="java" name="code"><dependencies>  
  2.         <dependency>  
  3.             <groupId>jstl</groupId>  
  4.             <artifactId>jstl</artifactId>  
  5.             <version>1.2</version>  
  6.         </dependency>  
  7.         <dependency>  
  8.             <groupId>javax.servlet</groupId>  
  9.             <artifactId>servlet-api</artifactId>  
  10.             <version>2.5</version>  
  11.             <strong><scope>provided</scope><!-- 此处已经改过,试过还是不行 --></strong>  
  12.         </dependency>  
  13.         <!-- aspectj dependency -->  
  14.         <dependency>  
  15.             <groupId>org.aspectj</groupId>  
  16.             <artifactId>aspectjrt</artifactId>  
  17.             <version>1.6.11</version>  
  18.         </dependency>  
  19.         <dependency>  
  20.             <groupId>org.aspectj</groupId>  
  21.             <artifactId>aspectjweaver</artifactId>  
  22.             <version>1.6.11</version>  
  23.         </dependency>  
  24.         <!-- Data Source -->  
  25.         <dependency>  
  26.             <groupId>org.apache.commons</groupId>  
  27.             <artifactId>commons-dbcp2</artifactId>  
  28.             <version>2.0</version>  
  29.         </dependency>  
  30.         <dependency>  
  31.             <groupId>commons-pool</groupId>  
  32.             <artifactId>commons-pool</artifactId>  
  33.             <version>1.5.7</version>  
  34.             <scope>runtime</scope>  
  35.         </dependency>  
  36.         <!-- javax  -->  
  37.         <dependency>  
  38.             <groupId>javax</groupId>  
  39.             <artifactId>javaee-api</artifactId>  
  40.             <version>7.0</version>  
  41.             <scope>provided</scope> <!-- 问题出在这里 -->  
  42.         </dependency>  
  43.     </dependencies>  

 

 

 

 

 


web.xml文件部分配置如下:

[html] view plain copy

  1. <servlet>  
  2.     <servlet-name>springMVC</servlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.     <load-on-startup>2</load-on-startup>   
  5. </servlet>  

[html] view plain copy

  1. <!-- Configure Charset -->  
  2. <filter>  
  3.     <filter-name>charsetFilter</filter-name>  
  4.       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  5.       <init-param>  
  6.          <param-name>encoding</param-name>  
  7.          <param-value>UTF-8</param-value>  
  8.       </init-param>  
  9.       <init-param>  
  10.            <param-name>forceEncoding</param-name>  
  11.            <param-value>true</param-value>  
  12.      </init-param>   
  13.  </filter>  


纠结了一天,网上说是jar包冲突:

“tomcat 启动后先将tomcat/lib目录下的jar包全部读入内存,如果webapps目录里的应用程序中WEB-INF/lib目录下有相同的包,将无法加载,

不同版本的包之间也会造成类似问题。

解决这个问题的方法就是对于servlet-ap.jar 使用 <scope>标签,编译的时候用到servlet-api和jsp-api,但在打包的时候不用这两个依赖

如下”

 

[html] view plain copy

  1. <dependency>  
  2.      <groupId>javax.servlet</groupId>  
  3.      <artifactId>servlet-api</artifactId>  
  4.      <version>2.4</version>  
  5.      <scope>provided</scope>  
  6. </dependency>  

 

 


后来在网上看到一篇文章(http://stackoverflow.com/questions/15715864/opensessioninviewfilter-cannot-be-cast-to-javax-servlet-filter),终于找到问题。

 

如下测试代码,能告诉你class文件是从哪个jar包中加载的

[java] view plain copy

  1. @Test  
  2. public void get(){  
  3.     URL url = Filter.class.getProtectionDomain().getCodeSource().getLocation();  
  4.     System.out.println("path:"+url.getPath()+"  name:"+url.getFile());  

import java.net.URL;

import javax.servlet.Filter;

import org.junit.Test;

public class d {
    @Test
    public void testget(){  
        URL url = Filter.class.getProtectionDomain().getCodeSource().getLocation();  
        System.out.println("path:"+url.getPath()+"  name:"+url.getFile()); 
    }

}
 

 

  1. //输出结果:path:/C:/Users/User/.m2/repository/javax/javaee-api/7.0/javaee-api-7.0.jar  name:/C:/Users/User/.m2/repository/javax/javaee-api/7.0/javaee-api-7.0.jar  

 

我们实际项目中用到了javaee的api,javaee-api-7.0.jar文件中也有Filter,所以 在引用 javaee-api 依赖的时候,pom.xml文件中对应的加上“<scope>provided</scope>”就可以了

 

(说明:

测试的时候,需要将pom.xml文件中

[html] view plain copy

  1. <!--   

[html] view plain copy

  1. <dependency>  
  2.     <groupId>javax.servlet</groupId>  
  3.     <artifactId>servlet-api</artifactId>  
  4.     <version>2.5</version>  
  5.     <scope>provided</scope>  
  6. </dependency>  

[html] view plain copy

  1. -->  

转载于:https://my.oschina.net/ldm95/blog/886791

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值