java jetty json获取请求时间和持续时间

时间:2014-05-10 14:26:31

标签: java jax-rs

我正在尝试创建我的第一个非常简单的网络应用。我正在使用maven,码头,安静。我已经阅读了一些关于它的主题,但是它们经常难以完成更快速的begginer。而且我还没有弄清楚如何尽可能简单地摆脱这两个问题。

  1. 稍后我尝试让应用程序更复杂。但是我想现在测试一下,我怎样才能得到“请求”提交给服务器的时间。而且我还想花时间来获得客户的答案。我想以json格式显示信息。有一个简单的方法吗?我该怎么办?

    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("sample")
    public class HelloWorldService {
    
        @Path("/helloWorld/{first}/{second}/{third}")
        @GET
        @Produces(MediaType.APPLICATION_JSON)
        public HelloWorld helloWorld(@PathParam("first") String first, @PathParam("second") String  second, @PathParam("third") String third) {
            return new HelloWorld(first, second, third);
        }
    }
    
  2. 还有:

    public class HelloWorld {
    
        private String first;
        private String second;
        private String third;
    
    public HelloWorld(String first, String second, String third) {
        this.first = first;
        this.second = second;
        this.third= third;
    }
    
    public HelloWorld(String first, String second) {
        this.first = first;
        this.second = second;
    }
    
    public HelloWorld(){
    }
    
    public HelloWorld(String first) {
        this.first= first;
    }
    
        public String getFirst() {
            return first;
        }
    
        public String getSecond(){
            return second;
        }
    
        public String getThird(){
            return third;
        }
    }
    

    谢谢! :)

1 个答案:

答案 0 :(得分:2)

根据您的需要,您可以简单地衡量处理请求所需的时间:

class ResponseWrapper<T> {
    public final Long generationTime;
    public final T response;

    public ResponseWrapper(final Long generationTime, final T response) {
        this.generationTime = generationTime;
        this.response = response;
    }
}

@...
public ResponseWrapper<HelloWorld> helloWorld(...) {
    long startTime = System.currentTimeMillis();

    // process the request

    long elapsedTime = System.currentTimeMillis() - startTime;

    return new ResponseWrapper<HelloWorld>(elapsedTime , new HelloWorld(...));
}

或者,如果您需要更通用的解决方案,请使用filters from Servlet API

public class GenerationTimeFilter implements Filter {
    ...

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
       long startTime = System.currentTimeMillis();

       chain.doFilter(req, res);

       long elapsedTime = System.currentTimeMillis() - startTime;
    }
}

要了解如何修改ServletResponse内部过滤器,请参阅此问题:Looking for an example for inserting content into the response using a servlet filter


请记住,这种类型的测量不会给最终用户他/她必须等待获得响应的时间。您的应用程序服务器需要几毫秒来处理原始HTTP请求/响应处理,更不用说网络延迟了。