package util;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.regex.Pattern;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.lang.StringUtils;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by zhangchi9 on 2016/10/18.
*/
public class HttpUtils {
/**
* ajax 请求
* @param response
* @param msg
* @throws Exception
*/
public static void writeJson(HttpServletResponse response,String msg)throws Exception{
response.setCharacterEncoding("utf-8");
response.setHeader("accept","text/html");
response.setContentType("text/html;charset=utf-8");
Writer writer = response.getWriter();
writer.write(msg);
writer.flush();
writer.close();
}
/**
* 创建cookie
* @param response
* @param name
* @param value
* @param maxAge 设置以秒为这个cookie的最长期限。
* @param path 指定该客户端应返回的cookie的cookie的路径
* @param domain 指定要在其中显示此cookie应该提交的域。
* @return
*/
public static Cookie setCookie( HttpServletResponse response, String name, String value, int maxAge, String path, String domain) {
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(maxAge);
if (path != null) {
cookie.setPath(path);
}
cookie.setDomain(domain);
response.addCookie(cookie);
return cookie;
}
/**
* 更新cookie
* @param request
* @param response
* @param name
* @param maxAge 设置以秒为这个cookie的最长期限。
* @param path 指定该客户端应返回的cookie的cookie的路径
* @param domain 指定要在其中显示此cookie应该提交的域。
* @return
*/
public static Cookie updateCookie( HttpServletRequest request,HttpServletResponse response, String name,int maxAge, String path, String domain) {
Cookie cookie=getCookie(request, name);
if(cookie!=null){
if (path != null) {
cookie.setPath(path);
}
cookie.setDomain(domain);
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}
return cookie;
}
/**
* 清空cookie
* @param request
* @param response
* @param name
* @param maxAge 设置以秒为这个cookie的最长期限。
* @param path 指定该客户端应返回的cookie的cookie的路径
* @param domain 指定要在其中显示此cookie应该提交的域。
* @return
*/
public static Cookie cleanCookie(HttpServletRequest request,HttpServletResponse response, String name,int maxAge, String path, String domain){
Cookie cookie = getCookie(request, name);
if(cookie!=null){
cookie.setMaxAge(maxAge);
cookie.setValue(null);
if (path != null) {
cookie.setPath(path);
}
cookie.setDomain(domain);
response.addCookie(cookie);
}
return cookie;
}
/**
* 获取cookie对象
* @param request
* @param name
* @return
*/
public static Cookie getCookie(HttpServletRequest request,String name){
Cookie[] cookies=request.getCookies();
if (cookies!=null && cookies.length>0){
for(int i=0;i<cookies.length;i++){
if (name.equalsIgnoreCase(cookies[i].getName())){
return cookies[i];
}
}
}
return null;
}
/**
* 获取cookie值
* @param request
* @param name
* @return
*/
public static String getCookieValue(HttpServletRequest request,String name){
Cookie cookie = getCookie(request,name);
if (cookie!=null){
return cookie.getValue();
}
return null;
}
/**
* 过滤 html
* @param inputString
* @return
*/
public static String html2Text(String inputString) {
if(StringUtils.isBlank(inputString)){
return "";
}
String htmlStr = inputString; // 含html标签的字符串
String textStr = "";
java.util.regex.Pattern p_script;
java.util.regex.Matcher m_script;
java.util.regex.Pattern p_style;
java.util.regex.Matcher m_style;
java.util.regex.Pattern p_html;
java.util.regex.Matcher m_html;
try {
// 定义script的正则表达式{或<script>]*?>[\s\S]*?<\/script>
// }
String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"; // 定义style的正则表达式{或<style>]*?>[\s\S]*?<\/style>
// }
String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式
p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
m_script = p_script.matcher(htmlStr);
htmlStr = m_script.replaceAll(""); // 过滤script标签
p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
m_style = p_style.matcher(htmlStr);
htmlStr = m_style.replaceAll(""); // 过滤style标签
p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
m_html = p_html.matcher(htmlStr);
htmlStr = m_html.replaceAll(""); // 过滤html标签
textStr = htmlStr;
} catch (Exception e) {
textStr = "";
}
return textStr;
}
/**
* 获取用户真实ip
* @param request
* @return
*/
public static String getIp(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (com.jd.common.util.StringUtils.isNotBlank(ip) && !"unKnown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = ip.indexOf(",");
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
}
ip = request.getHeader("X-Real-IP");
if (!com.jd.common.util.StringUtils.isBlank(ip) && !"unKnown".equalsIgnoreCase(ip)) {
return ip;
}
return request.getRemoteAddr();
}
}