/* * 修改日期 修改人员 修改说明 <br> * ======== ======= ============================================ * 20140210 hanyin STORY #7560 [研发中心/内部需求][jresplus-mvc]-URLBroker支持动态IP和端口支持 * ======== ======= ============================================ */ package com.hundsun.jresplus.web.url; import java.io.UnsupportedEncodingException; import java.lang.reflect.Array; import java.net.URLEncoder; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.hundsun.jresplus.web.velocity.eventhandler.DirectOutput; /** * * @author LeoHu copy by sagahl copy by fish * */ public class URLBroker { protected final Log logger = LogFactory.getLog(this.getClass()); protected String encoding = "UTF-8"; protected URLConfig config; protected String contextPath; protected String name; public String getEncoding() { return encoding; } public void setEncoding(String encoding) { this.encoding = encoding; } public URLConfig getConfig() { return config; } public void setConfig(URLConfig config) { this.config = config; } public String getName() { return name; } public void setName(String name) { this.name = name; } protected String server = null; public void init(String contextPath) { this.contextPath = contextPath; if (this.server != null) { return; } StringBuilder server = new StringBuilder(); server.append(config.getURL()); if (config.isFollowContextPath()) { server.append(contextPath); } /** { 20140210 begin add hanyin STORY #7560 增加非空判断 */ if (server.length() > 0 && server.charAt(server.length() - 1) == '/') { server.deleteCharAt(server.length() - 1); } /** } 20140210 end add hanyin STORY #7560 */ if (StringUtils.isNotBlank(config.getPath())) { if (config.getPath().startsWith("/")) { server.append(config.getPath()); } else { server.append('/').append(config.getPath()); } } // { 20140210 begin add hanyin STORY #7560 增加非空判断 if (server.length() > 0 && server.charAt(server.length() - 1) == '/') { server.deleteCharAt(server.length() - 1); } // } 20140210 end add hanyin STORY #7560 this.server = server.toString(); if (logger.isDebugEnabled()) { logger.debug("init end,server:" + this.server); } } public QueryData setTarget(String target) { return new QueryData(target); } public QueryData get(String target) { return setTarget(target); } @Override public String toString() { return this.server; } public class QueryData implements DirectOutput { protected StringBuilder query; protected QueryData() { } protected QueryData(String target) { if (target == null) { return; } query = new StringBuilder(); query.append(URLBroker.this.server); if (target.startsWith("/")) { query.append(target); } else { query.append('/').append(target); } query.append('?'); } public QueryData addNullQueryData(String id) { query.append(id).append('=').append('&'); return this; } public QueryData putNull(String id) { return addNullQueryData(id); } public QueryData addQueryData(String id, String value) { if (value == null) { return addNullQueryData(id); } query.append(id).append('='); try { query.append(URLEncoder.encode(value, URLBroker.this.encoding)); } catch (UnsupportedEncodingException e) { if (logger.isErrorEnabled()) { logger.error("UnsupportedEncoding:" + URLBroker.this.encoding, e); } } query.append('&'); return this; } public QueryData put(String id, String value) { return addQueryData(id, value); } public QueryData addQueryData(String id, long value) { return addQueryData(id, String.valueOf(value)); } public QueryData put(String id, long value) { return addQueryData(id, value); } public QueryData addQueryData(String id, Object value) { if (value == null) { return addNullQueryData(id); } if (value.getClass().isArray()) { int length = Array.getLength(value); for (int i = 0; i < length; i++) { Object one = Array.get(value, i); addQueryData(id, one); } return this; } else { return addQueryData(id, String.valueOf(value)); } } public QueryData put(String id, Object value) { return addQueryData(id, value); } public QueryData addQueryData(String id, double value) { return addQueryData(id, String.valueOf(value)); } public QueryData put(String id, double value) { return addQueryData(id, value); } public QueryData addQueryData(String id, int value) { return addQueryData(id, String.valueOf(value)); } public QueryData put(String id, int value) { return addQueryData(id, value); } public QueryData addQueryDatas(Map<String, Object> parameters) { if (parameters == null || parameters.isEmpty()) { return this; } for (Entry<String, Object> entry : parameters.entrySet()) { this.addQueryData(entry.getKey(), entry.getValue()); } return this; } public QueryData putAll(Map<String, Object> parameters) { return addQueryDatas(parameters); } @Override public String toString() { if (this.query == null) { return URLBroker.this.toString(); } char last = this.query.charAt(this.query.length() - 1); if (last == '?' || last == '&') { return this.query.deleteCharAt(this.query.length() - 1) .toString(); } return this.query.toString(); } } }