Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet web.xml筛选器--未找到类异常_Java_Web Services_Jsp_Servlets_Web.xml - Fatal编程技术网

Java Servlet web.xml筛选器--未找到类异常

Java Servlet web.xml筛选器--未找到类异常,java,web-services,jsp,servlets,web.xml,Java,Web Services,Jsp,Servlets,Web.xml,我在设置过滤器时遇到问题- 我在web.xml中定义的过滤器如下所示 <filter> <filter-name>Log</filter-name> <filter-class>test.log</filter-class> </filter> <filter-mapping> <filter-name>Log</filter-name> <url-

我在设置过滤器时遇到问题- 我在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>

谢谢,

过滤器类参数需要是一个Java类,它应该实现过滤器接口。你能检查一下你的情况吗

检查此示例以获取指导:

从以上链接:

<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 {...
    }
 }

对数滤波器
net.viralpatel.servlet.filters.LogFilter
测试参数
此参数用于测试。
对数滤波器
/*
公共类LogFilter实现过滤器{
公共无效doFilter(ServletRequest-req、ServletResponse-res、,
FilterChain链)引发IOException,ServletException{。。。
}
}

我猜您没有将其正确复制到servlet类路径中

有关servlet类路径的组成部分,请参见此处:


要获得简单的解决方案,请尝试将您的
log.class
文件放入此目录:

tomcat/webapps/[your app name]/WEB-INF/classes/test 
如果该目录不存在,请创建该目录


如何查找.class文件:

大多数情况下,Eclipse的默认设置会在保存时将源文件(
.java
)编译成
.class
文件,否则可能需要按CTRL-B(build)将其编译成
.class
文件

完成后,您将能够在Eclipse工作区中找到
log.class
文件,地址为:
[您的工作区名称]/[您的Eclipse项目名称]/bin/test/

工作区目录位置通常在启动eclipse时可见。对于Windows7,我认为它默认为
用户
目录,WinXP和2000默认为用户的
文档和设置
文件夹

或者:

在Eclipse窗口的左侧应该有一个“PackageExplorer”视图。它将在包树中包含一个
log.java
叶。如果右键单击该页,然后单击
Show In
Navigator
,将在“Navigator”视图中打开实际的文件结构

在该视图中应该有一个可见的
bin
节点。在里面你应该找到一个
test
节点,然后在里面你会看到
log.class
。您可以右键单击它来复制它,然后简单地导航到我在顶部提供的目录并粘贴到其中


一切都会好起来的。

有趣的是,同样的问题今天发生在我身上,而它昨天还在工作。在调查显示没有任何问题后,我得出结论,这是一个eclipse环境问题:

  • 停止tomcat服务器
  • 已清理项目(项目->清理…)
  • 刷新整个项目(右键单击项目名称->刷新)
  • 再次在上启动服务器

问题消失了

这可能是相关类的源代码中的错误

最近我碰巧看到了同样的问题。 经过长时间的艰苦调查,我发现异常是在类中编码的:

$ 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");
    }
...

因此,在使用必要的libs重新编译源代码后,问题就解决了。

曾经有过问题,最后右键单击project->Build project帮助。

在名为
test
的包中是否有类
日志
?是否部署了它?包装正确吗?FWIW,您可能应该遵循Java命名约定,哪些状态类名称应该以大写字母开头。该类是否在war/WEB-INF/lib中?它也可能在
WEB-INF/classes/test
我的Java资源中有该类。我必须在类路径中复制什么?在servlet范围内执行代码时,它需要在几个特定的位置之一。这取决于servlet容器,以及如何打包类,但解决这一问题的最简单方法是抓取.class并将其放入/WEB-INF/classes/testHi这可能是个愚蠢的问题,但是,当我在Eclipse上运行项目时,如何对.class文件进行分级?@Fox添加了更多关于定位
.class
文件的数据。我也遇到了同样的问题,但我特意清理了我的项目。感谢您的回答,因为我不知道找到“刷新”选项需要多长时间;)
tomcat/webapps/[your app name]/WEB-INF/classes/test 
$ 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");
    }
...