一、服务端
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