您的位置:首页 > 运维架构 > Tomcat

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

2015-01-10 22:32 483 查看

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服务器上运行了,

这些问题整整折磨了我两天。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐