📄 httputils.java
字号:
/*
* Created on 2005-5-3
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.swing.server.common;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.util.Map;
import org.apache.log4j.Logger;
/**
* @author vampire_a
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class HTTPUtils {
private static Logger log = Logger.getLogger("HTTPUtils");
private static Charset charset = Charset.forName("UTF-8");
public static CharsetDecoder decoder = charset.newDecoder();
/**
* 过滤HTTP请求的头部分,只留下有用的部分
* @param buff
*/
public static void filter (ByteBuffer buff ,Map header ,StringBuffer sb) {
try {
// 分析HTTP请求,并将头的内容存放在header里
byte t = 0;
int num = 0;
String [] attr = null;
while (buff.remaining() != 0)
{
t = buff.get();
// 在\r\n前面的内容
if (t != 10 && t != 13)
{
sb.append((char)t);
num = 0;
}
// 到达\r了,此时要把属性写到header里
else if (t == 13)
{
num ++;
if (num == 1) {
attr = sb.toString().split(": ");
if (attr.length == 2)
header.put(attr[0], attr[1]);
}
}
// 到达\n了,此时要把sb清空准备接受下一个属性
// 也可能头已经读完了~~
else if (t == 10)
{
num ++;
if (num == 4)
break;
sb.delete(0, sb.length());
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
log.error(e);
}
}
/**
* 这里要把buff里的东西都读出来进行处理,处理结束后,把下一个消息的剩余部分还放回buff里
* 把当前事件的信息返回
* @param buff
* @return
*/
public static String decode (ByteBuffer buff) {
String re = null;
try {
re = decoder.decode(buff).toString();
if (re.indexOf(Attachment.EVENT_END) > -1) {
String [] subs = re.split(Attachment.EVENT_END);
re = subs[0];
buff.clear();
buff.put(subs[1].getBytes("UTF-8"));
}
} catch (CharacterCodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return re;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -