我会事先道歉。我绝对不是Java / Eclipse / Tomcat专家。我喜欢环境,一旦工作,我就可以编写代码,但首先要设置好的东西......是的。这就是我在这里的原因。
所以我一直在尝试从Eclipse内部加载并在Tomcat中运行Servlet。网上有很多关于此的教程,但它们似乎都在某些时候崩溃了;我希望这些代码/技术会随着时间的推移而发生变化。在我当前的状态下,Tomcat将干净利落地启动。但是当我尝试通过URL实际访问我的Servlet时,我总是404.我想这里可能会发生一些事情。
也许我的Servlet实际上并没有被加载。我不知道怎么说这个。我了解到Tomcat有一个可能证明有用的管理器Servlet,但在我看来,当你在Eclipse中运行Tomcat时,它会复制很多Tomcat环境,并且不包括像管理器这样的Servlet。那是对的吗?如果是这样,我怎么知道我的Servlet是否正在加载?
也许我的Servlet加载并运行得很好,而且我的网址错误。我希望这是答案,因为它只是一个愚蠢的问题,来自一个以前没有做过很多/任何Servlet工作的人。根据这里提出的另一个问题,我将其添加到我的Servlet项目的web.xml中:
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>com.pattyanddave.edu.SimpleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping
当我这样做时,Tomcat无法启动,声称两个不同的servlet映射到该url-pattern。所以我认为Eclipse试图为我做这个,但我无法弄清楚它在哪里/如何做到这一点。为了解决这个问题,我将url-pattern更改为/ SimpleServlet2。然后Tomcat启动正常,但我还没有找到任何实际命中我的Servlet的URL。
也许是相关的,我注意到Eclipse为我创建的Servlet类包含一个注释,如:
@WebServlet("/SimpleServlet")
在类定义之前。我猜这是以某种方式导致重复绑定到url-pattern,但是如果我也将那个更改为SimpleServlet2,我在启动时没有得到重复的错误。所以我不知道该注释是否相关,或者模式如何与web.xml中的模式相关。
很抱歉,问题不明确。我的预感是,Eclipse在Eclipse中设置Tomcat环境的方式正在发生一些有趣的事情。
答案 0 :(得分:1)
web.xml是使用URL定义servlet映射的一种方式,使用新版本的J2EE可以使用注释来映射servlet,这是定义servlet映射的另一种方式。但是你应该总是使用它们中的任何一个。如果您定义了web.xml,那么它将覆盖注释配置。
所以你的网址将是
http://{ip}:8080/{projectName}/SimpleServlet
这里/ SimpleServlet是web.xml的映射。在web.xml中,如果您更改下面的urlpattern
<url-pattern>/SimpleServlet2</url-pattern>
那么网址将是
http://{ip}:8080/{projectName}/SimpleServlet2
如果这回答了你的问题,请告诉我。