2016-06-10 88 views
2

我使用吉斯SERVET的正常工作创建一个servlet:添加过滤器吉斯的servlet

protected Injector getInjector() { 
    return Guice.createInjector(new ServletModule() { 
     protected void configureServlets() { 
      bind(MyService.class).to(MyServiceImpl.class); 
      serve("/myservlet").with(MyServlet.class); 
     } 
    }); 
} 

我的servlet是这样的:

@Inject 
private MyService myService; 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.getWriter().print(myService.hello("John Doe").toString()); 
} 

现在我想要一个过滤器添加到它像事情:

  bind(MyService.class).to(MyServiceImpl.class); 
      filter("/*").through(MyFilter.class); 
      serve("/myservlet").with(MyServlet.class); 

我的过滤器看起来是这样的:

@Singleton public class MyFilter implements Filter { 
    public void init(FilterConfig filterConfig) throws ServletException { } 
    public void doFilter(ServletRequest request, 
         ServletResponse response, 
         FilterChain chain) throws IOException, ServletException { 
     System.out.println("Yeah"); 
    } 
    public void destroy() { } 
} 

只要我添加过滤器,servlet就不会再被调用。

当我删除过滤器时,servlet再次工作。

我在做什么错?

+0

你的过滤代码是怎么样的? –

+0

@Singleton 公共类MyFilter实现过滤{ 公共无效的init(一个FilterConfig一个FilterConfig)抛出的ServletException { } 公共无效的doFilter(ServletRequest中的servletRequest,ServletResponse的ServletResponse的,FilterChain filterChain)抛出IOException异常,的ServletException { System.out的。的println( “是”); } public void destroy(){ } } – javapenguin

回答

1

问题不在于你的Guice程序集,而在于你的过滤器实现。你将不得不拨打:

chain.doFilter(request, response); 

doFilter方法通过过滤器上的处理来传递。您可以阅读有关javadoc中的典型过滤器的更多信息。