1

在开始之前,我会说,我已经看到过类似的问题 Servlet 的服务和 init 方法正在被调用,但不是 doGet , 但这对我有很大帮助。这里要注意的是,我的 servlet 类扩展了 com.netflix.zuul.http.ZuulServlet(出于特定原因进行路由),并且在服务方法中我调用了 super.service(servletRequest,servletResponse); .当我进行 http get 调用时,我看到我的 service() 方法被调用,但 doGet() 方法没有被调用但是作为响应,我得到一个没有任何主体的“HTTP/1.1 200 OK”,这当然是我的 doGet() 方法不发送。下面是我的代码片段。

public class AppHealthServlet extends ZuulServlet {
@Override
public void init() throws ServletException {
    super.init();
    logger.info("AppHealthServlet called ");
    message = "pong";
}

@Override
public void service(ServletRequest servletRequest,
                    ServletResponse servletResponse) throws ServletException, IOException {
    logger.info("AppHealthServlet service called ");
    try {
        RequestContext.getCurrentContext().set("health", true);
        super.service(servletRequest,servletResponse);
    } finally {
        logger.info("AppHealthServlet service done ");
    }
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    super.doGet(req, resp);
    logger.info("AppHealthServlet doGet called ");
    // Set response content type
    resp.setContentType("text/html");
    PrintWriter out = resp.getWriter();
    out.println("<h1>" + message + "</h1>");
    resp.setStatus(AppHealthServlet.SC_OK);
}
}

如果有人可以帮助我找出我做错的地方,将不胜感激。

4

1 回答 1

1

看起来ZuulServlet不应该像这样使用。如果您查看做什么的源代码ZuulServlet.service,它基本上将所有内容都交给了ZuulRunner.

在我看来,您需要考虑与 Zuul 路由挂钩,而不是尝试扩展ZuulServlet自己。

于 2016-01-20T15:16:29.347 回答