2017-09-25 101 views
-1

我正在阅读另一个惊人的头先书。这一个是“头一个Servlets & JSP - 通过Sun认证的Web组件开发者考试”。我正在关注创建一个小型“hello world”类型的程序的第一个教程。这是在第30至31Servlet Hello World错误 - 根本原因:java.lang.ClassNotFoundException:

我编译Java源代码的方式如下: C:\Users\username\Desktop\Servlets_HF_Example\project1>javac -classpath C:\tomcat\ apache-tomcat-9.0.0.M26-windows-x86\apache-tomcat-9.0.0.M26\lib\servlet-api.jar -d classes src/Ch1Servlet.java

未发现类,500错误的原因,有以下的源代码:

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 

public class Ch1Servlet extends HttpServlet { 

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 

     PrintWriter out = response.getWriter(); 
     java.util.Date today = new java.util.Date(); 
     out.println("<html> " + 
        "<body> " + " <h1 align=center>Head First Chapter 1 Servlet</h1>" 
        + "<br>" + today + "</body> " + "</html>"); 

    } 


} 

web.xml文件具有下面的代码:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 


<servlet> 
    <servlet-name>Chapter1 Servlet</servlet-name> 
    <servlet-class>Ch1Servlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Chapter1 Servlet</servlet-name> 
    <url-pattern>/Serv1</url-pattern> 
</servlet-mapping> 

</web-app> 

我对代码以下文件夹结构:

project1 
     | 
     | 
     +classes 
      | 
      Ch1Servlet.class 
     +etc 
      | 
      web.xml 
     +src 
      | 
      Ch1Servlet.java 

被放入Tomcat的webapps目录下的项目结构如下:

ch1 
    | 
    | 
    +classes 
     | 
     Ch1Servlet.class 
    +WEB-INF 
     | 
     web.xml 

enter image description here 图0:部署项目的文件夹结构

我有我的TOMCAT_HOME目录设置与在此Windows 7操作系统(OS)上设置JAVA_HOME。当我部署应用程序并启动Tomcat时1)我看到一个500错误,说没有找到该类。这是找不到的Ch1Servlet.class。然后,如果我刷新页面,我会看到2)404错误。这些错误如下所示。

enter image description here 图1:500错误 - 第1点击

enter image description here 图2:404 - 2点击

我有什么错?

回答

1

为了要由应用服务器正常加载你的类,你的web应用的结构应如下:

ch1/ 
| 
+- WEB-INF/ 
    | 
    +- classes/ 
    | | 
    | +- Ch1Servlet.class 
    | 
    +- web.xml 

所有类和库WEB-INF文件夹下去,特别是分别在classeslib

+0

我其实有这个文件夹结构。也许我的图不清楚。我看到你使用了文件夹的加号。 – user3870315

+0

@ user3870315如果你在'WEB-INF'下放置'classes'文件夹,那么你可能会遇到不同的问题。您应该提供更多详细信息,例如web.xml文件的内容以及可能的一些源代码。 –

+0

嗨路易斯,当然给我一个小时左右。我在这里忙着工作。 – user3870315