我有一个由Maven管理的简单WAR项目。我有src/main/java/*
下的servlet代码和src/main/webapp
下的所有静态内容(HTML,图像等)。我可以在我们的staging JBoss服务器上部署生成的WAR并且它可以工作,但是重新部署的往返非常缓慢。我希望能够在嵌入式Tomcat上本地测试更改,但我遇到了问题。
servlet映射在src/main/resources/web.xml
中设置 - 我认为这是正确的;相关部分看起来像
<servlet>
<servlet-name>myServ</servlet-name>
<servlet-class>my.pkg.MyServ</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServ</servlet-name>
<url-pattern>/ms</url-pattern>
</servlet-mapping>
Maven告诉我它正在localhost:8080/myprojectname
运行,当我去那里时,我可以看到静态内容。但是,我尝试了localhost:8080/myprojectname/ms
以及``localhost:8080 / ms` - 前者给了我一个404,后者给了我一个0字节的响应。
简而言之:我的活动内容在哪里?我在控制台上什么都看不到。 Maven看起来像是target/tomcat/logs
,但那是空的。 target/tomcat/webapps
也是空的,当我运行mvn tomcat:run -X
时,我得到了很多调试输出,包括对我所有JAR依赖项的引用,classesDir
属性指向target/classes
(这是正确的),但没有提到我设置的URL模式的任何地方,也没有提到要作为处理程序调用的Servlet类的名称。我觉得我应该告诉Maven或Tomcat如何找到web.xml,或者以另一种方式指定URL映射....万一你不知道,我是新手:D < / p>
ETA:我的设置看起来很像this guy,但我们的问题似乎有所不同。
答案 0 :(得分:2)
比我想象的更简单:虽然POM设置为使用src/main/resources/web.xml
,但这不是“正确”的地方。将它移动到src/main/webapp/META-INF
会使servlet显示出来 - 当然,这导致了项目设置中的另外十几个错误,但这是另一天的故事。