开发者社区> 问答> 正文

tomcat8.0.11,配置@WebFilter("/foo"),启动报错?报错

tomcat8.0.11,jdk7,想使用servlet3.1的技术。

我写了一个过滤器,如下:

package net.xxzl.servlet.filter;

import java.io.IOException;
import javax.servlet.DispatcherType;
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 javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 如果登录的session值失效了,则提示重新登录
 * 如果是 resin 服务器,请在 resin.xml 里将 session 的持久化配置注释掉
 * 并且加入超时配置
 */
@WebFilter(
    filterName = "Filter0",
    dispatcherTypes = {
        DispatcherType.FORWARD,
        DispatcherType.INCLUDE,
        DispatcherType.REQUEST,
        DispatcherType.ERROR,
        DispatcherType.ASYNC
    },
    urlPatterns={
        "/common/*Servlet",
        "/prog/*/*Servlet",
        "/frames/*/*.jsp",
        "/pages/*/*.jsp"
    },
    asyncSupported = true
     )
public class Filter0 implements Filter {

    /**
     * Default constructor.
     */
    public Filter0() {
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        
        System.out.println("Filter0");
        
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse res = (HttpServletResponse)response;
        
        //若存在会话则返回该会话,否则不新建会话并返回NULL
        HttpSession session = req.getSession( false );
        //如果session存在则继续,否则跳转到错误页面
        if ( session != null && session.getAttribute( "userinfo" ) != null ) {
            //清除缓存
            res.setHeader("Cache-Control", "no-cache");
            res.setHeader("Pragma", "no-cache");
            res.setDateHeader("Expires", -1);
            chain.doFilter(req, res);
        } else {
            if ( session != null ) {
                //清除session
                session.invalidate();
            }
            request.getRequestDispatcher("/include/error3.jsp").forward(req, res);
        }
        
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
    }

}

然后启动TOMCAT,结果总是提示:

03-Dec-2015 16:20:59.238 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
 org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/sbz]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1071)
    at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1722)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> /frames/*/*.jsp in filter mapping
    at org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:2914)
    at org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:2863)
    at org.apache.catalina.startup.ContextConfig.configureContext(ContextConfig.java:1267)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1172)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:767)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:302)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5074)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 10 more

按网上搜索的答案,完全排除了项目使用的 jar 版本不匹配的问题。。现在我找不到原因。

请求帮助!!谢谢

展开
收起
爱吃鱼的程序员 2020-06-10 10:19:45 699 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    <spanstyle="font-family:'MicrosoftYaHei',Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">urlPatterns不能配成/prog/*/*Servlet

    <spanstyle="font-family:'MicrosoftYaHei',Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">只能是/xxx/.xxx那为什么resin这样配置就没有问题呢?

    2020-06-10 10:20:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Tomcat 的云原生演进 立即下载
Apache NiFi Crash Course Intro 立即下载
低代码开发师(初级)实战教程 立即下载