2

在 servlet doPost 方法中,我在 MultivaluedMap 中设置了一些数据,如图所示。

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 发送到 Jersey 过滤器,有没有更好的方法?

4

1 回答 1

0

在 Jersey 中有两种类型的接口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
 }

}
于 2016-08-31T06:46:33.297 回答