2009-11-18 31 views
0

我想制作servlet。Tomcat6 + Ubuntu + Servlet

我已经在Ubuntu上安装了tomcat6,并带有管理员的例子和文档。我能够运行提供的示例。但是当我尝试制作自己的servlet时,它不起作用。

我下面的步骤

在根我创建文件夹

-ROOT 
----myapp 
------WEB-INF 
---------classes 

我做了两个文件,一个是index.html的这对形式的按钮和动作来调用servlet。其次是.java文件。我编译.java文件并完成.class。所以,现在的树看起来像

-ROOT 
----myapp 
------index.html 
------WEB-INF 
---------classes 
-----------TestServ.java 
-----------TestServ.class 

现在,我在浏览器中使用打开这个http://localhost:8080/myapp

它显示了随按钮index.html页面。但是当我点击按钮它说

错误404: http://localhost:8080/myapp/TestServ找不到!

我不知道哪里出错了。我也设置了CATALINA_HOME。但是这个问题仍然存在。

回答

6

您需要在WEB-INF目录中创建一个web.xml,并在web.xml中定义servlet映射,以便将myapp/TestServ URL转发给TestServ servlet类。

Here是一个描述web.xml的页面,并且具有您需要设置的示例和元素。对于您的班级,这些元素可能看起来像这样:

<servlet> 
    <servlet-name>testServ</servlet-name> 
    <servlet-class>TestServ</servlet-class> 
</servlet> 

<servlet-mapping> 
    <!-- For any URL starting with /content/, the rewriter servlet will be called --> 
    <servlet-name>testServ</servlet-name> 
    <url-pattern>/TestServ</url-pattern> 
</servlet-mapping> 
+0

thnks它的工作现在..抱歉有点晚回复 – asb 2009-11-23 14:29:30

1

您不应该在ROOT下部署任何代码。

默认包中不应该有任何Java类。尝试把你的TestServ.java放入一个包中。

您的部署不应该包含任何.java文件。

你必须在web.xml中正确地注册你的servlet。包含一个映射到一个特定的URL。

最好的办法是创建一个名为myapp.war的WAR文件,其中包含WEB-INF/classes和WEB-INF/lib以及适用于您的情况的web.xml。把它放在Tomcat/webapps中并启动容器。如果你已经正确地注册了你的servlet,你应该可以通过http://localhost:8080/myapp/TestServ来访问它。

我仔细阅读deployment docs

+0

+1提及无包servlet是失败。但应该提到,他们可能在某些环境中工作,但是你不应该依赖这个。总是把类放入包中,只是因为你不能以通常的Java方式从其他类访问无包类 – BalusC 2009-11-18 02:22:12

+0

将应用程序部署为ROOT.war会出现什么问题? – 2009-11-18 02:53:26

+0

是的,但它也没有包装。谢谢任何方式 – asb 2009-11-23 14:30:34