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

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一、服务端

1、主要结构:

2、主要代码:

1)web.xml

<?xml version="1.0" encoding="UTF-8"?><web-appversion="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

packagecom.wiscom.servlet;importjava.io.IOException;importjava.io.PRintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassLoginServletextendsHttpServlet {publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//TODO Auto-generated method stubresponse.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+",用户名密码有误!!");

}

}publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {this.doGet(request, response);

}

}

二、客户端

1、头文件:NetCenter.h

#import<Foundation/Foundation.h>@interfaceNetCenter : NSObject

@property(nonatomic,retain) NSMutableData*receiveData;

@property(nonatomic,assign)intdataPackSerialNo;- (void)httpGetSyn;- (void)httpPostSyn;- (void)httpGetNoSyn;- (void)httpPostNoSyn;@end

2、实现文件:NetCenter.m

#import"NetCenter.h"@implementationNetCenter@synthesizereceiveData=_receiveData;@synthesizedataPackSerialNo=_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);*///第一步,创建URLNSURL *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...");//第一步,创建URLNSURL *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...");//第一步,创建urlNSURL *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:requestdelegate:self];

}- (void)httpPostNoSyn

{

NSLog(@"httpPostNoSyn...");//第一步,创建urlNSURL *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:requestdelegate: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];returnYES;

}

三、测试

1、同步get

2、同步post

3、异步get

4、异步post

三、扩展

1、http和https

http://www.cnblogs.com/stan0714/archive/2012/03/21/2409872.html

2、ios网络编程理论与实例

http://blog.csdn.net/hgy2011/article/details/8676084

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航