maven工程部署到tomcat服务器过程中遇到的问题总结

本文总结了在使用maven部署到tomcat服务器时遇到的两个主要问题。首先,配置本地tomcat服务器时出现HTTP 403错误,尝试修改pom.xml和tomcat-users.xml配置未果,最终通过使用`tomcat6:run`命令避免了该错误。其次,部署到内部服务器后,由于jar包冲突导致ClassCastException,解决方法是通过设置servlet-api.jar的依赖范围或调整项目构建路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、部署到自己配置的tomcat服务器上遇到的错误

我按照网上的步骤,在myeclipse中配置了maven、tomcat,还整理了下配置的过程。但是发现会出现各种错误,主要是
  Server returned HTTP response code: 403 Cannot invoke Tomcat manager: unknown protocol:plugin found for prefix 'tomcat7' in the current project and in the plugin groups
  网上一直在说:产生该问题有可能因为两个原因,具体参见解决办法
 解决办法:

  1)如果使用的是Tomcat 7,需要修改pom.xml中部署的url地址,将<url>http://localhost:8080/manager</url>改<url>http://localhost:8080/manager/text</url>
  2)给tomcat用户权限分配上,需要同时具备manager-gui和manager-script权限,我在遇到该问题时,就是忘了分配manager-script权限。
 正确的conf/tomcat-users.xml配置应为:
      <tomcat-users>
          <role rolename="manager-gui"/>
          <role rolename="manager-script"/>
          <user username="admin” password="admin" roles="manager-gui, manager-script"/>
    </tomcat-users>

但是我试了很多次都没用,还是报这个错误,并且是不是出来各种奇怪的错误,这个错误折腾了我一天。终于,我请教了同学,之前我部署的命令一直是 tomcat6:deploy,同学建议我用tomcat6:run,这两者的区别是前者部署到外部服务器,后者部署到myeclipse内部服务器上,后来我直接放弃了部署到外部服务器上,选择了部署到内部服务器上,上面那个错误终于没有出现了,还是部署到内部服务器上方便快捷。

2、 部署到内部服务器上后出现的错误 

java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter
在网上找了下原因,大概说的是我的servler-api.jar包冲突,原因解释如下:
使用maven生成web工程后,编译需要下servlet-api.jar和jsp-api.jar文件。
tomcat 启动后先将tomcat/lib目录下的jar包全部读入内存,如果webapps目录里的应用程序中WEB-INF/lib目录下有相同的包,将无法加载,
不同版本的包之间也会造成类似问题

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

<span style="font-family:Comic Sans MS;"> <strong><dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.4</version>
    <scope>provided</scope>
   </dependency></strong></span>
pom文件中的写法为: 

  

<span style="font-family:Comic Sans MS;"><strong><dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1-b02</version>
    <type>jar</type>
    <scope>provided</scope>
</dependency>
<dependency>  
    <groupId>javax.servlet.jsp</groupId>  
    <artifactId>jsp-api</artifactId>  
    <version>2.1</version>  
    <scope>provided</scope>  
</dependency></strong></span>
这种写法在使用mvn targe命令时有效的,但是在eclipse下run on server下,会把依赖的mavne dependencies这个library下面的全部jar都加载到tomcat的部署目录下面去。 
个人认为这是eclipse的maven插件的不兼容导致的。

解决这种冲突有两种 
1:把加载后的删掉 
2:把server runtime这个library加到build path下面去。 

原来真的是maven动态web项目jar包冲突的问题,不过我的不是servler-api.jar包冲突,而是我在pom.xml多写了一个  
 tomcat7-maven-plugin的dependency,所以造成了jar包冲突,终于一大堆的问题解决了,web工程终于可以部署到tomcat服务器上运行了,
 这些问题整整折磨了我两天。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值