2017-11-04 4525 views
0

我一直在研究類似的主題,但沒有一個解決方案有效。我試圖使用Eclipse在Web應用程序中映射一個簡單的HttpServlet,但是當從調用servlet的html頁面提交表單時,出現以下錯誤。javax.servlet.ServletException:實例化Servlet類時出錯java.UserScoresServlet

HTTP Status 500 - Error instantiating servlet class java.UserScoresServlet 

type Exception report 

message Error instantiating servlet class java.UserScoresServlet 

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

exception 

javax.servlet.ServletException: Error instantiating servlet class java.UserScoresServlet 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    java.lang.Thread.run(Thread.java:748) 
root cause 

java.lang.ClassNotFoundException: java.UserScoresServlet 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    java.lang.Thread.run(Thread.java:748) 
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.34 logs. 

我試着@WebServlet標註以及web.xml文件無濟於事映射兩者。我試圖使用其中一種,而不是同時使用兩種。當使用JSP和HTML頁面時,我的映射可以正常工作。我的XML文件映射如下,位於WEB-INF目錄中。

<display-name>GetUserScores</display-name> 
    <servlet> 
    <servlet-name>GetUserScores</servlet-name> 
    <servlet-class>java.UserScoresServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>GetUserScores</servlet-name> 
    <url-pattern>/GetUserScores</url-pattern> 
    </servlet-mapping> 
</web-app> 

服務器類如下。正如我上面提到的,我一直在做註釋或web.xml,而不是兩者。兩者都拋出相同的異常。

package java; 

import java.io.IOException; 
import java.score.jpa.Score; 
import java.score.jpa.ScoreService; 
import java.user.jpa.User; 
import java.user.jpa.UserService; 
import java.util.List; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class UserScoresServlet 
*/ 
@WebServlet(name = "GetUserScores", urlPatterns = "/GetUserScores") 
public class UserScoresServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    private UserService userService; 
    private ScoreService scoreService; 
    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public UserScoresServlet() { 
    super(); 
    userService = new UserService(); 
    scoreService = new ScoreService(); 
} 

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String firstName = (String)request.getParameter("firstName"); 
    String lastName = (String)request.getParameter("firstName"); 
    User user = userService.findUserByFirstAndLastName(firstName, lastName); 
    if (user != null){ 
     List<Score> scoreList = scoreService.findAllScoresByUser(user); 
     request.setAttribute("scoreList", scoreList); 
    } 
    gotoPage("/scores", request, response); 
} 

private void gotoPage(String address, HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(address); 
    dispatcher.forward(request, response); 
} 

/** 
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
*/ 
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
} 

} 

請看照片文件結構:File Structure Image

任何幫助,任何人都可以提供將是一個很大的幫助。我已經徹底搜索了這個網站,並嘗試了類似的問題的每一個建議無濟於事。感謝幫助。

+1

請將您的異常堆棧跟蹤作爲格式文本發佈在您的問題中,而不是圖片。 –

+0

已更正。原諒第一篇文章,希望我現在格式正確。 –

回答

0

正如JLS說,你不應該使用java的名稱爲您的開發包:僅用於局部使用應該有一個由小寫字母開頭的第一標識符包

名稱,但第一標識符不應該是標識符java;與標識符java開始包名保留爲Java SE平臺

在你的代碼在這裏指出,包裝:

package java; 

import java.io.IOException; 
import java.score.jpa.Score; 
import java.score.jpa.ScoreService; 
import java.user.jpa.User; 
import java.user.jpa.UserService; 
import java.util.List; 

//rest of code... 

更改您包的名稱到別的東西。