|
|
|
近期,在做一个客户端向服务器端传送本地文件的程序.于是用Applet读取本地的文件,将其流化后传送到服务器端,刚开始用的get方式,后考虑字符串过长时可能数据会被截取,于是改成post方式传输。遇到了一些小问题,于是解决后记录了下来。 /** * 客户端代码 * 将数据用(POST)方式传送到服务器上 */ public String sendToServer(String content) { String urlPath = "http://127.0.0.1:8080/sunrise/test.do"; //服务器地址 StringBuffer sbf = new StringBuffer(); BufferedWriter writer = null; BufferedReader reader = null; HttpURLConnection uc = null; try { URL url = new URL(urlPath); uc = (HttpURLConnection)url.openConnection(); uc.setDoOutput(true); writer = new BufferedWriter( new OutputStreamWriter(uc.getOutputStream())); //向服务器传送数据 writer.write(content); //传送的数据 writer.flush(); writer.close(); reader = new BufferedReader( new InputStreamReader(uc.getInputStream()));//读取服务器响应信息 String line; while ((line = reader.readLine()) != null){ sbf.append(line); } reader.close(); uc.disconnect(); } catch (Exception e) { sbf.append("服务器连接失败!请稍后重新操作"); } finally{ closeIO(writer,reader); //关闭流 } return sbf.toString().trim(); } /** * 关闭流 */private void closeIO(BufferedWriter writer,BufferedReader reader){if (writer != null) {try {writer.close();writer = null;} catch (Exception e) {}}if (reader != null) {try {reader.close();reader = null;} catch (Exception e) {}}}/** * 服务器端代码 * 不要使用request.getParameter();因为该方法和 * request.getReader();和request.getInputStream(); * 方法冲突。 */@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");//注意加上BufferedReader reader = null;try {reader = request.getReader();//获得字符流StringBuffer content= new StringBuffer(); String line; while ((line = reader.readLine()) != null){ content.append(line+"\r\n"); } System.out.println(content.toString());} catch (Exception e) {}finally{try {reader.close();reader = null;} catch (Exception e) {}}} |
|