package com.hdw.common.core.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.net.HttpHeaders;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.MediaType;
import org.springframework.util.Assert;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.util.*;
import java.util.Map.Entry;
/**
* @Description Http与Servlet工具类
* @Author JacksonTu
* @Date 2020/3/5 19:40
*/
public class WebUtil {
private final static String staticSuffix = ".css,.js,.png,.jpg,.gif,.jpeg,.bmp,.ico,.swf,.psd,.htc,.htm,.html,.crx,.xpi,.exe,.ipa,.apk,.woff2,.ico,.swf,.ttf,.otf,.svg,.woff";
/**
* 静态文件后缀
*/
private final static String[] staticFiles = StringUtils.split(staticSuffix, ",");
/**
* 动态映射URL后缀
*/
private final static String urlSuffix = ".html";
public static String[] getStaticFiles() {
return staticFiles;
}
/**
* 设置 Cookie(生成时间为1天)
*
* @param name 名称
* @param value 值
*/
public static void setCookie(HttpServletResponse response, String name, String value) {
setCookie(response, name, value, 60 * 60 * 24);
}
/**
* 设置 Cookie
*
* @param name 名称
* @param value 值
*/
public static void setCookie(HttpServletResponse response, String name, String value, String path) {
setCookie(response, name, value, path, 60 * 60 * 24);
}
/**
* 设置 Cookie
*
* @param name 名称
* @param value 值
* @param maxAge 生存时间(单位秒)
*/
public static void setCookie(HttpServletResponse response, String name, String value, int maxAge) {
setCookie(response, name, value, "/", maxAge);
}
/**
* 设置 Cookie
*
* @param name 名称
* @param value 值
* @param maxAge 生存时间(单位秒)
* @param path 路径
*/
public static void setCookie(HttpServletResponse response, String name, String value, String path, int maxAge) {
Cookie cookie = new Cookie(name, null);
cookie.setPath(path);
cookie.setMaxAge(maxAge);
try {
cookie.setValue(URLEncoder.encode(value, "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.addCookie(cookie);
}
/**
* 移除cookie
*
* @param response
* @param name
*/
public static void removeCookie(HttpServletResponse response, String name) {
Cookie cookie = new Cookie(name, null);
cookie.setPath("/");
cookie.setMaxAge(0);
cookie.setValue(null);
response.addCookie(cookie);
}
/**
* 获得指定Cookie的值
*
* @param name 名称
* @return 值
*/
public static String getCookie(HttpServletRequest request, String name) {
return getCookie(request, null, name, false);
}
/**
* 获得指定Cookie的值,并删除。
*
* @param name 名称
* @return 值
*/
public static String getCookie(HttpServletRequest request, HttpServletResponse response, String name) {
return getCookie(request, response, name, true);
}
/**
* 获得指定Cookie的值
*
* @param request 请求对象
* @param response 响应对象
* @param name 名字
* @param isRemove 是否移除
* @return 值
*/
public static String getCookie(HttpServletRequest request, HttpServletResponse response, String name, boolean isRemove) {
String value = null;
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
try {
value = URLDecoder.decode(cookie.getValue(), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (isRemove) {
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
}
return value;
}
/**
* 设置客户端缓存过期时间 的Header.
*/
public static void setExpiresHeader(HttpServletResponse response, long expiresSeconds) {
// Http 1.0 header, set model fix expires date.
response.setDateHeader(HttpHeaders.EXPIRES, System.currentTimeMillis() + expiresSeconds * 1000);
// Http 1.1 header, set model time after now.
response.setHeader(HttpHeaders.CACHE_CONTROL, "private, max-age=" + expiresSeconds);
}
/**
* 设置禁止客户端缓存的Header.
*/
public static void setNoCacheHeader(HttpServletResponse response) {
// Http 1.0 header
response.setDateHeader(HttpHeaders.EXPIRES, 1L);
response.addHeader(HttpHeaders.PRAGMA, "no-cache");
// Http 1.1 header
response.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0");
}
/**
* 设置LastModified Header.
*/
public static void setLastModifiedHeader(HttpServletResponse response, long lastModifiedDate) {
response.setDateHeader(HttpHeaders.LAST_MODIFIED, lastModifiedDate);
}
/**
* 设置Etag Header.
*/
public static void setEtag(HttpServletResponse response, String etag) {
response.setHeader(HttpHeaders.ETAG, etag);
}
/**
* 根据浏览器If-Modified-Since Header, 计算文件是否已被修改.
* <p>
* 如果无修改, checkIfModify返回false ,设置304 not modify status.
*
* @param lastModified 内容的最后修改时间.
*/
public static boolean checkIfModifiedSince(HttpServletRequest request, HttpServletResponse response,
long lastModified) {
long ifModifiedSince = request.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE);
if ((ifModifiedSince != -1) && (lastModified < ifModifiedSince + 1000)) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return false;
}
return true;
}
/**
* 根据浏览器 If-None-Match Header, 计算Etag是否已无效.
* <p>
* 如果Etag有效, checkIfNoneMatch返回false, 设置304 not modify status.
*
* @param etag 内容的ETag.
*/
public static boolean checkIfNoneMatchEtag(HttpServletRequest request, HttpServletResponse response, String etag) {
String headerValue = request.getHeader(HttpHeaders.IF_NONE_MATCH);
if (headerValue != null) {
boolean conditionSatisfied = false;
if (!"*".equals(headerValue)) {
StringTokenizer commaTokenizer = new StringTokenizer(headerValue, ",");
while (!conditionSatisfied && commaTokenizer.hasMoreTokens()) {
String currentToken = commaTokenizer.nextToken();
if (currentToken.trim().equals(etag)) {
conditionSatisfied = true;
}
}
} else {
conditionSatisfied = true;
}
if (conditionSatisfied) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED
m0_72731342
- 粉丝: 4
- 资源: 1829
最新资源
- 事件触发机制下的领导者多智能体一致性优化控制的Matlab代码实现与龙格库塔法解析,事件触发带领导者多智能体一致性优化控制 Matlab代码,有注释 龙格库塔法 ,关键词:事件触发; 领导者多
- 基于正负序分离控制的离网逆变器三相不平衡阻性负载处理及波形分析,基于正负序分离控制的三相离网逆变器,带不平衡阻性负载 图片为基于正序控制的和基于正负序分离控制的离网逆变器分别带载的波形 ,核心关键
- 光伏PV三相并网逆变器MATLAB仿真模型:实现高效功率输出与稳定直流电压控制,光伏PV三相并网逆变器MATLAB仿真 模型内容: 1.光伏+MPPT控制(MPPT+boost+三相桥式逆变) 2.坐
- 基于车速的预测时域MPC自适应轨迹跟踪控制策略:优化预瞄距离提高不同速度下的跟踪精度与稳定性,基于车速的变预测时域的MPC自适应轨迹跟踪控制,能够预测时域的, 类似驾驶员模型中的预瞄距离,在不同的车速
- 基于遗传算法与模拟退火算法的VRPSDP同时取送货车辆路径优化研究:需求与回收量分析,遗传算法求解同时取送车辆路径优化,模拟 火算法求解同时取送车辆路径优化 同时取送路径优化VRPSDP vrpsdp
- 基于叶尖速比法的风电机组并网最大功率点跟踪控制仿真研究:Matlab Simulink建模分析,基于叶尖速比法的风电机组并网(MPPT)最大功率跟踪控制-Matlab Simulink建模仿真 ,核
- 基于有限差分与嵌入式离散裂缝网络的油气藏地层压力场计算(Matlab实现),基于有限差分-嵌入式离散裂缝网络(FDM-EDFM)的油气藏地层压力场计算,通过matlab代码实现,可提供理论指导和相关问
- wordpress付费查看隐藏内容插件的开发演示和记录
- Simulink Carsim联合仿真验证模型:三自由度动力学模型详解与车辆误差跟踪机制,附纵滑刚度、侧偏刚度估计方法与PPT流程讲解,三自由度动力学模型Simulink Carsim; Simuli
- Ansys LS-dyna三维混凝土模型建模:细观骨料模型(三组级配、ITZ0.025mm、可调体积率至近100%)研究指南,Ansys LS-dyna三维混凝土细观骨料模型建模命令(三组连续级配、I
- 考虑实时市场联动的电力零售商鲁棒定价策略:结合电动汽车需求响应与市场不确定性因素进行两阶段混合整数规划求解与仿真测试,考虑实时市场联动的电力零商鲁棒定价策略 考虑电力零商日前定价、日前购电、实时能量管
- 电机温度场分析的进阶分析与实操指南:详解模型、网格划分、边界条件与后处理,电机温度场分析 进阶分析教程10讲,包括练习模型,PPT,video,模型的几何清理与简化,网格划分,网格质量检查,边界条件设
- 基于二阶锥规划的配电网多时段动态重构与最优潮流研究及其应用实例 ,cplex配电网重构多时段,二阶锥规划 参考文献名:主动配电网最优潮流研究及其应用实例(中国电机工程学报) 最优潮流研究在配电网规划运
- 西门子S7-1200PLC四节传送带设计:包含V15.1版本程序设计、HMI仿真画面及电气图实战教程,全程实物连接,专业指导,实用易懂 ,西门子s7-1200plc四节传送带,含程序设计,hmi仿真画
- 西门子PLC与HMI在跨国物流公司料箱输送线中的智能分拣控制程序及布局图集参考,西门子1500某大型跨国物流公司料箱 料箱输送线程序,有入库-合流-分拣-出库流程成 WCS和PLC使用Socket接口
- 基于MATLAB的SOC蓄电池双向DC-DC Buck-Boost充放电双闭环控制仿真模型,考虑SOC蓄电池 双向DC DC 充放电控制 matlab仿真模型 buck boost (1)蓄电池双向D
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈