2017-06-26 4 views
1

Ich mache eine einfache Web-App mit Apache Tomcat Version: 8.0.36. Ich bekomme den Fehler "Klasse foo.Counter ist kein Servlet". Ich habe HttpServlet in der Servlet-Klasse erweitert und die web.xml konfiguriert. Ich klicke wiederholt auf die 'Extrem' Option.package.Class ist kein Servlet (Tomcat/J2EE)

package foo; 
import java.io.IOException; 
import java.util.ArrayList; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class Counter extends HttpServlet{ 

@Override 
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 

    String c=req.getParameter("hobby"); 

    Choices m=new Choices(); 
    ArrayList l=m.getNames(c); 

    req.setAttribute("name", l); 

    RequestDispatcher view=req.getRequestDispatcher("BasicCounter.jsp"); 
    view.forward(req, resp); 
} 
} 

Und die web.xml-Datei wird wie folgt dar:

<?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" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
version="2.5"> 

<servlet> 
<servlet-name>Counter</servlet-name> 
<servlet-class>foo.Counter</servlet-class> 
</servlet> 

<servlet-mapping> 
<servlet-name>Counter</servlet-name> 
<url-pattern>/HobbyParameter.do</url-pattern> 
</servlet-mapping> 

</web-app> 

HTML-Datei als (names.html):

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 

<form method="POST" action="HobbyParameter.do"> 
Choose a Hobby:<br> 

<select name="hobby" size="1"> 
<option>horse skiing 
<option>extreme 
<option>alpine scuba 
<option>speed dating 
</select> 
<br> 
<input type="SUBMIT" > 

</form> 

</body> 
</html> 

und JSP als (BasicCounter.jsp):

<%@page import="java.util.ArrayList"%> 
<%@page import="java.util.Iterator"%> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
The friends who share your hobby of <%= request.getAttribute("hobby") %> are:<br> 
<% 
ArrayList list= (ArrayList) request.getAttribute("name"); 
Iterator it=list.iterator(); 
while(it.hasNext()) 
{ 
out.print("<br>"+it.next());  
} 
%> 
</body> 
</html> 

Und der Fehler lautet wie folgt:

SCHWEREN: Vergeben Ausnahme für Servlet Zähler java.lang.ClassCastException: foo.Counter kann nicht auf javax.servlet.Servlet bei org.apache.catalina.core.StandardWrapper.loadServlet gegossen werden (StandardWrapper.java:1102) bei org.apache.catalina.core.StandardWrapper.allocate (StandardWrapper.java:828) bei org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:135) bei org.apache.catalina .core.StandardContextValve.invoke (StandardContextValve.java:106) bei org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:502) a t org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:141) bei org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:79) bei org.apache.catalina.valves.AbstractAccessLogValve .invoke (AbstractAccessLogValve.java:616) bei org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:88) bei org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:528) at org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1099) bei org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:670) bei org.apache.tomcat.util.net .NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1520) bei org.apache.tomcat.util.net.NioEndpoi nt $ SocketProcessor.run (NioEndpoint.java:1476) bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java: 617) bei org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) bei java.lang.Thread.run (Thread.java:745)

+0

Können Sie den Inhalt des WEB-INF/lib-Verzeichnisses Ihrer Kriegsdatei auflisten? –

+0

Was ist mit Ihren Abhängigkeiten? Gibt es widersprüchliche Servlet-Bibliotheken zwischen Tomcat und der Anwendung? –

+0

@ JBNizet Der Ordner WEB-INF/lib ist leer. Ich habe Eclipse neu gestartet und das Projekt aktualisiert. Es hat gut funktioniert. –

Antwort

0

Geben Sie für Instanzen von javax. servlet.ServletException.class in Ihrer WEB-INF/lib. Der Inhalt für servler.jar oder servlet.api.jar sollte vom Container bereitgestellt werden. Sie müssen also servler.jar in den Ordner WEB-INF/lib einfügen und jar in Ihr Projekt einfügen.

0

Sieht so aus, als hätten Sie servlet.jar zu Ihrem Krieg zusammengestellt.

Wenn Sie Maven verwenden, dann sollten Sie Umfang provided für Servlet-API verwenden, wie

<dependency> 
<groupId>javax.servlet</groupId> 
<artifactId>javax.servlet-api</artifactId> 
<version>3.0.1</version> 
<scope>provided</scope> 
</dependency> 

Vergewissern Sie sich, dass Sie keine Servlet jar Abhängigkeiten außer seinen eigenen in Tomcat-Server haben.

+0

Ich benutze Maven nicht. Ich habe Eclipse neu gestartet und das Projekt aktualisiert. Es hat gut funktioniert. Danke für die Antwort. –

Verwandte Themen