content: package com.admin4j.common.util;
  
  
  import com.admin4j.common.exception.SystemException;
  import com.alibaba.fastjson2.JSONObject;
  import org.apache.commons.lang3.StringUtils;
  import org.springframework.web.context.request.RequestAttributes;
  import org.springframework.web.context.request.RequestContextHolder;
  import org.springframework.web.context.request.ServletRequestAttributes;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  import java.io.IOException;
  import java.io.UnsupportedEncodingException;
  import java.net.URLDecoder;
  import java.net.URLEncoder;
  import java.util.Enumeration;
  import java.util.LinkedHashMap;
  import java.util.Map;
  
  /**
   * 客户端工具类
   *
   * @author andanyang
   */
  public class ServletUtils {
      /**
       * 获取String参数
       */
      public static String getParameter(String name) {
          return getRequest().getParameter(name);
      }
  
      /**
       * 获取String参数
       */
      public static String getParameter(String name, String defaultValue) {
          return StringUtils.defaultIfEmpty(getRequest().getParameter(name), defaultValue);
      }
  
      /**
       * 获取Integer参数
       */
      public static Integer getParameterToInt(String name) {
          return Integer.parseInt(getRequest().getParameter(name));
      }
  
      /**
       * 获取Integer参数
       */
      public static Integer getParameterToInt(String name, Integer defaultValue) {
          return Integer.parseInt(getRequest().getParameter(name), defaultValue);
      }
  
      /**
       * 获取request
       */
      public static HttpServletRequest getRequest() {
          try {
              return getRequestAttributes().getRequest();
          } catch (Exception e) {
              return null;
          }
      }
  
      /**
       * 获取response
       */
      public static HttpServletResponse getResponse() {
          try {
              return getRequestAttributes().getResponse();
          } catch (Exception e) {
              return null;
          }
      }
  
      /**
       * 获取session
       */
      public static HttpSession getSession() {
          return getRequest().getSession();
      }
  
      public static ServletRequestAttributes getRequestAttributes() {
          try {
              RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
              return (ServletRequestAttributes) attributes;
          } catch (Exception e) {
              return null;
          }
      }
  
      public static Map<String, String> getHeaders(HttpServletRequest request) {
          Map<String, String> map = new LinkedHashMap<>();
          Enumeration<String> enumeration = request.getHeaderNames();
          if (enumeration != null) {
              while (enumeration.hasMoreElements()) {
                  String key = enumeration.nextElement();
                  String value = request.getHeader(key);
                  map.put(key, value);
              }
          }
          return map;
      }
  
  
      /**
       * 将字符串渲染到客户端
       *
       * @param object     渲染对象
       * @param httpStatus http 状态
       */
      public static void renderJson(Object object, int httpStatus) {
          renderString(JSONObject.toJSONString(object), httpStatus);
      }
  
      public static void renderString(String str) {
          renderString(str, 200);
      }
  
      public static void renderString(String str, int httpStatus) {
  
          HttpServletResponse response = getResponse();
          renderString(response, str, httpStatus);
      }
  
  
      /**
       * 将字符串渲染到客户端
       *
       * @param response   渲染对象
       * @param string     待渲染的字符串
       * @param httpStatus http 状态
       */
      public static void renderString(HttpServletResponse response, String string, int httpStatus) {
          try {
              if (response == null) {
                  return;
              }
              response.setStatus(httpStatus);
              response.setContentType("application/json");
              response.setCharacterEncoding("utf-8");
              response.getWriter().write(string);
              // 通常您不应该关闭流。在 servlet 完成生命周期之后，servlet 容器会自动关闭流。
              // 举个例子，如果你关闭了流的话，在你实现的 Filter 中就不能再使用了。
              // out.flush();
              // out.close();
          } catch (IOException e) {
              throw new SystemException(e);
          }
      }
  
      /**
       * 是否是Ajax异步请求
       *
       * @param request
       */
      public static boolean isAjaxRequest(HttpServletRequest request) {
          String accept = request.getHeader("accept");
          if (accept != null && accept.indexOf("application/json") != -1) {
              return true;
          }
  
          String xRequestedWith = request.getHeader("X-Requested-With");
          if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) {
              return true;
          }
  
          String uri = request.getRequestURI();
          if (StringUtils.equalsAnyIgnoreCase(uri, ".json", ".xml")) {
              return true;
          }
  
          String ajax = request.getParameter("__ajax");
          return StringUtils.equalsAnyIgnoreCase(ajax, "json", "xml");
      }
  
      /**
       * 内容编码
       *
       * @param str 内容
       * @return 编码后的内容
       */
      public static String urlEncode(String str) {
          try {
              return URLEncoder.encode(str, "UTF-8");
          } catch (UnsupportedEncodingException e) {
              return "";
          }
      }
  
      /**
       * 内容解码
       *
       * @param str 内容
       * @return 解码后的内容
       */
      public static String urlDecode(String str) {
  
          try {
              return URLDecoder.decode(str, "UTF-8");
          } catch (Exception e) {
              return "";
          }
      }
  }
  