【问题标题】:java Filter blocking the file request?java过滤器阻塞文件请求?
【发布时间】:2012-08-13 14:43:23
【问题描述】:

我在 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 中的过滤器部分,它也能正常工作。问题出在过滤器上。
是什么导致错误?过滤器实现有什么错误吗?

【问题讨论】:

    标签: java jsp tomcat servlets servlet-filters


    【解决方案1】:

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

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

    问候

    【讨论】:

    • 检查了它有错误 "java.lang.ClassNotFoundException: filt.Background" 的日志。但是Background.java 在“WEB-INF/classes.flit”目录中。这是怎么回事?
    • 应该在WEB-INF/classes/filt/Background.class
    • 我有 WEB-INF/classes/filt/Background.java .. 这还不够吗?
    • 完全没有,tomcat需要一个编译类,所以你需要将你的.java编译成一个.class,你的问题应该得到解决
    • 但是如何做到这一点。使用 javac Background.java 给出“未找到类过滤器”。
    【解决方案2】:

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

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

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

    否则,它就是你的数据库

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-07
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 2012-10-14
      • 2020-12-14
      • 2021-08-28
      相关资源
      最近更新 更多