使用urlconnection和json发送post请求到服务器
2010-05-18 21:50
387 查看
使用urlconnection和json发送post请求到服务器
2010-02-22 13:02
2010-02-22 13:02
客户端: *** *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 { /** *通过后台得到sessionID<br> *<功能详细描述><br> * * @param parameters * 登陆信息 * @return 登陆成功返回sessionId 失败返回“” * @see [类、类#方法、类#成员] */ public static String receiveSessionID(String[] parameters, String[] values) { String tempSessionId = "";// SessionID URL url = null;// 请求处理的Servlet ObjectOutputStream objOutputStrm = null;// 对象输出流 InputStream inStrm = null;// 得到HttpURLConnection的输入流 HttpURLConnection httpUrlConnection = null; try { url = new URL("http://192.168.18.109:8080/jj_erp/loginval"); // 设置HttpURLConnection参数 httpUrlConnection = setURLConnectionProperties(url); // 得到对象输出流 objOutputStrm = getObjOutStream(httpUrlConnection); JSONObject obj = new JSONObject(); 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(); // 调用HttpURLConnection连接对象的getInputStream()函数, // 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。 inStrm = httpUrlConnection.getInputStream(); // <===注意,实际发送请求的代码段就在这里 // 上边的httpConn.getInputStream()方法已调用,本次HTTP请求已结束,下边向对象输出流的输出已无意义, // 既使对象输出流没有调用close()方法,下边的操作也不会向对象输出流写入任何数据. // 因此,要重新发送数据时需要重新创建连接、重新设参数、重新创建流对象、重新写数据、 // 重新发送数据(至于是否不用重新这些操作需要再研究) // objOutputStrm.writeObject(new String("")); // httpUrlConnection.getInputStream(); // 从服务器读取对象 Object inObj = readObjectFromServer(inStrm); // 处理从服务器读取的JSON对象 tempSessionId = doJsonObjectFromServerForSesId(tempSessionId, inObj); } 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(); } } return tempSessionId; } /** *检查MAC地址是否正确<br> * * @param mac * @return MAC地址正确返回true 错误返回false *@see [类、类#方法、类#成员] */ public static boolean checkMac(String mac) { URL url = null;// 请求处理的Servlet boolean flag = false;// MAC地址是否正确 ObjectOutputStream objOutputStrm = null;// 对象输出流 InputStream inStrm = null;// 得到HttpURLConnection的输入流 HttpURLConnection httpUrlConnection = null; try { url = new URL("http://192.168.18.109:8080/jj_erp/checkMac"); // 设置HttpURLConnection参数 httpUrlConnection = setURLConnectionProperties(url); // 得到对象输出流 objOutputStrm = getObjOutStream(httpUrlConnection); JSONObject obj = new JSONObject(); obj.put("mac", mac); // 向对象输出流写出数据,这些数据将存到内存缓冲区中 objOutputStrm.writeObject(obj.toString()); // 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream) objOutputStrm.flush(); // 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, // 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 // objOutputStrm.close(); // 调用HttpURLConnection连接对象的getInputStream()函数, // 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。 inStrm = httpUrlConnection.getInputStream(); // <===注意,实际发送请求的代码段就在这里 // 上边的httpConn.getInputStream()方法已调用,本次HTTP请求已结束,下边向对象输出流的输出已无意义, // 既使对象输出流没有调用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 { } return flag; } /** *处理从服务器读取的JSON对象 用于校验MAC地址<br> *<功能详细描述><br> * * @param flag * MAC是否正确 * @param inObj * 从服务器读到的JSON对象 * @return MAC是否正确 * @throws JSONException *@see [类、类#方法、类#成员] */ private static boolean doJsonObjectFromServer(boolean flag, Object inObj) 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; } private static String doJsonObjectFromServerForSesId(String tempSessionID, Object inObj) throws JSONException { // 做非空处理 if (inObj != null) { // 根据得到的序列化对象 构建JSON对象 JSONObject injson = new JSONObject(inObj.toString()); // 拿到JSON对象中 对应key的值 tempSessionID = injson.getString("sessionID"); } return tempSessionID; } /** *从服务器读取对象<br> *<功能详细描述><br> * * @param inStrm * 输入流 * @return 从服务器返回的对象 * @throws IOException *@see [类、类#方法、类#成员] */ private static Object readObjectFromServer(InputStream inStrm) throws IOException { ObjectInputStream objInStream; // 输入流 从服务器读取JSON对象 objInStream = new ObjectInputStream(inStrm);// 输入流 从服务器读取JSON对象 Object inObj = null; try { inObj = objInStream.readObject();// 读取对象 } catch (ClassNotFoundException e) { e.printStackTrace(); } return inObj; } /** *得到对象输出流<br> *<功能详细描述><br> * * @param httpUrlConnection * 后台与服务器之间的通信 * @return 对象输出流 * @throws IOException *@see [类、类#方法、类#成员] */ private static ObjectOutputStream getObjOutStream( HttpURLConnection httpUrlConnection) throws IOException { OutputStream outStrm;// 得到HttpURLConnection的输出流 ObjectOutputStream objOutputStrm;// 对象输出流 // 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法, // 所以在开发中不调用上述的connect()也可以)。 outStrm = httpUrlConnection.getOutputStream(); // 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。 // 使用JSON传值 objOutputStrm = new ObjectOutputStream(outStrm); return objOutputStrm; } /** *设置HttpURLConnection参数<br> *<功能详细描述><br> * * @param url * 请求处理的地址 * @return 后台与服务器之间的通信连接 * @throws IOException * @throws ProtocolException *@see [类、类#方法、类#成员] */ private static HttpURLConnection setURLConnectionProperties(URL url) throws IOException, ProtocolException { HttpURLConnection httpUrlConnection; URLConnection rulConnection = url.openConnection();// 此处的urlConnection对象实际上是根据URL的 // 请求协议(此处是http)生成的URLConnection类 // 的子类HttpURLConnection,故此处最好将其转化 // 为HttpURLConnection类型的对象,以便用到 // HttpURLConnection更多的API.如下: httpUrlConnection = (HttpURLConnection) rulConnection; // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 // http正文内,因此需要设为true, 默认情况下是false; httpUrlConnection.setDoOutput(true); // 设置是否从httpUrlConnection读入,默认情况下是true; httpUrlConnection.setDoInput(true); // Post 请求不能使用缓存 httpUrlConnection.setUseCaches(false); // 设定传送的内容类型是可序列化的java对象 // (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException) // httpUrlConnection.setRequestProperty("Content-type", // "application/x-java-serialized-object"); // httpUrlConnection .setRequestProperty("Content-type", "application/json"); // 设定请求的方法为"POST",默认是GET httpUrlConnection.setRequestMethod("POST"); try { // 连接,从上述至此的配置必须要在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; } public static void main(String[] args) { if (checkMac("40-61-86-69-82-E2")) { System.out.println("mac地址校验成功"); } else { System.out.println("mac地址校验失败"); } } } 服务器端: checkMac.java public class CheckMac extends HttpServlet { private static final long serialVersionUID = 1L; private String returnstring = "false"; @Override 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"); if (mac.equals("40-61-86-69-82-E2")) { 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 dept = ""; // 部门 private String name = ""; // 姓名 private String pass = ""; // 密码 private String mac = ""; // MAC地址 private String ip = ""; // IP地址 private String sessionID = ""; @Override 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(); } /** * 判断登陆信息 登陆成功创建Session */ if (validateInfo()) { // HttpSession session = req.getSession(true); // sessionID = session.getId(); sessionID = "sessionid"; } // 把sessionID放入JSON中 try { outjson.put("sessionID", sessionID); } catch (JSONException e) { e.printStackTrace(); } // 将sessionID以JSON方式发送到客户端 resp.setContentType("text/html;charset=utf-8"); OutputStream out = resp.getOutputStream(); ObjectOutputStream objOutputStrm = new ObjectOutputStream(out); objOutputStrm.writeObject(outjson.toString()); objOutputStrm.flush(); objOutputStrm.close(); } /** *校验登陆信息是否正确<br> *<功能详细描述><br> * * @return 正确返回true 否则返回false *@see [类、类#方法、类#成员] */ private boolean validateInfo() {return true; } |
相关文章推荐
- 使用urlconnection和json发送post请求到服务器
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
- Android中使用Json和Xml与服务器进行通信,使用代码发送Get和Post请求,http请求辅助类
- 使用Fiddler工具发送post请求(带有json数据)以及get请求(Header方式传参)
- Android使用HttpPost向服务器发送Json数据
- IT忍者神龟之使用HttpURLConnection向服务器发送post和get请求
- Android使用HttpPost向服务器发送Json数据
- PHP 使用curl库来发送GET,POST请求,处理json格式数据
- iOS开发-post请求向服务器发送json格式数据(数组或字典)
- 初涉Ajax,以post或get方法发送数据,以json或xml形式接收服务器返回的请求
- 向指定服务器URL 发送POST方法的请求并用JSON表示
- 使用HttpURLConnection向服务器发送post和get请求
- Volley使用JsonObjectRequest发送Post请求失败
- C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)
- 如何向php服务器发送数据为json的post请求
- 使用jQuery发送POST,Ajax请求返回JSON格式数据
- 使用HttpURLConnection向服务器发送post和get请求