code: private void handleActionException(String target, HttpServletRequest request, HttpServletResponse response, Action action, ActionException e) {
  		int errorCode = e.getErrorCode();
  		String msg = null;
  		if (errorCode == 404) {
  			msg = "404 Not Found: ";
  		} else if (errorCode == 400) {
  			msg = "400 Bad Request: ";
  		} else if (errorCode == 401) {
  			msg = "401 Unauthorized: ";
  		} else if (errorCode == 403) {
  			msg = "403 Forbidden: ";
  		}
  		
  		if (msg != null) {
  			if (log.isWarnEnabled()) {
  				String qs = request.getQueryString();
  				msg = msg + (qs == null ? target : target + "?" + qs);
  				if (e.getMessage() != null) {
  					msg = msg + "\n" + e.getMessage();
  				}
  				log.warn(msg);
  			}
  		} else {
  			if (log.isErrorEnabled()) {
  				String qs = request.getQueryString();
  				log.error(errorCode + " Error: " + (qs == null ? target : target + "?" + qs), e);
  			}
  		}
  		
  		e.getErrorRender().setContext(request, response, action.getViewPath()).render();
  	}
docs: 抽取出该方法是为了缩短 handle 方法中的代码量，确保获得 JIT 优化，
  方法长度超过 8000 个字节码时，将不会被 JIT 编译成二进制码
  
  通过开启 java 的 -XX:+PrintCompilation 启动参数得知，handle(...)
  方法(73 行代码)已被 JIT 优化，优化后的字节码长度为 593 个字节，相当于
  每行代码产生 8.123 个字节