package com.jrails.commons.utils; import com.opensymphony.util.TextUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Map; import java.util.WeakHashMap; import java.util.Set; import java.util.Collections; /** * Created by arden * User: <a href="mailto:arden.emily@gmail.com">arden</a> * Date: 2009-2-17 14:44:51 */ public class WebUtils { private static final Logger logger = LoggerFactory.getLogger(WebUtils.class); /** * @param request * @param paramName * @return String 参数值 */ public static String getString(HttpServletRequest request, String paramName) { String value = request.getParameter(paramName); return StringUtils.nullStringToEmptyString(value); } public static long getLong(HttpServletRequest request, String paramName) { return TextUtils.parseLong(request.getParameter(paramName)); } public static int getInteger(HttpServletRequest request, String paramName) { return TextUtils.parseInt(request.getParameter(paramName)); } public static int getShort(HttpServletRequest request, String paramName) { if (request.getParameter(paramName) == null) { return 0; } else { try { return new Short(request.getParameter(paramName)); } catch (Exception e) { logger.error("获取参数错误:" + paramName + ":" + request.getParameter(paramName)); return 0; } } } public static String getStringByAttribute(HttpServletRequest request, String paramName) { if (request.getAttribute(paramName) != null) try { return (String) request.getAttribute(paramName); } catch (Exception e) { logger.error("获取参数错误:" + paramName + ":" + request.getAttribute(paramName)); } return ""; } public static long getLongByAttribute(HttpServletRequest request, String paramName) { return TextUtils.parseLong(request.getAttribute(paramName).toString()); } public static int getIntegerByAttribute(HttpServletRequest request, String paramName) { return TextUtils.parseInt(request.getAttribute(paramName).toString()); } public static int getShortByAttribute(HttpServletRequest request, String paramName) { if (request.getAttribute(paramName) == null) return 0; else { try { return new Short(request.getAttribute(paramName).toString()); } catch (Exception e) { logger.error("获取参数错误:" + paramName + ":" + request.getAttribute(paramName)); return 0; } } } /** * 获取终端UA * * @param request * @return String userAgent */ public static String getUserAgent(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); if (userAgent == null) { userAgent = request.getHeader("user-agent"); } if (userAgent == null) { String X_Wap_Profile = request.getHeader("X-Wap-Profile"); if (X_Wap_Profile != null) { int index = X_Wap_Profile.lastIndexOf("/"); String tempInfo = X_Wap_Profile.substring(index + 1); if (tempInfo != null) { String[] splits = tempInfo.split("."); if (splits != null && splits.length > 0) { userAgent = splits[0]; } } } } if (userAgent != null) { int place = userAgent.indexOf("/"); if (place >= 0) userAgent = userAgent.substring(0, place); place = userAgent.indexOf("*"); if (place >= 0) userAgent = userAgent.substring(0, place); } if (userAgent == null) { userAgent = request.getParameter("cx"); } if (userAgent == null) return ""; return userAgent; } /** * 获取手机号 * * @param request * @return String 手机号 */ public static String getMobile(HttpServletRequest request) { String mobile = request.getHeader("x-up-calling-line-id"); if (mobile == null) { mobile = request.getHeader("x-up-subno"); } if (mobile == null) { // 信息如:GPRS,8613590309275,10.204.121.245,SZGGSNO3BNK,unsecured String netinfo = request.getHeader("X-Network-info"); if (netinfo != null) { String[] splits = netinfo.split(","); if (splits != null) { mobile = splits[1]; } } } if ((mobile != null) && (!"".equals(mobile))) { if (mobile.startsWith("861")) mobile = mobile.substring(2, 13); else if (mobile.startsWith("0861")) mobile = mobile.substring(3, 14); } else { mobile = request.getHeader("X-Nx-Clid"); } return mobile; } public static String getServerUrl(HttpServletRequest request) { String serverName = request.getServerName(); String scheme = request.getScheme(); int port = request.getServerPort(); String serverUrl = scheme + "://" + serverName; if (port != 80) { serverUrl = scheme + "://" + serverName + ":" + port; } return serverUrl; } public static final String[] mobileAgent = { "Mozilla", "httpclient", "Opera", "sohu", "WinWAP", "Internet", "Microsoft", "OPWV", "OPWV-SDK", "OWG1 UP", "OWG1", "timewe", "CDR", "SpiderMan", "Baiduspider", "msnbot", "Google", "Googlebot", "Timewebot", "Nokia6820", "iaskspider", "iaskspider2", "iaskspider2 iask@staff.sina.com.cn", "Mytest agent" }; public static String[] getMobileUAInfo(HttpServletRequest request) { HttpSession session = request.getSession(); String header = request.getHeader("user-agent"); String via = request.getHeader("via"); String header_mobileNO = request.getHeader("x-up-calling-line-id"); String uni_mobileNO = request.getParameter("DEVICEID"); String mobileType = "UNKNOW"; String mobileNo = "UNKNOW"; String[] retStr = new String[] { "", "" ," "}; try { if (session.getAttribute("phoneno") != null && !(session.getAttribute("phoneno").equals(""))) { mobileNo = (String) session.getAttribute("phoneno"); } mobileNo = request.getParameter("PHONENO"); if (mobileNo == null || mobileNo.equals("") || mobileNo.equals("UNKNOW")) { mobileNo = uni_mobileNO; } if (mobileNo == null || mobileNo.equals("") || mobileNo.equals("UNKNOW")) { mobileNo = header_mobileNO; } if (mobileNo == null || mobileNo.equals("") || mobileNo.equals("UNKNOW") || mobileNo.equals("null")) { mobileNo = request.getParameter("MISC_MSISDN"); } // session.setAttribute("phoneno", mobileNo); int pos = 0; if (header != null) { pos = header.indexOf("/"); } if (pos >= 0) { if (header != null) { mobileType = header.substring(0, pos); } } else { mobileType = header; } int pos_star = mobileType.indexOf("*"); if (pos_star >= 0) { mobileType = mobileType.substring(0, pos_star); } if (mobileType == null || mobileType.equals("")) { mobileType = "Mozilla"; } } catch (Exception e) { logger.info("==UA ERROR=!"); return retStr; } retStr[2] = mobileType; if(via==null && (header==null || header.toUpperCase().indexOf("UCWEB")==-1)){ //不是通过移动网关过来的用户,且不是通过UCWEB上来的用户 mobileType = "ismozilla"; } if(via!=null && mobileType.equals("UNKNOW")){ if(via.length()>20){ mobileType = via.substring(0,20); }else{ mobileType = via; } } retStr[0] = mobileType; retStr[1] = mobileNo; return retStr; } public static boolean isOpera(HttpServletRequest request) { String[] mobileInfo = WebUtils.getMobileUAInfo(request); if(mobileInfo[0]!=null && mobileInfo[0].equals("ismozilla")){ return true; } return false; } public static boolean isMozilla(HttpServletRequest request) { String[] mobileInfo = WebUtils.getMobileUAInfo(request); if (mobileInfo[2].startsWith("Mozilla") || mobileInfo[2].startsWith("Opera")) { return true; } return false; } /** * 分析查询参数 * @param queryString * @return */ public static Map<String,String> parseQueryString(String queryString) { if (!StringUtils.isEmpty(queryString)) { Map<String,String> querys = new WeakHashMap<String,String>(); if (queryString.contains("?")) { int index = queryString.indexOf("?"); queryString = queryString.substring(index + 1); } if (!StringUtils.isEmpty(queryString)) { String[] splits = queryString.split("&"); if (!queryString.contains("&")) { splits = queryString.split("&"); } if (splits != null) { for (String s : splits) { String[] queryValue = s.split("="); if (queryValue != null && queryValue.length >= 1) { String key = queryValue[0]; String value = ""; if (queryValue.length == 2) { value = queryValue[1]; } querys.put(key, value); } } } } return querys; } return null; } /** * 构造查询参数 * @param orignQuerys * @param targetQuerys * @return */ public static String buildQueryParams(Map<String,String> orignQuerys, Map<String,String> targetQuerys, String split) { if (orignQuerys != null && !orignQuerys.isEmpty()) { String queryParams = ""; Set<String> keys = targetQuerys.keySet(); for (String key : keys) { String orignValue = orignQuerys.get(key); String targetValue = targetQuerys.get(key); //System.out.println("key:" + key); if (!(orignValue != null && !StringUtils.isEmpty(orignValue))) { // 原来就有这个参数 orignQuerys.put(key, targetValue); } else if (orignValue == null) { orignQuerys.put(key, targetValue); } } keys = orignQuerys.keySet(); int index = 0; int size = keys.size(); for (String key : keys) { index++; String value = orignQuerys.get(key); if (index < size) { queryParams += key + "=" + value + split; } else { queryParams += key + "=" + value; } } queryParams = StringUtils.nullStringToEmptyString(queryParams); return queryParams; } return ""; } /** * 构造查询参数 * @param orignQuerys * @return */ public static String buildQueryParams(Map<String,String> orignQuerys, String split) { if (orignQuerys != null && !orignQuerys.isEmpty()) { String queryParams = ""; Set<String> keys = orignQuerys.keySet(); int index = 0; int size = keys.size(); for (String key : keys) { index++; String value = orignQuerys.get(key); if (index < size) { queryParams += key + "=" + value + split; } else { queryParams += key + "=" + value; } } queryParams = StringUtils.nullStringToEmptyString(queryParams); return queryParams; } return ""; } }