最近接的新项目 加密比较多 我就记录下。
SignUtil是jnewsdk-mer-1.0.0.jar com.jnewsdk.util中的一个工具类。由于我没有百度到对应的信息。所以我只能看源码了。。百度不到,使我成长。
恩恩。。
我们先来看parseParam
/**
* 把请求变为Map格式
* @param request
* @return
*/
public static Map parseParam(HttpServletRequest request)
{
Map map = new HashMap();
//request.getParameterNames()方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).
// 返回一个Enumeration类型的枚举.
Enumeration paramsEnum = request.getParameterNames();
//boolean hasMoreElements( )
//测试此枚举是否包含更多的元素
while (paramsEnum.hasMoreElements())
{
// Object nextElement( )
//如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素
String paramName = (String)paramsEnum.nextElement();
//根据Name得到Value
String paramValue = request.getParameter(paramName);
map.put(paramName, paramValue);
}
return map;
}
所以,这个方法其实就是把request请求变为key,value的格式。
public static Map parseResponse(String msg)
{
Map map = new HashMap();
int beginIndex = 0;
int endIndex = 0;
String key;
//for(;;) 这是一个死循环,用来等待中断
for (;;)
{
//判断"="第一次出现的值
endIndex = msg.indexOf("=", beginIndex);
key = null;
value = null;
//enindex小于0 那么就是"="不存在这个msg中,就返回null的map
//endindex等于0也是返回null的map
if (endIndex <= beginIndex) {
return map;
}
//截取0到“=”之前的值
key = msg.substring(beginIndex, endIndex);
//得到“=”之后一位的下标值
beginIndex = endIndex + 1;
if (beginIndex >= msg.length())
{
map.put(key, "");
return map;
}
//判断"="后面是“{”吗》
if (msg.charAt(beginIndex) == '{') {
//得到“}”的位置+1
endIndex = msg.indexOf("}", beginIndex) + 1;
} else {
endIndex = msg.indexOf("&", beginIndex);
}
if (endIndex < beginIndex) {
break;
}
value = msg.substring(beginIndex, endIndex);
map.put(key, value);
beginIndex = endIndex + 1;
}
String value = msg.substring(beginIndex);
map.put(key, value);
return map;
}
这个也是把响应变为Map