Java 如何从RESTfulWeb服务方法调用servlet?

Java 如何从RESTfulWeb服务方法调用servlet?,java,web-services,rest,servlets,Java,Web Services,Rest,Servlets,我已经在存在业务逻辑的地方编写了一个servlet。我将从调用我的RESTfulWeb服务方法的调用程序中获得一个令牌。有了这个令牌,我需要使用serlvet中编写的业务逻辑进行验证。我还映射了一个过滤器,它在命中servlet之前设置了一些头值 现在我想从RESTfulWeb服务方法中访问过滤器和servlet。我能够通过以下方式获得ServletContext @上下文 私有ServletContext ServletContext 但是如何获取HttpServletRequest、Http

我已经在存在业务逻辑的地方编写了一个servlet。我将从调用我的RESTfulWeb服务方法的调用程序中获得一个令牌。有了这个令牌,我需要使用serlvet中编写的业务逻辑进行验证。我还映射了一个过滤器,它在命中servlet之前设置了一些头值

现在我想从RESTfulWeb服务方法中访问过滤器和servlet。我能够通过以下方式获得ServletContext

@上下文 私有ServletContext ServletContext

但是如何获取HttpServletRequest、HttpServletResponse对象。因为,我需要在HttpServletRequest中设置令牌的属性

请提出解决方案

提前谢谢

编辑

我需要将令牌设置为授权标头。下面是代码。 web.xml

Servlet类

现在,我可以通过在web.xml中为Filter添加下面的代码来点击Filter

 <filter-mapping>
<filter-name>HeaderFilter</filter-name>
<url-pattern>/dummy</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>

但在过滤器中设置的用于授权的值在servlet中调用时为空。我需要在HeaderFilter的授权标头中设置令牌。我一直在做这件事

您使用的是jax rs,需要制作一个带有@Context注释的控件:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;


@Path("helloword")
public class SampleControler {

    @GET
    public String doGetAsHtml(@Context HttpServletRequest req, @Context HttpServletResponse response) {
        req.setAttribute("my attr", "my object");
        .....
        return ...;
    }
}

这应该会起作用。

与ServletContext的方法相同。使用@Context。感谢您的回复。事实上,我对RESTfulWeb服务还不熟悉。如何在我的web服务方法中使用这个SampleController类。你能给我举个例子吗?看看这个页面,这是一个很好的起点:mkyong.com/webservices/jax-rs/jax-rs-path-uri-matching-example事实上,jax_-rs规范定义uri映射路径是指向服务器的url hhtp:iiihost:port/contextApp+路径注释给出的路径。在我给出的示例中,您可以在本地调用localhost:8080/appContext/hellowordI尝试了这个方法,并且能够获得HttpServletRequest和HttpServletResponse。在编写HeaderFilter之前,我正在使用servlet SampleServlet。[link]是指向REST Web服务的URL。问题是我的过滤器在我的servlet之前没有被命中。我做错什么了吗???真的,我不知道!我需要看看你的源代码,给你一个答案。请编辑您的问题,复制粘贴您的源代码,并正确缩进,以便了解网站要求。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest=(HttpServletRequest)request;
    System.out.println("********Filter**********");
    HttpServletResponse httpResponse=(HttpServletResponse)response;
    if(request.getAttribute("param")!=null){
        String token=request.getAttribute("param").toString();

        System.out.println("Filter httpRequest: " + token);

        Wrapper requestWrapper = new Wrapper(httpRequest);
        requestWrapper.addHeader("Authorization", token);

        chain.doFilter(requestWrapper, response);

    }
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ServletContext ctx=getServletContext();  
    System.out.println("Inside Dummy Servlet");

    System.out.println(request.getAttribute("param").toString());

    System.out.println("Request Header: "+response.getHeader("Authorization").toString());
}
 <filter-mapping>
<filter-name>HeaderFilter</filter-name>
<url-pattern>/dummy</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;


@Path("helloword")
public class SampleControler {

    @GET
    public String doGetAsHtml(@Context HttpServletRequest req, @Context HttpServletResponse response) {
        req.setAttribute("my attr", "my object");
        .....
        return ...;
    }
}