2011-06-13 92 views
1

我有一個AuthorizationServlet,當用戶單擊登錄頁面中的按鈕時會調用它。這裏是一塊servlet的doPost方法的代碼:Tomcat內部錯誤

 AuthorizationBean bean = new AuthorizationBean(); 
     String login = (String) request.getSession().getAttribute("login"); 
     String password = (String) request.getSession().getAttribute("password"); 
     try { 
      UserType type = bean.getRoleOfUser(login, password); 
      switch(type) { 
       ... 
      } 
     } catch (DaoException ex) { 
      throw new ServletException(ex.getMessage()); 
     } 

我已經被遺漏的一些代碼,因爲它是不適用的問題。其實,DaoException只能在這一行拋出UserType type = bean.getRoleOfUser(login, password); 在方法getRoleOfUser我使用Tomcat的連接池(說明是如何得到的連接是在第一篇文章here

而且這裏做數據庫的連接是我的上下文.XML它創建數據庫連接的資源:

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/Project"> 
    <Resource name="jdbc/Project" auth="Container" 
     type="javax.sql.DataSource" maxActive="100" 
     maxIdle="30" maxWait="10000" 
     username="name" 
     password="password" 
     driverClassName="oracle.jdbc.driver.OracleDriver" 
     url="jdbc:oracle:thin:@127.0.0.1:1521:XE"/> 
</Context> 

當AuthorizationServlet叫我得到這樣的錯誤:

javax.servlet.ServletException: Error instantiating servlet class com.tspp.common.AuthorizationServlet 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864) 
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) 
    org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665) 
    java.lang.Thread.run(Thread.java:662) 
root cause 

java.lang.NoClassDefFoundError: com/tspp/dao/exceptions/DaoException 
    java.lang.Class.getDeclaredConstructors0(Native Method) 
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
    java.lang.Class.getConstructor0(Class.java:2699) 
    java.lang.Class.newInstance0(Class.java:326) 
    java.lang.Class.newInstance(Class.java:308) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864) 
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) 
    org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665) 
    java.lang.Thread.run(Thread.java:662) 
root cause 

java.lang.ClassNotFoundException: com.tspp.dao.exceptions.DaoException 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) 
    java.lang.Class.getDeclaredConstructors0(Native Method) 
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
    java.lang.Class.getConstructor0(Class.java:2699) 
    java.lang.Class.newInstance0(Class.java:326) 
    java.lang.Class.newInstance(Class.java:308) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864) 
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) 
    org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665) 
    java.lang.Thread.run(Thread.java:662) 

我試圖調試它,但調試器甚至沒有得到servlet的doPost方法。 實際上,當我啓動程序(在servlet激活之前)時拋出了最後2個異常

我該如何解決這個問題?

+0

你的部署看起來像什麼(EAR,WAR等)?以及DAOException類在最終部署中的位置。它是WEB-INF目錄中的類嗎?是被震驚了嗎? – nsfyn55 2011-06-13 15:01:53

+0

我通過NetBeans IDE運行項目。 DaoException類駐留在WEB-INF目錄中 – maks 2011-06-13 15:05:38

回答

2

確保你把所有的班WEB-INF/classes

+0

但是我有WEB-INF/classes – maks 2011-06-13 14:50:46

+0

中的所有類,或許那個特定的類不在那裏。這是例外說的。 – Bozho 2011-06-13 14:51:41

+0

類DaoException的字節碼位於我的netbeans項目的build/web/WEB-INF/classes/com/tspp/DAO/exceptions文件夾中。也許問題是類名包含... dao ...並且類的字節碼的路徑包含... DAO ...但是我沒有改變它,我的ide通過約定,包名生成了這樣的路徑 – maks 2011-06-13 14:58:28

1

com/tspp/dao/exceptions/DaoException類不被JVM(System.loadClass()方法),因此你有一個ClassNotFoundException發現。

確保您的代碼已編譯幷包含在項目的WEB-INF\classes文件夾中。如果它在jar中,請確保在JAR中找到該類。