2017-11-04 4529 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... 

更改您包的名称到别的东西。