2016-01-20 58 views
1

在我开始之前,我会说,我已经看到类似的问题Servlet's service and init method are being called, but not doGet 但这种帮助我很多。 这里需要注意的是,我的servlet类扩展为com.netflix.zuul.http.ZuulServlet(它具有特定原因的路由选择)和服务方法我打电话给super.service(servletRequest,servletResponse);。当我做了http调用,我看到我的service()方法被调用,但是doGet()方法没有被调用,但是在响应中我得到一个没有任何机构的“HTTP/1.1 200 OK”,这当然是我的doGet()方法不发送。以下是我的代码片段。Servlet的服务和初始化方法正在调用,但不是doGet,而我正在扩展ZuulServlet

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

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

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

将不胜感激,如果任何人都可以帮助我弄清楚我在哪里做错了。

回答

1

看起来像ZuulServlet并不意味着要这样使用。如果您查看ZuulServlet.service所做的源代码,它基本上将所有内容交给ZuulRunner

在我看来,你需要考虑进入Zuul路由,而不是试图自己扩展ZuulServlet

+0

我写了一个新的servlet,它扩展了HttpServlet而不是ZuulServlet,它为我完成了这项工作 – RIPAN

相关问题