出于日志记录的目的,我从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);
}
我在网络上找到了一些地方,作者说“不要覆盖服务”。
您如何看待我的方法?
答案 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