Java EE 用の Eclipse Juno で新しく作成された動的 Web プロジェクトでサーブレットが機能しない。最初から、次のようになります。
- Eclipse EE (Juno) をダウンロードしましたが、デフォルトの設定は何も変更していません
- 最新の Tomcat (7.0.30) をダウンロードしました
- [設定] > [サーバー] > [ランタイム環境]で、新しい Apache Tomcat v7.0 を追加しました
- UniBudget という新しい動的 Web プロジェクトを作成しました (コンテキスト ルート:
budget
) - 新しいファイルを追加
index.jps
しました( 「it works!」が含まれています)
この時点で、プロジェクトをサーバーに追加して実行した後、 「動作する」ことがわかりました。画面上で。したがって、展開は機能します。
次に、サーブレット ファイル (
control.Controller.java
)を追加しました。package control; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet({ "/Controller", "*.do" }) public class Controller extends HttpServlet { private static final long serialVersionUID = 1L; public Controller() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet()"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doPost()"); } }
index.jsp
私は次のように変更しました。<jsp:forward page="/departments.do"/>
そしてもちろん
web.xml
:<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>UniBudget</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- servlet definition --> <servlet> <servlet-name>Do</servlet-name> <servlet-class>control.Controller</servlet-class> </servlet> <!-- servlet mapping --> <servlet-mapping> <servlet-name>Do</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Do</servlet-name> <url-pattern>/Controller</url-pattern> </servlet-mapping> </web-app>
生成
.class
されたファイルはWEB-INF/classes
正しくなければなりませんか? それが私が読んだものです。だから:Configure Build Path > Source tab > Browse >
私はclasses
フォルダを作成しましたWEB-INF
(Advanced
ファイルシステムのフォルダにリンクしました... /UniBudget/build/classes
:)これはプロジェクト内のファイル階層です:
UniBudget プロジェクトをクリーンアップしてビルドし、サーバーに再公開しました。サーバーをクリーンアップしました。
これで作業できると思いました (コンソールに「doGet()」または「doPost()」を表示することを意味します)。しかし、コンソールで印刷する代わりに、次のエラーが発生しました。
HTTP Status 404 - /budget/departments.do -------------------------------------------------------------------------------- type: Status report message: /budget/departments.do description: The requested resource is not available.
http://localhost:8080/budget/Controller
(からのリダイレクトなしでindex.jsp
)直接アクセスしようとすると同じことが起こります
Eclipse がサーブレットをまったく認識できなかったようです。どこで間違いを犯したか教えてください。私は今、何時間もこれを理解できません。
編集:
冗長な注釈 ( @WebServlet
) を削除すると、別のエラーが発生します。
HTTP Status 503 - Servlet Do is currently unavailable
--------------------------------------------------------------------------------
type Status report
message Servlet Do is currently unavailable
description The requested service is not currently available.
コンソールのエラー:
wrz 24, 2012 9:34:15 PM org.apache.catalina.core.ApplicationDispatcher invoke
WARNING: Servlet Do is currently unavailable
あまりない。しかし、それだけです。
編集:
ここでさらに別のエラーが発生していることがわかりました。再作成する方法さえわかりませんが、少なくともこれはいくつかのログ情報を提供します:
HTTP Status 500 - An exception occurred processing JSP page /index.jsp at line 3
--------------------------------------------------------------------------------
type: Exception report
message: An exception occurred processing JSP page /index.jsp at line 3
description: The server encountered an internal error that prevented it from fulfilling this request.
exception:
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 3
1: <%@ page language="java" contentType="text/html; charset=UTF-8"
2: pageEncoding="UTF-8"%>
3: <jsp:forward page="/departments.do"/>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause:
javax.servlet.ServletException: Error instantiating servlet class control.Controller
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:746)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716)
org.apache.jsp.index_jsp._jspService(index_jsp.java:65)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause:
java.lang.ClassNotFoundException: control.Controller
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:746)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716)
org.apache.jsp.index_jsp._jspService(index_jsp.java:65)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
編集:
中のエラーproject right click > Export > WAR file
:
java.lang.NoClassDefFoundError: org/eclipse/wst/web/internal/deployables/IFlatDeployable
at org.eclipse.jst.j2ee.internal.archive.operations.JavaEEComponentExportOperation.getModuleParticipants(JavaEEComponentExportOperation.java:77)
at org.eclipse.jst.j2ee.internal.archive.operations.JavaEEComponentExportOperation.getParticipants(JavaEEComponentExportOperation.java:43)
at org.eclipse.jst.j2ee.internal.archive.operations.JavaEEComponentExportOperation.createFlatComponentArchiver(JavaEEComponentExportOperation.java:91)
at org.eclipse.jst.j2ee.internal.archive.operations.ComponentExportOperation.export(ComponentExportOperation.java:191)
at org.eclipse.jst.j2ee.internal.archive.operations.ComponentExportOperation.execute(ComponentExportOperation.java:136)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl$1.run(DataModelPausibleOperationImpl.java:385)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:410)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:360)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.doExecute(DataModelPausibleOperationImpl.java:247)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.executeImpl(DataModelPausibleOperationImpl.java:219)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.cacheThreadAndContinue(DataModelPausibleOperationImpl.java:89)
at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.execute(DataModelPausibleOperationImpl.java:207)
at org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizard$1CatchThrowableRunnableWithProgress.run(DataModelWizard.java:220)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)