Java HttpServlet,覆盖方法服务,最佳实践

时间:2015-06-03 07:38:11

标签: java servlets

出于日志记录的目的,我从HttpServlet覆盖服务方法,如下所示:

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
{
    logger.debug("enter servlet");
    logger.debug("Request Header: {}", MyHttpTools.requestHeaderToSting(req);

    super.service(req, resp);

    logger.debug("leaving servlet");
    logger.debug("Response Header: {}", MyHttpTools.responseHeaderToSting(resp);
}

我在网络上找到了一些地方,作者说“不要覆盖服务”。

您如何看待我的方法?

4 个答案:

答案 0 :(得分:1)

你的方法没有错,但是你可以在"清洁工" (在我看来)的方式,例如通过实施(和注册)javax.servlet.Filter,或使用AspectJ,或其他更常用的方法。

答案 1 :(得分:0)

你的做法没有任何内在错误。

作者说,不要覆盖service()商业代码,而是覆盖doPost()doGet()等方法。

答案 2 :(得分:0)

你的方法是正确的。您也可以使用aspectJ进行日志记录。

答案 3 :(得分:0)

  

HTTP servlet中的默认service()方法将请求路由到基于HTTP传输方法(POST,GET等)的另一个方法。例如,HTTP POST请求被路由到doPost()方法,HTTP GET请求被路由到doGet()方法,依此类推。这使得servlet能够根据传输方法执行不同的请求数据处理。 由于路由发生在service()中,因此通常不需要覆盖HTTP servlet中的service()。而是覆盖doGet(),doPost()等,具体取决于预期的请求类型。

有关详情请参阅本文:Sun Java System Web Server 6.1 SP6 Programmer's Guide to Web Applications