在寫代碼中,每次看到Filter(過濾器)中 chain.doFilter(req, res);都不懂爲什麼要加這一句,他的作用是什麼;代碼下面也有:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
ContentCachingRequestWrapper req=new ContentCachingRequestWrapper((HttpServletRequest) request);
ContentCachingResponseWrapper res=new ContentCachingResponseWrapper((HttpServletResponse) response);
long startTime = System.currentTimeMillis();
String serverUrl = req.getServletPath();
//不懂這句什麼意思
chain.doFilter(req, res);
long endTime = System.currentTimeMillis();
try {
int status = res.getStatus();
String charset=res.getCharacterEncoding();
//響應體
String responsePayload = getPayLoad(res.getContentAsByteArray(),res.getCharacterEncoding());
res.copyBodyToResponse();
if(writeLogService==null) {
writeLogService = (WriteLogService) ServiceLocator.getInstance().getCtx().getBean("writeLogServiceImpl");
}
writeLogService.writeLog(startTime,endTime,serverUrl,postparams,status,responsePayload,charset);
} catch (Exception e) {
e.printStackTrace();
}
}
作用
- 在doFilter()方法中,在chain.doFilter()之前的代碼,一般是對request執行的過濾操作;
- 在chain.doFilter()後面的代碼,一般是對response執行的操作;
- chain.doFiter()執行下一個過濾器或者業務處理器。
- 如果在doFilter()方法中,不寫chain.doFilter(),業務無法繼續往下處理;