ios中的http:get,post,同步,非同步

来源:http://www.cnblogs.com/shouce/archive/2016/03/07/5249329.html
-Advertisement-
Play Games

出處:http://www.cnblogs.com/edisonfeng/p/3830224.html 一、服務端 1、主要結構: 2、主要代碼: 1)web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmln


出處:http://www.cnblogs.com/edisonfeng/p/3830224.html

一、服務端

  1、主要結構:

    

  2、主要代碼:

    1)web.xml

複製代碼
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
      <servlet-name>LoginServlet</servlet-name><!--lsdkalskdfjasdkfj-->
      <servlet-class>com.wiscom.servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>LoginServlet</servlet-name>
      <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>
</web-app>
複製代碼

    2)LoginServlet.java

複製代碼
package com.wiscom.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.setContentType("text/html;charset=utf-8");
    
    request.setCharacterEncoding("utf-8");//設置參數解碼類型,必須和頁面中一致
    String sName=request.getParameter("name");
    String sPassword=request.getParameter("psw");
    
    PrintWriter out = response.getWriter();
    if(sName.equals("admin")&&sPassword.equals("admin")){
                out.print(sName+",您已成功登陸!!");
    }else{
            out.print(sName+",用戶名密碼有誤!!");
    }
   }
  
  public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
      this.doGet(request, response);
  }
}
複製代碼

二、客戶端

  1、頭文件:NetCenter.h

複製代碼
#import <Foundation/Foundation.h>

@interface NetCenter : NSObject

@property(nonatomic,retain) NSMutableData *receiveData;

@property(nonatomic,assign)int dataPackSerialNo;

- (void)httpGetSyn;

- (void)httpPostSyn;

- (void)httpGetNoSyn;

- (void)httpPostNoSyn;

@end
複製代碼

  2、實現文件:NetCenter.m

複製代碼
#import "NetCenter.h"

@implementation NetCenter

@synthesize receiveData=_receiveData;
@synthesize dataPackSerialNo=_dataPackSerialNo;

- (void)httpGetSyn
{
    NSLog(@"httpGetSyn...");
    
    /*
    NSString *urlString =url;
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"GET"];
    NSHTTPURLResponse* urlResponse = nil;
    NSError *error = [[NSError alloc] init];
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error];
    NSMutableString *result = [[NSMutableString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSLog(@"The result string is :%@",result);
    */
    //第一步,創建URL
    NSURL *url = [NSURL URLWithString:@"http://10.0.0.96:8080/app_server/LoginServlet?name=admin&psw=admin"];
    
    //第二步,通過URL創建網路請求
    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    //NSURLRequest初始化方法第一個參數:請求訪問路徑,第二個參數:緩存協議,第三個參數:網路請求超時時間(秒)
    /*
    其中緩存協議是個枚舉類型包含:
    NSURLRequestUseProtocolCachePolicy(基礎策略)
    NSURLRequestReloadIgnoringLocalCacheData(忽略本地緩存)
    NSURLRequestReturnCacheDataElseLoad(首先使用緩存,如果沒有本地緩存,才從原地址下載)
    NSURLRequestReturnCacheDataDontLoad(使用本地緩存,從不下載,如果本地沒有緩存,則請求失敗,此策略多用於離線操作)
    NSURLRequestReloadIgnoringLocalAndRemoteCacheData(無視任何緩存策略,無論是本地的還是遠程的,總是從原地址重新下載)
    NSURLRequestReloadRevalidatingCacheData(如果本地緩存是有效的則不下載,其他任何情況都從原地址重新下載)
    */
    //第三步,連接伺服器
    NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *str = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
    
    NSLog(@"%@",str);

}

- (void)httpPostSyn
{
    NSLog(@"httpPostSyn...");
    
    //第一步,創建URL
    NSURL *url = [NSURL URLWithString:@"http://10.0.0.96:8080/app_server/LoginServlet"];
    
    //第二步,創建請求
    NSString *postStr = [[NSString alloc] initWithFormat:@"name=%@&psw=%@",@"admin",@"admin"];
    NSData *postData = [postStr dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    [request setHTTPMethod:@"POST"];//設置請求方式為POST,預設為GET
    [request setHTTPBody:postData];//設置參數
    
    //第三步,連接伺服器
    NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *backStr = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
    
    NSLog(@"%@",backStr);
}

- (void)httpGetNoSyn
{
    NSLog(@"httpGetNoSyn...");
    
    //第一步,創建url
    NSURL *url = [NSURL URLWithString:@"http://10.0.0.96:8080/app_server/LoginServlet?name=admin&psw=admin"];
    
    //第二步,創建請求
    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    
    //第三步,連接伺服器
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
    
}

- (void)httpPostNoSyn
{
    NSLog(@"httpPostNoSyn...");
    
    //第一步,創建url
    NSURL *url = [NSURL URLWithString:@"http://10.0.0.96:8080/app_server/LoginServlet"];
    
    //第二步,創建請求
    NSString *postStr = [[NSString alloc] initWithFormat:@"name=%@&psw=%@",@"admin",@"admin"];
    NSData *postData = [postStr dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:postData];
    
    //第三步,連接伺服器
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
}

/*************5、非同步請求的代理方法[start]****************/

//接收到伺服器回應的時候調用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
    NSLog(@"%@",[res allHeaderFields]);
    self.receiveData = [NSMutableData data];//數據存儲對象的的初始化
    self.dataPackSerialNo=0;
    NSLog(@"收到伺服器回應。。。");
}

//接收到伺服器傳輸數據的時候調用,此方法根據數據大小執行若幹次
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"收到伺服器傳回的數據包,數據包序號:%d",self.dataPackSerialNo);
    [self.receiveData appendData:data];
    self.dataPackSerialNo+=1;
}

//數據傳完之後調用此方法
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"數據傳輸完成,輸出所有數據結果。。。");
    NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];
    NSLog(@"%@",receiveStr);
}

//網路請求過程中,出現任何錯誤(斷網,連接超時等)會進入此方法
-(void)connection:(NSURLConnection *)connection
 didFailWithError:(NSError *)error
{
    NSLog(@"網路請求出錯:%@",[error localizedDescription]);
}

/*************5、非同步請求的代理方法[end]****************/

@end
複製代碼

  3、調用

複製代碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    NetCenter *netCenter=[[NetCenter alloc]init];
    
    
    /*****************同步請求****************/
    //[netCenter httpGetSyn];
    //[netCenter httpPostSyn];
    
    /*****************非同步請求****************/
    //[netCenter httpGetNoSyn];
    [netCenter httpPostNoSyn];
    
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}  
複製代碼

三、測試

  1、同步get

  

  2、同步post

  

  3、非同步get

  

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、在body中用onload: <body onload="conver()"> 2、在腳本中用window.onload: <script type="text/javascript"> window.onload=about;//不要括弧function about(){ var beatle
  • 虛擬鍵盤,移動web開發的痛。
  • 用CSS實現圖片垂直居中的方法有很多,針對移動端設備可以用CSS3伸縮盒來實現圖片垂直居中。 代碼如下: <div class="box"> <img src="1.png" alt=""> </div> 1 .box{ 4 display: flex; /*容器為伸縮盒*/ 5 align-ite
  • setTimeout(function() { window.location.href='你要跳轉到的頁面的地址';}, 時間以秒為單位); 例如: setTimeout(function() {window.location.href='http://www.bt720p.com';}, 100
  • 插入到functions.php目錄裡面 //保護後臺登錄add_action('login_enqueue_scripts','login_protection'); function login_protection(){ if($_GET['wangyu'] != '1414060215478
  • 只要使用過jQuery的,想必對ready都不陌生,$(function(){})和$(document).ready(function(){})的使用更是習以為常。那它內部是怎麼實現的呢,嘿嘿,我們不妨一同學習學習
  • fancybox可以彈出很多窗體,甚至一個swf格式的小視頻。但這樣的swf視頻播放的時候並沒有任何的控制項。只能重頭看到尾,或者關閉。我們可以利用fancybox彈出div盒子的方式配合html5很快的寫出彈出一個小視頻的代碼。首先,效果如下圖所示。點擊播放的圖片,彈出播放視頻。背景自動虛化。 首先
  • 今天分享使用html+css3+少量jquery實現滑鼠移入移出圖片生成隨機動畫,我們先看最終效果圖(截圖為靜態效果,做出來可是動態的喲) 左右旋轉 上下移動 縮放 由於時間關係我就不一步步解析各段代碼所代表含義,我這裡就給出一些思路及關鍵 代碼: 1、首先使用ul li展現4張圖片 本示例中不僅使...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...