java - 为什么嵌套类不能用作Filter的类

标签 java servlets filter web.xml nested-class

我试图将嵌套类设置为 Filter 类,但 Intellij IDEA 说它找不到这个类,当我尝试在 Web 容器中运行此应用程序时也会发生同样的情况:

<filter>
    <filter-name>test</filter-name>
    <filter-class>com.web.filters.SimpleFilter.NestedClassFilter</filter-class>
</filter>

以及我尝试使用的类:

public class SimpleFilter implements Filter {
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        doFilter(request, response, filterChain);
    }

    protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException{
    }

    public void init(FilterConfig filterConfig) throws ServletException {
    }

    public void destroy() {
    }

    public static class NestedClassFilter extends SimpleFilter {

        @Override
        protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
            filterChain.doFilter(request, response);
        }
    }
}

我遇到的异常:

Caused By: java.lang.ClassNotFoundException: com.web.filters.SimpleFilter.NestedClassFilter
        at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
        at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
        at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:64)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

最佳答案

因为您应该在此处使用完全限定的类名

<filter-class>com.web.filters.SimpleFilter.NestedClassFilter</filter-class>

您输入的不是完全限定的类名。应该是

<filter-class>com.web.filters.SimpleFilter$NestedClassFilter</filter-class>

注意$

See here for details why.

关于java - 为什么嵌套类不能用作Filter的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20402661/

相关文章:

java - 获取错误 "java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/html/HtmlElement"

java - 无法在 Windows 8.1(64 位)上启动 Eclipse Luna SR2

JAVA:对于更新和插入,我可以使用端点或 GET 请求来处理 servlet 中的数据吗

java - 在服务器端向用户显示问题 [Java]

javascript - 如何删除生成的数组中显示在下拉列表中的空白行

javascript - 当变量发生变化时如何创建动态表?

java - 有没有一种设计模式可以提供更有效的解决方案?

java - Android SecondDialogFragment 未从 DialogFragment 显示

java - CodeNameOne 将图像上传到 servlet 时出现 StateMachine 问题

Android 如何使用 androidx.recyclerview.widget.DiffUtil 应用多个过滤器