2017-09-25 48 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