-3

我在 Tomcat 7 中的过滤器实现存在问题。我有欢迎页面index.jsp。没有过滤器它工作正常。但是当我向它添加一个小过滤器时,我得到了404-Not Found错误。
我有一个过滤器类(在 /WEB-INF/classes/filt/Background.java 中),如下所示:

package filt;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.*;
import java.util.*;
import java.net.*;

public class Background implements Filter {

    private FilterConfig filterConfig;

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
        throws IOException, ServletException {
try
{
FileWriter fstream = new FileWriter("out.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write("Hello Java");
out.close();
}
catch(Exception e)
{
System.out.println(e);
}
filterChain.doFilter(request, response);
}

public FilterConfig getFilterConfig() {
return filterConfig;
}

public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}

public void destroy() {}

}

我的 web.xml :

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee">
  <application>insights</application>
  <version>1</version>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>Backgd</filter-name>
    <filter-class>filt.Background</filter-class>
</filter>
<filter-mapping>
    <filter-name>Backgd</filter-name>
    <url-pattern>/index.jsp</url-pattern>
</filter-mapping>
</web-app>

来自日志的错误:

SEVERE: Exception starting filter Backgd
java.lang.ClassNotFoundException: filt.Background

即使现在,如果我删除 web.xml 中的过滤器部分,它也能正常工作。问题出在过滤器上。
是什么导致错误?过滤器实现中的任何错误?

4

2 回答 2

1

您的过滤器代码很奇怪,它只是将 hello world 写入文件并让请求继续它的方式。

在 catalina.out 上搜索,看看您是否有任何消息。还要检查您的过滤器生成的文件是否已写入。

问候

于 2012-08-17T12:50:37.803 回答
0

我不确定这如何特别适用于 Tomcat 7,但这甚至无法在 Google App Engine 中编译。原因很简单,您在任何情况下都不能写入输出文件并将其存储到 HDD ......运行时环境不支持的 FileWriter 类,因此 java.lang.ClassNotFoundException。不知道为什么它让你首先编译。原因很简单,您可以从文件中读取,但不能写入文件,否则,您可能拥有一个解释和生成另一种语言的应用程序。

我没有看到您过滤器的任何其他问题,除了...如果您想测试其工作和匹配是否正确,请改用它

System.out.println("Hello Java");

否则,它是您的数据库

于 2014-04-21T01:19:12.333 回答