2

フィルターの設定に問題があります - web.xml で定義したフィルターは次のようになります

  <filter>
   <filter-name>Log</filter-name>
   <filter-class>test.log</filter-class> 
 </filter>
 <filter-mapping>
   <filter-name>Log</filter-name>
   <url-pattern>/*</url-pattern>
 </filter-mapping>

しかし、次のエラーが表示されます-

SEVERE: Exception starting filter Log
java.lang.ClassNotFoundException: test.log
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:133)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:256)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4650)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5306)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

クラスを定義しましたが、何らかの理由で Classnotfoundexcetion を取得しています。誰かが私を助けることができますか?

編集 - -

test というパッケージと log というクラスがあります。

             package test;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.*;

    // Implements Filter class
     public class log implements Filter  {
         public void  init(FilterConfig config) {

          }
         public void  doFilter(ServletRequest request, 
             ServletResponse response,
             FilterChain chain) 
             throws java.io.IOException, ServletException {

  // Get the IP address of client machine.   
  String ipAddress = request.getRemoteAddr();

  // Log the IP address and current timestamp.
  System.out.println("IP "+ ipAddress + ", Time "
                                   + new Date().toString());

  // Pass request back down the filter chain
  chain.doFilter(request,response);
  }
   public void destroy( ){
      /* Called before the Filter instance is removed 
      from service by the web container*/
  }
 }

ありがとうございました、

4

6 に答える 6

3

filter-classパラメーターは、Filterインターフェースを実装する必要があるJavaクラスである必要があります。それがあなたに当てはまるかどうか確認できますか?

ガイダンスについては、次の例を確認してください。

http://viralpatel.net/blogs/tutorial-java-servlet-filter-example-using-eclipse-apache-tomcat/

上記のリンクから:

<filter>
    <filter-name>LogFilter</filter-name>
    <filter-class>
        net.viralpatel.servlet.filters.LogFilter
    </filter-class>
    <init-param>
        <param-name>test-param</param-name>
        <param-value>This parameter is for testing.</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>LogFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>



public class LogFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {...
    }
 }
于 2012-07-25T21:44:00.467 に答える
0

log.class簡単な解決策として、ファイルを次のディレクトリに配置してみてください。

tomcat/webapps/[your app name]/WEB-INF/classes/test 

そのディレクトリが存在しない場合は作成します。


.class ファイルを見つける方法:

ほとんどの場合、Eclipse のデフォルト設定では、ソース ファイル ( .java) を.class保存するたびにファイルにコンパイルされます。それ以外の場合は、CTRL-B (ビルド) を押して強制的に.classファイルにコンパイルする必要があります。

log.classこれが完了すると、次の Eclipse ワークスペースでファイルを見つけることができます。[your workspace name]/[your eclipse project name]/bin/test/

ワークスペース ディレクトリの場所は、通常、Eclipse を開始するとすぐに表示されます。UsersWindows 7 ではデフォルトでディレクトリ、WinXP および 2000 ではデフォルトでユーザーのDocuments and Settingsフォルダになると思います。

別の方法:

Eclipse ウィンドウの左側に「パッケージ エクスプローラー」ビューが表示されます。log.javaパッケージ ツリーにリーフが含まれます。そのリーフを右クリックしてShow In>Navigatorをクリックすると、「ナビゲータ」ビューで実際のファイル構造が開きます。

binそのビューにノードが表示されるはずです。その中にtestノードがあり、その中に が表示されますlog.class。それを右クリックしてコピーし、上部にあるディレクトリに移動して貼り付けます。

すべてがうまくいくはずです。

于 2012-07-25T21:53:04.873 に答える
0

これは、関連するクラスのソース コードに問題がある可能性があります。

最近、たまたま同じ問題が発生しました。非常に長い時間をかけて懸命に調査した結果、例外がクラスにエンコードされていることがわかりました。

$ jad BaseController.class 
Parsing BaseController.class...The class file version is 51.0 (only 45.3, 46.0 and 47.0 are supported)
 Generating BaseController.jad
$ cat BaseController.jad 
// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
...
import HttpServletRequest;
import HttpServletResponse;
import HttpSession;
...
public class BaseController
{
    public BaseController()
    {
        throw new Error("Unresolved compilation problems: \n\tThe import javax.servlet.http.HttpServletRequest cannot be resolved\n\tThe import javax.servlet.http.HttpServletResponse cannot be resolved\n\tThe import javax.servlet.http.HttpSession cannot be resolved\n\tHttpSession cannot be resolved to a type\n\tHttpServletRequest cannot be resolved to a type\n\tHttpSession cannot be resolved to a type\n\tHttpSession cannot be resolved to a type\n\tHttpServletRequest cannot be resolved to a type\n\tHttpServletRequest cannot be resolved to a type\n\tHttpServletResponse cannot be resolved to a type\n");
    }
...

したがって、必要なライブラリを使用してソースを再コンパイルすると、問題は解決します。

于 2016-08-23T17:10:03.830 に答える
-1

サーブレットのクラスパスに正しくコピーされていないと思います。

サーブレットのクラスパスを構成するものについては、こちらを参照してください。

サーブレットでのクラスパスの制御

于 2012-07-25T21:50:13.723 に答える