2017-11-04 6 views
0

私はこれに似た話題を研究していますが、解決策はありません。 Eclipseを使用してWebアプリケーションで単純なHttpServletをマップしようとしていますが、サーブレットを呼び出すhtmlページからフォームが送信されると、次のエラーが発生しています。javax.servlet.ServletException:サーブレットクラスのインスタンス化エラー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

誰が提供できるすべてのヘルプは大きな助けになります。私はこのサイトを徹底的に調査し、同様の問題のすべての提案を無駄に試しました。ヘルプをよろしくお願いいたします。 JLSで述べたように

+1

あなたの例外stacktraceは、画像ではなく質問の中に書式設定されたテキストとして投稿してください。 –

+0

が修正されました。最初の投稿を許して、うまくいけば私は今正しくフォーマットされました。 –

答えて

0

、あなたの開発パッケージの名前としてjavaを使うべきではない:ローカルのみ使用することを意図したパッケージの

名前は小文字で始まる識別子を持っていますが、ことをすべきです最初の識別子は具体的には識別子javaであってはなりません。

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... 

変更何か他のものにあなたのパッケージの名前:識別子javaで始まるパッケージ名は、Java SEプラットフォームのコードの中でここで注目

のパッケージのために予約されています。

関連する問題