2012-09-03 28 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 
} 

}