【问题标题】:How to use Guice Servlet with Wicket如何将 Guice Servlet 与 Wicket 一起使用
【发布时间】:2011-03-31 01:34:06
【问题描述】:

在使用 Guice Servlet 设置我的 Wicket 项目后,我得到了一个java.lang.IllegalStateException: filter path was not configured。不过,过滤器路径 已配置。我错过了什么吗?

web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">

    <display-name>node-sitter</display-name>

    <listener>
        <listener-class>com.mycompany.wicketapp.inject.ServletConfig</listener-class>
    </listener>
    <filter>
        <description>Initialises Guice</description>
        <filter-name>guiceFilter</filter-name>
        <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>guiceFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

Guice Servlet 监听器:

public class ServletConfig extends GuiceServletContextListener {

    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new Servlets());
    }

    private static class Servlets extends ServletModule {

        @Override
        protected void configureServlets() {
            bind(WicketFilter.class).in(Singleton.class);
            filterRegex("/.*").through(WicketFilter.class, withApplicationClass(WicketApplication.class));
        }

        private Map<String, String> withApplicationClass(Class<? extends WebApplication> applicationClass) {
            Map<String, String> initParams = new HashMap<String, String>(1);
            initParams.put("applicationClassName", applicationClass.getName());
            return initParams;
        }
    }
}

堆栈跟踪(页面被访问时):

java.lang.IllegalStateException: filter path was not configured
    at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:124)
    at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:194)
    at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:474)

【问题讨论】:

    标签: java jetty wicket guice guice-servlet


    【解决方案1】:

    Apparently,这个问题可以通过在过滤器中添加如下初始化参数来解决:

    initParams.put(WicketFilter.FILTER_MAPPING_PARAM, "/*");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2013-02-09
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多