2016-11-08 1452 views
-1

我知道有類似的問題,但我仍然無法弄清楚。請幫助我。我已附加在圖像的目錄結構,其餘的代碼作爲還列出如下 Click here to see the directory structureHTTP狀態500 - 實例化servlet類錯誤com.app.RegisterServlet

的index.html

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <form action="reg" method="post"> 
     Rno:<input type="number" name="rno"><br> 
     Name:<input type="text" name="name"><br> 
     Mark:<input type="number" name="mark"><br><br> 
     <input type="submit" value="Register"> 
     <input type="reset" value="clear"> 
    </form> 
</body> 
</html> 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <servlet> 
    <servlet-name>hi</servlet-name> 
    <servlet-class>com.app.RegisterServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>hi</servlet-name> 
    <url-pattern>/reg</url-pattern> 
    </servlet-mapping> 
</web-app> 

RegisterServlet.java

package com.app; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import javax.servlet.GenericServlet; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

public class RegisterServlet extends GenericServlet{ 
    private static final long serialVersionUID = 1L; 

    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 
     try { 
      int rno=Integer.parseInt(request.getParameter("rno")); 
      String name=request.getParameter("name"); 
      float mark=Float.parseFloat(request.getParameter("mark")); 
      Class.forName("oracle.jdbc.OracleDriver"); 
      Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","fila","filimon"); 
      PreparedStatement pstmt=con.prepareStatement("insert into register values(?,?,?)"); 
       pstmt.setInt(1,rno); 
       pstmt.setString(2,name); 
       pstmt.setFloat(3,mark); 
      int count=pstmt.executeUpdate(); 
       con.commit(); 
      PrintWriter out=response.getWriter(); 
      response.setContentType("text/html"); 
      if (count>0) { 
       out.println("<html><body>successfully inserted</body></html>"); 
      }else{ 
       out.println("<html><body>nigga, try next time</body></html>"); 
      } 
      pstmt.close(); 
      con.close(); 
     }catch (Exception e) { 
      System.err.println(e); 
     } 
    }//service() 
}//RegisterServlet 

非常感謝您的時間,ow和錯誤如下

type Exception report 

message Error instantiating servlet class com.app.RegisterServlet 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: Error instantiating servlet class com.app.RegisterServlet 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 
root cause 

java.lang.ClassNotFoundException: com.app.RegisterServlet 
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892) 
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    java.lang.Thread.run(Thread.java:745) 
+0

在'service()'方法中實現這些操作是完全錯誤的@ – JimHawkins

+0

@JimHawkins可以請您簡要解釋一下,謝謝 –

+0

來處理HTTP GET請求,重寫'doGet()'方法。對於POST覆蓋'doPost()' – JimHawkins

回答

0

該異常聲明ClassNotFoundException,這意味着您的servlet類未找到實例。確保servlet類(包含其包結構)在[WEB-INF/classes目錄中重新發布。

編輯:檢查代碼

後,我已經運行你的代碼,下面是編輯的代碼(我評論的大部分內部部分):

package com.app; 

進口產生java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet;

@WebServlet(名稱= 「registerServlet」,URL模式= 「/ REG」) 公共類RegisterServlet延伸GenericServlet類{ 私有靜態最後長的serialVersionUID = 1L;

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 
    try { 

     System.out.println("PRINTING FROM SERVLET -----------------"); 

     /*int rno=Integer.parseInt(request.getParameter("rno")); 
     String name=request.getParameter("name"); 
     float mark=Float.parseFloat(request.getParameter("mark")); 
     Class.forName("oracle.jdbc.OracleDriver"); 
     Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","fila","filimon"); 
     PreparedStatement pstmt=con.prepareStatement("insert into register values(?,?,?)"); 
      pstmt.setInt(1,rno); 
      pstmt.setString(2,name); 
      pstmt.setFloat(3,mark); 
     int count=pstmt.executeUpdate(); 
      con.commit();*/ 
     PrintWriter out=response.getWriter(); 
     response.setContentType("text/html"); 
     out.println("<html><body>successfully inserted</body></html>"); 
     /*   if (count>0) { 
          out.println("<html><body>successfully inserted</body>  </html>"); 
     }else{ 
      out.println("<html><body>nigga, try next time</body></html>"); 
     } 
     pstmt.close(); 
     con.close();*/ 
    }catch (Exception e) { 
     System.err.println(e); 
    } 
}//service() 

} // RegisterServlet

我得到的輸出:

<html><body>successfully inserted</body></html> 

沒有什麼不對您的框架,檢查數據庫訪問和其他邏輯,檢查是否有任何異常,否則該servlet應該打印。

+0

我使用eclipse和我有共享目錄structre,請檢查出來,並告訴我是否有任何錯誤。謝謝 –

+0

從eclipse導出WAR文件並在單獨的tomcat上部署。項目的目錄結構本身沒有問題。 – Ironluca

+0

謝謝我現在就試試吧 –

相關問題