Filter中chain.doFilter(req, res)的理解

在寫代碼中,每次看到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(),業務無法繼續往下處理;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章