来自:http://blog.sina.com.cn/s/blog_6ff304c30100qxs8.html
客户端:
***
*HttpURLConnection连接服务器<br>
*<功能详细描述><br>
*1、通过后台得到sessionID<br>
*2、检查MAC地址是否正确<br>
*3、处理从服务器读取的JSON对象<br>
*4、从服务器读取对象<br>
*5、得到对象输出流<br>
*6、设置HttpURLConnection参数<br>
*
* @author "zhaohaiyang"<br>
*@version 版本号 2010-1-14 下午02:01:41<br>
*@see 相关类/方法<br>
**/
public class ConUtils
{
public static String receiveSessionID(String[] parameters, String[] values)
{
String tempSessionId = "";// SessionID
{
url = new URL("http://192.168.18.109:8080/jj_erp/loginval");
httpUrlConnection = setURLConnectionProperti
objOutputStrm = getObjOutStream(httpUrlConnection);
for (int i = 0; i < parameters.length; i++)
{
obj.put(parameters[i], values[i]);
}
// 向对象输出流写出数据,这些数据将存到内存缓冲区中
objOutputStrm.writeObject(obj.toString());
// 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream)
objOutputStrm.flush();
// 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中,
// 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器
// objOutputStrm.close();
// 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。
inStrm = httpUrlConnection.getInputStream(); // <===注意,实际发送请求的代码段就在这里
// 既使对象输出流没有调用close()方法,下边的操作也不会向对象输出流写入任何数据.
// 因此,要重新发送数据时需要重新创建连接、重新设参数、重新创建流对象、重新写数据、
// 重新发送数据(至于是否不用重新这些操作需要再研究)
// objOutputStrm.writeObject(new String(""));
// httpUrlConnection.getInputStream();
Object inObj = readObjectFromServer(inStrm);
// 处理从服务器读取的JSON对象
tempSessionId = doJsonObjectFromServerFo
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (ProtocolException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (JSONException e)
{
e.printStackTrace();
}
finally
{
try
{
if (objOutputStrm != null)
{
objOutputStrm.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
if (inStrm != null)
{
inStrm.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public static boolean checkMac(String mac)
{
try
{
url = new URL("http://192.168.18.109:8080/jj_erp/checkMac");
httpUrlConnection = setURLConnectionProperti
objOutputStrm = getObjOutStream(httpUrlConnection);
obj.put("mac", mac);
// 向对象输出流写出数据,这些数据将存到内存缓冲区中
objOutputStrm.writeObject(obj.toString());
// 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream)
objOutputStrm.flush();
// 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中,
// 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器
// objOutputStrm.close();
// 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。
inStrm = httpUrlConnection.getInputStream(); // <===注意,实际发送请求的代码段就在这里
// 既使对象输出流没有调用close()方法,下边的操作也不会向对象输出流写入任何数据.
// 因此,要重新发送数据时需要重新创建连接、重新设参数、重新创建流对象、重新写数据、
// 重新发送数据(至于是否不用重新这些操作需要再研究)
// objOutputStrm.writeObject(new String(""));
// httpUrlConnection.getInputStream();
Object inObj = readObjectFromServer(inStrm);
// 处理从服务器读取的JSON对象
flag = doJsonObjectFromServer(flag, inObj);
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
catch (JSONException e)
{
e.printStackTrace();
}
finally
{
}
throws JSONException
{
// 做非空处理
if (inObj != null)
{
// 根据得到的序列化对象 构建JSON对象
JSONObject injson = new JSONObject(inObj.toString());
// 拿到JSON对象中 对应key的值
String getStr = injson.getString("returnstring");
if (getStr.equals("true"))
{
flag = true;
}
}
return flag;
}
Object inObj) throws JSONException
{
// 做非空处理
if (inObj != null)
{
// 根据得到的序列化对象 构建JSON对象
JSONObject injson = new JSONObject(inObj.toString());
// 拿到JSON对象中 对应key的值
tempSessionID = injson.getString("sessionID");
}
return tempSessionID;
}
throws IOException
{
ObjectInputStream objInStream; // 输入流 从服务器读取JSON对象
objInStream = new ObjectInputStream(inStrm);// 输入流 从服务器读取JSON对象
Object inObj = null;
try
{
inObj = objInStream.readObject();// 读取对象
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
return inObj;
}
HttpURLConnection httpUrlConnection) throws IOException
{
OutputStream outStrm;// 得到HttpURLConnection的输出流
ObjectOutputStream objOutputStrm;// 对象输出流
// 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,
// 所以在开发中不调用上述的connect()也可以)。
outStrm = httpUrlConnection.getOutputStream();
// 使用JSON传值
objOutputStrm = new ObjectOutputStream(outStrm);
return objOutputStrm;
}
throws IOException, ProtocolException
{
HttpURLConnection httpUrlConnection;
URLConnection rulConnection = url.openConnection();// 此处的urlConnection对象实际上是根据URL的
// 请求协议(此处是http)生成的URLConnection类
// 的子类HttpURLConnection,故此处最好将其转化
// 为HttpURLConnection类型的对象,以便用到
// HttpURLConnection更多的API.如下:
// http正文内,因此需要设为true, 默认情况下是false;
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setDoInput(true);
httpUrlConnection.setUseCaches(false);
// (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
// httpUrlConnection.setRequestProperty("Content-type",
// "application/x-java-serialized-object");
//
httpUrlConnection
.setRequestProperty("Content-type", "application/json");
httpUrlConnection.setRequestMethod("POST");
{
// 连接,从上述至此的配置必须要在connect之前完成,
httpUrlConnection.connect();
httpUrlConnection.setConnectTimeout(1);
httpUrlConnection.setReadTimeout(1);
}
catch (ConnectException e1)
{
if (e1.getMessage().equals("Connection refused: connect"))
{
JOptionPane.showMessageDialog(null, "连接超时");
System.exit(0);
}
}
return httpUrlConnection;
}
{
if (checkMac("40-61-86-69-82-E2"))
{
System.out.println("mac地址校验成功");
}
else
{
System.out.println("mac地址校验失败");
}
}
}
服务器端:
checkMac.java
{
private static final long
private String
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
InputStream inStream = req.getInputStream();
ObjectInputStream objInStream = new ObjectInputStream(inStream);
Object obj = null;
try
{
obj = objInStream.readObject();
}
catch (ClassNotFoundException e1)
{
e1.printStackTrace();
}
JSONObject json = null;
String mac = "";
JSONObject outjson = new JSONObject();
try
{
if (obj != null)
{
json = new JSONObject(obj.toString());
mac = json.getString("mac");
{
returnstring = "true";
}
}
}
catch (JSONException e)
{
e.printStackTrace();
}
try
{
outjson.put("returnstring", returnstring);
}
catch (JSONException e)
{
e.printStackTrace();
}
resp.setContentType("text/html;charset=utf-8");
OutputStream out = resp.getOutputStream();
ObjectOutputStream objOutputStrm = new ObjectOutputStream(out);
objOutputStrm.writeObject(outjson.toString());
objOutputStrm.flush();
objOutputStrm.close();
}
LoginValidate.java
private String
private String
private String
private String
private String
private String
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
InputStream inStream = req.getInputStream();
ObjectInputStream objInStream = new ObjectInputStream(inStream);
Object obj = null;
try
{
obj = objInStream.readObject();
}
catch (ClassNotFoundException e1)
{
e1.printStackTrace();
}
JSONObject json = null;
JSONObject outjson = new JSONObject();
try
{
if (obj != null)
{
json = new JSONObject(obj.toString());
if (json != null)
{
dept = json.getString("dept");
name = json.getString("name");
pass = json.getString("pass");
mac = json.getString("mac");
ip = json.getString("ip");
}
}
}
catch (JSONException e)
{
e.printStackTrace();
}
if (validateInfo())
{
//
//
sessionID = "sessionid";
}
// 把sessionID放入JSON中
try
{
outjson.put("sessionID", sessionID);
}
catch (JSONException e)
{
e.printStackTrace();
}
resp.setContentType("text/html;charset=utf-8");
OutputStream out = resp.getOutputStream();
ObjectOutputStream objOutputStrm = new ObjectOutputStream(out);
objOutputStrm.writeObject(outjson.toString());
objOutputStrm.flush();
objOutputStrm.close();
}
{
return true;
}