2010-11-22 17 views
1

我试图让我的第一个servlet在eclipse中为tomcat 7.0运行在j2ee上,但我无法弄清楚我做错了什么。我像这样运行整个项目:右键单击我的项目 - >运行方式 - >在服务器上运行,index.html文件在浏览器中显示给我,但是当我点击“继续”时,它向我显示以下消息:如何让我的第一个servlet工作?

HTTP状态404 -/PDPJ_L5 /你好 - 该 请求的资源(/ PDPJ_L5 /你好)是 不可用。

我怀疑问题出在form标记的action属性上,或者是web描述符文件中。请解释我做错了什么以及如何修复我的项目。谢谢。

这里是我的项目(PDPJ_L5)目录结构:

PDPJ_L5

  • JAX-WS Web服务
  • 部署描述符:PDPJ_L5
  • Java的资源:SRC其中包含的servlet用我的Hello.java servlet包装
  • JavaScript资源
  • 构建
  • META-INF
  • WEB-INF一个lib文件夹,我的index.html和web.xml

的index.html的内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Some title</title> 
</head> 
<body> 
<H1 ALIGN="CENTER">Choose your option:</H1> 
<form action="http://localhost:8080/PDPJ_L5/hello" method="GET"> 
    <center> 
     <INPUT TYPE="RADIO" NAME="group" VALUE="one">ONE<BR> 
     <INPUT TYPE="RADIO" NAME="group" VALUE="two">TWO<BR><BR> 
     <INPUT TYPE="SUBMIT" VALUE="Continue"> 
    </center> 
</form> 
</body> 
</html> 

这里是Hello.java的servlet:

package servlets; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class Hello 
*/ 
public class Hello extends HttpServlet 
{ 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public Hello() 
    { 
     super(); 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     response.setContentType("text/html"); 

     PrintWriter out = response.getWriter(); 
     out.println("<HEAD><TITLE>Success</HEAD><BODY>"); 
     out.println("<h1> It works </h1>"); 
     out.println("</BODY>"); 
     out.close(); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     doGet(request, response); 
    } 

} 

而且web.xml文件:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE web-app 
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-application_2_3.dtd"> 

<web-app> 
    <servlet> 
     <servlet-name>Hello</servlet-name> 
     <servlet-class>servlets.Hello</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Hello</servlet-name> 
     <url-pattern>/hello</url-pattern> 
    </servlet-mapping> 
</web-app>  
+0

我很惊讶默认的web.xml Eclipse创建的指向Servlet 2.3 * http://java.sun.com/dtd/web-application_2_3.dtd*?我有* web-app_2_5.xsd * – JoseK 2010-11-22 13:55:33

+0

@Jose:他读大量过时的教程/书籍的机会很大,1998年以来弃用的'

'标签和使用90年代风格的大写HTML标签证明了这一点。无论如何,我会使用Servlet 3.0,因为Tomcat 7是一个支持Servlet 3.0的容器。 – BalusC 2010-11-22 13:59:15

回答

0

我发现了我的问题的解决方案。

我使用jar命令构建了一个war存档,并将其放入tomcat的webapps文件夹中,并以此方式工作。

剩下的唯一问题是它不能在eclipse下运行在服务器上,但以这种方式工作。

感谢您的帮助。

0

当您的索引页加载时,实际使用的端口是什么?你的超链接转到8080,但我认为“在服务器上运行”是启动一个临时服务器,它将绑定到一个随机端口。

+0

当索引页面加载时,浏览器中的地址是http:// localhost:8080/PDPJ_L5 /,所以它是8080端口 – DaJackal 2010-11-22 13:25:59

0

Tomcat日志文件说了什么(或者如果您是从Eclipse的控制台中运行Tomcat实例)?这通常发生在初始化Servlet或提供请求时引发某个异常。

+0

只是INFO的,没有警告和例外 – DaJackal 2010-11-22 13:28:55

+0

需要更多的细节;你如何启动Tomcat?从Eclipse内部还是运行.bat文件?你看过哪些日志文件? – 2010-11-22 13:31:08

+0

我在Eclipse中启动了Tomcat服务器,并在服务器上运行,并且我从Eclipse中查看了控制台视图 – DaJackal 2010-11-22 13:33:03

0

假设您右键单击>构建项目。

在你的Eclipse工作区(在Windows资源管理器中),你能找到实际的类文件 - PDPJ_L5/build/classes/servlets/Hello.class?它存在吗?

+0

是的,它存在。 – DaJackal 2010-11-22 14:04:00