0

できるだけ具体的に、できるだけ多くの情報を提供するように努めます。

私のコンピューターの C:\myproject\tomcat に tomcat 7 がインストールされています。

C:\Program Files\java\jdk1.7.0_04 に JDK 1.7.0_04 をインストールしました。

JRE_HOME = C:\Program Files\Java\jdk1.7.0_04

クラスパス = C:\myproject\tomcat\bin\bootstrap.jar;C:\myproject\tomcat\bin\tomcat-juli.jar

jdk1.7.0_04\jre\lib\ext フォルダーには、servlet-api.jar ファイルがあります。これは、サーブレットを実行するために必要だと思います。

私の C:\myproject\tomcat\conf\web.xml ファイルには、タグがあります

サーブレットタグ

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>loginpackage.LoginServlet</servlet-class>
</servlet>

サーブレットマッピングタグ

<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>

localhost:9999/javawork/LoginServlet が見つかるようにするために必要だと思います。

C:\myproject\tomcat\webapps\javawork に javawork という Web アプリがあります。

そこには、LoginPage.jsp を含む JSP ファイルを含むフォルダー test_login があります。

<%@ page language="java" contentType="text/html; charset=windows-1256" pageEncoding="windows-1256"%>

<!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=windows-1256">
        <title>Login Page</title>
    </head>
    <body>
        <form action="../LoginServlet">
            Please enter your username      
            <input type="text" name="un"/><br>      
            Please enter your password
            <input type="password" name="pw"/>
            <input type="submit" value="submit">            
        </form>
    </body>
</html>

javawork には、lib フォルダーと classes フォルダーを含む WEB-INF フォルダーがあり、lib フォルダーには oracle ドライバーを含む jar ファイルがいくつかあります。classes フォルダーには loginpackage フォルダーがあり、その中に LoginServlet.java ファイルと LoginServlet.class ファイルがあります。Eclipse IDE を使用してコンパイルし、.class ファイルをフォルダ javawork/bin/WEB-INF/classes/loginpackage フォルダに配置し、.class ファイルをメインの WEB-INF フォルダ構造に移動して同じディレクトリに配置しました。 .java ファイルとして。

LoginServlet.java:

package loginpackage;

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;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class LoginServlet
 */

public class LoginServlet extends HttpServlet 
{
    private static final long serialVersionUID = 1L; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {
        try
        {       

             UserBean user = new UserBean();
             user.setUserName(request.getParameter("un"));
             user.setPassword(request.getParameter("pw"));

             user = UserDAO.login(user);

             if (user.isValid())
             {

                  HttpSession session = request.getSession(true);   
                  session.setMaxInactiveInterval(60);
                  session.setAttribute("currentSessionUser",user); 
                  session.setAttribute("sessUserName", user.getUsername());
                  session.setAttribute("userID",user.getUserID());
                  response.sendRedirect("userlogged.jsp"); //logged-in page             
             }

             else 
                  response.sendRedirect("invalidlogin.jsp"); //error page 
        } 


        catch (Throwable theException)      
        {
             System.out.println(theException); 
        }
    }//end doGet
}//End LoginServlet Class

コマンド プロンプトを開き、C:\myproject\tomcat\bin に移動してスタートアップ ファイルを実行し、Tomcat サーバーが実行されるようにします。

に移動するとhttp://localhost:9999/javawork/test_login/LoginPage.jsp、問題なくロードされます。ユーザー名とパスワードをボックスに入力し、送信ボタンをクリックします。(u と p は入力したものです)に移動しようとするとhttp://localhost:9999/javawork/LoginServlet?un=u&pw=p、次のエラーが発生します: 例外

java.lang.NoClassDefFoundError: loginpackage/LoginServlet (wrong name: WEB-INF/classes/loginpackage/LoginServlet)
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2889)
    org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:461)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:309)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1812)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    java.lang.Thread.run(Thread.java:722)

すべてが適切に並んでいると思うので、なぜこのエラーが発生するのかわかりません。どうか、どんな助けでも大歓迎です.bc私はこれに1日以上行き詰まっており、仕事での仕事の次の部分に進むためにそれを機能させる必要があります. ありがとう。

4

3 に答える 3

2

あなたが言った:

私の C:\myproject\tomcat\conf\web.xml ファイルには、タグがあります...

私の知る限り、指定したパスにあるものではなく、mappingプロジェクトのサーブレットの値を入力する必要があります。web.xml

web.xmlを作成していない場合は、YourProject/WEB-INF/web.xml最初に作成して値を入力します。

<servlet>
  <servlet-name>LoginServlet</servlet-name>
  <servlet-class>loginpackage.LoginServlet</servlet-class>
</servlet>

サーブレットマッピングタグ

<servlet-mapping>
  <servlet-name>LoginServlet</servlet-name>
  <url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>

初期化。(ここに簡単なweb.xmlファイルがあります) 頑張ってください!

于 2012-06-08T17:30:20.290 に答える
1

C:\myproject\tomcat\conf\web.xml ファイルではなく、プロジェクトの C:\myproject\tomcat\webapps\javawo\WEB-INF\web.xml ファイルにサーブレット エントリが必要です。

于 2012-06-08T17:30:33.023 に答える
0

私は問題が何であるかを理解しました。

「Eclipse IDE を使用してコンパイルし、.class ファイルをフォルダー javawork/bin/WEB-INF/classes/loginpackage フォルダーに配置し、.class ファイルをメインの WEB-INF フォルダー構造に移動して、同じになるようにしました。ディレクトリを.javaファイルとして."

Eclipse でクラスをコンパイルし、.class ファイルを指定したフォルダーに配置すると、クラス内のどこかにパスが設定されました。そのため、ファイルを必要なフォルダーに移動すると、コンパイル先のフォルダーでファイルを探していたため、ファイルが見つかりませんでした。コマンド プロンプトから javac コンパイラを使用して、.class ファイルを .java ソース ファイルと同じフォルダにコンパイルする必要がありました。それができたら、コードを実行できました。

ここで、Eclipse をいじってファイルを適切なフォルダーにコンパイルする必要があるだけなので、javac を使用して手動でコンパイルする必要はありません。

于 2012-06-13T17:36:19.737 に答える