2017-06-26 67 views
1

私はApache Tomcatバージョン8.0.36を使って簡単なWebアプリケーションを作っています。 「Class foo.Counter is not Servlet」エラーが表示されます。 サーブレットクラスでHttpServletを拡張し、web.xmlを構成しました。 「極端な」オプションを繰り返しクリックしています。package.Classはサーブレットではありません(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); 
} 
} 

とweb.xmlファイルは次のとおりです。

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

とJSPとして(BasicCounter.jsp):

<?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ファイル(names.html)として

<%@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> 

エラーは次のとおりです。

SEVERE:サーブレットカウンタの例外を割り当て にjava.lang.ClassCastException:foo.Counterはorg.apache.catalina.core.StandardWrapper.loadServletでのjavax.servlet.Servlet にキャストすることはできません(StandardWrapper.java:1102 ) でorg.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:828) でorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) org.apache.catalinaで.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) a org.apache.catalina.valves.invoke(ErrorReportValve.java:79) (org.apache.catalina.valves.AbstractAccessLogValve)でorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) をorg.apache.catalina.valves.ErrorReportValve.invokeに設定します。 .invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) (AbstractProtocol.java:670) at org.apache.tomcat.util.net .NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1520) at org.apache.tomcat.util.net.NioEndpoi (ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)でnt $ SocketProcessor.run(NioEndpoint.java:1476) をjava.util.concurrent.ThreadPoolExecutor.runWorker java.lang.Thread.runでorg.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) (Thread.java:745)のjavaxのインスタンスの

+0

warファイルのWEB-INF/libディレクトリの内容をリストできますか? –

+0

あなたの依存関係はどうですか? Tomcatとアプリケーションの間に競合するサーブレットライブラリがありますか? –

+0

@JBNizet WEB-INF/libフォルダが空です。私はEclipseを再起動し、プロジェクトをリフレッシュしました。それは正常に動作していた。 –

答えて

0

ルックで 。あなたのWEB-INF/libのservlet.ServletException.class。 servler.jarまたはservlet.api.jarの内容は、コンテナによって提供される必要があります。 servler.jarをWEB-INF/libフォルダに入れ、プロジェクトにjarを追加する必要があります。

0

あなたの戦争にservlet.jarを組み立てたようです。

あなたはMavenを使用する場合、あなたはあなたが独自の以外のTomcatサーバ内の任意のサーブレットjarファイルの依存関係を持っていないことを確認してください

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

のようなサーブレットAPIのスコープprovidedを使用する必要があります。

+0

私はmavenを使用しません。私はEclipseを再起動し、プロジェクトをリフレッシュしました。それは正常に動作していた。答えてくれてありがとう。 –

関連する問題