package com.hanyong.utils;
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;
/**
* 用戶端工具類
*
* @Author: hanYong
* @CreateTime: 2019
*/
public class ServletUtils {
/**
* 請求格式為json
*/
private static final String APPLICATION_JSON = "application/json";
/**
* 請求格式為xml
*/
private static final String XML_HTTP_REQUEST = "XMLHttpRequest";
/**
* json字尾
*/
private static final String JSON_SUFFIX = ".json";
/**
* xml字尾
*/
private static final String XML_SUFFIX = ".xml";
/**
* 索引越界
*/
private static final int INDEX_NOT_FOUND = -1;
/**
* 擷取String參數
*
* @param name 參數名
* @return String 參數值
*/
public static String getParameter(String name) {
return getRequest().getParameter(name);
}
/**
* 擷取String參數
*
* @param name 參數名
* @param defaultValue 預設值
* @return String 參數值
*/
public static String getParameter(String name, String defaultValue) {
return toStr(getRequest().getParameter(name), defaultValue);
}
/**
* 擷取Integer參數
*
* @param name 參數名
* @return Integer 參數值
*/
public static Integer getParameterToInt(String name) {
return toInt(getRequest().getParameter(name), null);
}
/**
* 擷取Integer參數
*
* @param name 參數名
* @param defaultValue 預設值
* @return Integer 參數值
*/
public static Integer getParameterToInt(String name, Integer defaultValue) {
return toInt(getRequest().getParameter(name), defaultValue);
}
/**
* 擷取request
*
* @return HttpServletRequest
*/
public static HttpServletRequest getRequest() {
return getRequestAttributes().getRequest();
}
/**
* 擷取response
*
* @return HttpServletResponse
*/
public static HttpServletResponse getResponse() {
return getRequestAttributes().getResponse();
}
/**
* 擷取session
*
* @return HttpSession
*/
public static HttpSession getSession() {
return getRequest().getSession();
}
/**
* 擷取Attributes
*
* @return ServletRequestAttributes
*/
public static ServletRequestAttributes getRequestAttributes() {
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
return (ServletRequestAttributes) attributes;
}
/**
* 将字元串渲染到用戶端
*
* @param response 渲染對象
* @param string 待渲染的字元串
* @return null
*/
public static String renderString(HttpServletResponse response, String string) {
try {
response.setContentType(APPLICATION_JSON);
response.setCharacterEncoding("utf-8");
response.getWriter().print(string);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 是否是Ajax異步請求
*
* @param request 用戶端請求
* @return boolean
*/
public static boolean isAjaxRequest(HttpServletRequest request) {
String accept = request.getHeader("accept");
if (accept != null && accept.contains(APPLICATION_JSON)) {
return true;
}
String xRequestedWith = request.getHeader("X-Requested-With");
if (xRequestedWith != null && xRequestedWith.contains(XML_HTTP_REQUEST)) {
return true;
}
String uri = request.getRequestURI();
if (inStringIgnoreCase(uri, JSON_SUFFIX, XML_SUFFIX)) {
return true;
}
String ajax = request.getParameter("__ajax");
return inStringIgnoreCase(ajax, "json", "xml");
}
/**
* 轉換為int<br>
* 如果給定的值為空,或者轉換失敗,傳回預設值<br>
* 轉換失敗不會報錯
*
* @param value 被轉換的值
* @param defaultValue 轉換錯誤時的預設值
* @return Integer
*/
public static Integer toInt(Object value, Integer defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Integer) {
return (Integer) value;
}
if (value instanceof Number) {
return ((Number) value).intValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Integer.parseInt(valueStr.trim());
} catch (Exception e) {
return defaultValue;
}
}
/**
* 轉換為字元串<br>
* 如果給定的值為null,或者轉換失敗,傳回預設值<br>
* 轉換失敗不會報錯
*
* @param value 被轉換的值
* @param defaultValue 轉換錯誤時的預設值
* @return String
*/
public static String toStr(Object value, String defaultValue) {
if (null == value) {
return defaultValue;
}
if (value instanceof String) {
return (String) value;
}
return value.toString();
}
/**
* 是否包含字元串(不區分大小寫)
*
* @param str 驗證字元串
* @param searchStrings 字元串組
* @return boolean
*/
public static boolean inStringIgnoreCase(String str, String... searchStrings) {
if (str != null && searchStrings != null) {
for (String s : searchStrings) {
if (str.equalsIgnoreCase(StringUtils.trim(s))) {
return true;
}
}
}
return false;
}
}