正在调用 Servlet 的服务和 init 方法,但在我扩展 ZuulServlet 时没有调用 doGet
Servlet's service and init method are being called, but not doGet while I am extending ZuulServlet
在我开始之前,我会说,我已经看过类似的问题Servlet's service and init method are being called, but not doGet
但这对我帮助很大。
这里要注意的一点是我的 servlet class 扩展 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);
}
}
如果有人能帮助我找出我做错的地方,我将不胜感激。
看起来 ZuulServlet
不适合这样使用。如果您查看 ZuulServlet.service
的源代码,它基本上会将所有内容交给 ZuulRunner
.
在我看来,您需要考虑挂钩 Zuul 路由,而不是尝试自己扩展 ZuulServlet
。
在我开始之前,我会说,我已经看过类似的问题Servlet's service and init method are being called, but not doGet 但这对我帮助很大。 这里要注意的一点是我的 servlet class 扩展 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);
}
}
如果有人能帮助我找出我做错的地方,我将不胜感激。
看起来 ZuulServlet
不适合这样使用。如果您查看 ZuulServlet.service
的源代码,它基本上会将所有内容交给 ZuulRunner
.
在我看来,您需要考虑挂钩 Zuul 路由,而不是尝试自己扩展 ZuulServlet
。