2012-09-03 84 views
1

在servlet内部doPost方法我设置了多值映射中的一些数据,如图所示。jersey:如何将数据从Servlet发送到泽西岛过滤器

protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
      HttpSession sess = request.getSession(); 
      System.out.println("Session ID For Servlet"+sess.getId()); 

      sess.setAttribute("Name","ID"); 

      MultivaluedMap formData = new MultivaluedMapImpl(); 
       formData.add("name1", "val1"); 
       formData.add("name2", "val2"); 

      response.sendRedirect("ajax/balances"); 
    } 

有谁请告诉我,我怎么能得到球衣过滤器内部的价值

这是我的筛选

public class MineFilter implements ContainerRequestFilter { 
     @Override 
    public ContainerRequest filter(ContainerRequest request) { 

      return request ; 
     } 

还是有,如果人们可以从Servlet来发送数据的任何更好的办法泽西岛过滤器

回答

0

在泽西岛有两种类型的接口ContainerRequstFilterContainerResponseFilter和这两个有一个方法void filter(conextInfo)所以在过滤器,如果我们只实现ContainerRequestFilter请求到达servlet和使它们有时也被称为前,将只被调用请求过滤器。现在,如果我们想拦截一个响应,我们需要编写一个实现这两个接口的类。

一个明显的原因是,当第一次进入请求时不需要responseContext,因为我们很难使用它,所以我们可以通过简单地实现ContainerRequestContext来省略它。现在,当我们谈论拦截响应时,我们可以清楚地看到需要使用RequestContext来获取有关请求的信息。所以为此目的,这就是我们所拥有的。因此,所谓的响应过滤器将具有过滤请求和响应的能力。因此,当我们重写ContainerResponseFilter的void过滤器(上下文信息)时,它既请求上下文又响应上下文。这里的请求上下文将处于只读模式。

所以一旦请求超过了servlet,你总是可以拦截响应并执行ContainerResponseFilter并从响应中获取值。

@Provider 
@Priority(2)  //set the priority just to make sure it is executed after the request filter 
public class CustomResponseFilter implements ContainerRequestFilter, ContainerResponseFilter{ 
@Override 
public void filter(ContainerRequestContext requestCOntext) throws IOException { 
    //dont Do anything here as this filter is intended for response processing 
} 

@Override 
public void filter(ContainerRequestContext requestContext, 
        ContainerResponseContex responseContext) throws IOException { 
    //work with the responseContext and let the requst pass through 
} 

}