浏览器与服务器间的交互(客服端 <---> 服务器)

浏览器与服务器间的交互(客服端
<---> 服务器)

请求--->处理--->响应

对类HttpContext 内部成员的使用
例如 :Request 、Response 、 Cookie 、 Session 、GetSection  . . .

/////~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* * * 然而  一般处理程序 既为 中间阶段的 处理 层面


1 public void ProcessRequest(HttpContext context)
2
3 {
4
5 context.Response.ContentType = "text/plain";
6
7 context.Response.Write("<a href=‘http://www.rupeng.com‘>如鹏网</a>");
8
9 }

* * *  上面的代码就是对于请求的内容做出处理。

/////~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ContentType: http://baike.baidu.com/view/1547292.htm?wtp=tt#5

http://zhidao.baidu.com/link?url=P-4kstF4EZV9ZcBctA8WJ6pBvMoeU-3PTu2mAT_ZQ_0GPfCKtz7e4d_iDOfomOCMq9KcUZxbFwNN9NlROF-Fl_

/////~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

HttpContext.Request :

http://msdn.microsoft.com/zh-cn/library/system.web.httprequest(v=vs.110).aspx

添加  //string action=context.Request["name"];

//int age = Convert.ToInt32(context.Request["age"]);

//string action=context.Request["name"]

//context.Response.Write("<font color=‘red‘>Hello " + action + "</font>");

//context.Response.Write("<font color=‘green‘>我今年"+age+"岁</font>");

之后  在地址栏里 传递 参数 . . . .

Request :请求   //从地址栏获得

Response :响应  //返回给页面

















<form action="TestHandler.ashx" method="get">


姓名:<input type="text" name="name" /><br />


年龄:<input type="text" name="age" /><br />


<input type="submit" />

</from>


将表单里的东西发送到地址栏,地址栏向服务器请求,然后服务器响应传回所请求的东西到地址栏,然后页面获取地址栏里相应的值。

//  将表单里的内容提交(action)给服务器端(url)的程序(TestHandler.ashx)

name里的值是指定具体对应的值(传参用的)

上面的 //string action=context.Request["name"];

//int age = Convert.ToInt32(context.Request["age"]);

请求的参数就是 name 标签里的具体值。

/////~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

封装模版引擎NVelocity.dll

使用到了匿名函数

//把类的定义和对象的声明初始化放到一起

//匿名类

var news = new { Title = "特大喜讯",Author="杨中科",PostDate="2013-11-08",Msg="今天晚上会公布喜讯细节!" };

string s = news.PostDate;


 1  public class CommonHelper
2 {
3 public static string RenderHtml(string name, object data)
4 {
5 VelocityEngine vltEngine = new VelocityEngine();
6 vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
7 vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));//模板文件所在的文件夹
8 vltEngine.Init();
9
10 VelocityContext vltContext = new VelocityContext();
11 vltContext.Put("Model", data);//设置参数,在模板中可以通过$data来引用
12
13 Template vltTemplate = vltEngine.GetTemplate(name);
14 System.IO.StringWriter vltWriter = new System.IO.StringWriter();
15 vltTemplate.Merge(vltContext, vltWriter);
16 return vltWriter.GetStringBuilder().ToString();
17 }
18 }

结合一般处理程序 使用情况

 http 无状态保持(05-状态的传递和保持)

怎么记住提交的值呢 ?

利用隐藏字段来实现 【相当于看病的病历本】

Html中:

Ashx中:

缺点  : 无法自由的存取数据 。

下面介绍 Cookie

           Cookie

Cookie的生命周期虽浏览器的关闭而自动删除

那么改如何,解决方法如下:

然而客户端的Cookie 任然还原被用户更改

解决法子  : Guid ( 全球唯一标识符 )

(病历本入手)

从而引发出  Session

例子 :

html:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <title></title>
5 </head>
6 <body>
7 <form action="BinLiBen.ashx" method="post">
8 <input type="text" name="username" />
9 <input type="password" name="password" />
10 <input type="submit" name="login" value="登录" />
11 </form>
12 </body>
13 </html>

html

text.ashx:


 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5
6 namespace WebApplication1
7 {
8 /// <summary>
9 /// text 的摘要说明
10 /// </summary>
11 public class text : IHttpHandler
12 {
13
14 public void ProcessRequest(HttpContext context)
15 {
16 context.Response.ContentType = "text/html";
17
18
19 HttpCookie cookie = context.Request.Cookies["ZhangBenId"]; //context.Response.SetCookie(new HttpCookie("ZhangBenId", id.ToString()));//把id写入病人的病历本 、、 所以当病人把病历本拿给医生看的时候 , 医生就知道id了
20 if (cookie == null)
21 {
22 context.Response.Redirect("Login.ashx");
23 }
24 else
25 {
26 Guid id = new Guid(cookie.Value);//获得病历本中的id
27 if (SessionMgr.IsJiZhang(id))
28 {
29 string value = SessionMgr.Get(id);
30 context.Response.Write(value);
31 }
32 else
33 {
34 context.Response.Redirect("Login.ashx");
35 }
36 }
37 }
38
39 public bool IsReusable
40 {
41 get
42 {
43 return false;
44 }
45 }
46 }
47 }

一般处理程序

BinLiBen.ashx:


 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5
6 namespace WebApplication1
7 {
8 /// <summary>
9 /// BinLiBen 的摘要说明
10 /// </summary>
11 public class BinLiBen : IHttpHandler //模仿 Session
12 {
13
14 public void ProcessRequest(HttpContext context)
15 {
16 context.Response.ContentType = "text/html";
17 string login = context.Request["login"];
18 if (string.IsNullOrEmpty(login))
19 {
20 string html = CommonHelper.RenderHtml("Login.htm", null);
21 context.Response.Write(html);
22 }
23 else
24 {
25 string username = context.Request["username"];
26 string password = context.Request["password"];
27 if (password == "123456")
28 {
29 //context.Response.SetCookie(new HttpCookie("YongHuMing",username));
30 Guid id = Guid.NewGuid();//生成一个医生分配的用户编号
31 SessionMgr.JiZhang(id, username);//计入账本 //相等于 医生端的病历本
32
33 //把医生分配的病人编号写入病历本
34 context.Response.SetCookie(new HttpCookie("ZhangBenId", id.ToString()));//把id写入病人的病历本
35 context.Response.Redirect("text.ashx");
36 }
37 }
38
39
40
41
42 context.Response.Write("Hello World");
43 }
44
45 public bool IsReusable
46 {
47 get
48 {
49 return false;
50 }
51 }
52 }
53 }

一般处理程序


 1   public static string RenderHtml(string name, object data)
2 {
3 VelocityEngine vltEngine = new VelocityEngine();
4 vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
5 vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));//模板文件所在的文件夹
6 vltEngine.Init();
7
8 VelocityContext vltContext = new VelocityContext();
9 vltContext.Put("Model", data);//设置参数,在模板中可以通过$data来引用
10
11 Template vltTemplate = vltEngine.GetTemplate(name);
12 System.IO.StringWriter vltWriter = new System.IO.StringWriter();
13 vltTemplate.Merge(vltContext, vltWriter);
14 return vltWriter.GetStringBuilder().ToString();
15 }

CommonHelper 封装的模版 NVelocity

SessionMgr:


 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5
6 namespace WebApplication1
7 {
8 public class SessionMgr
9 {
10 //static在.net framework运行的时候一直存在!这样就可以在服务器端保存(医生的账本)
11 private static Dictionary<Guid, string> zhangben = new Dictionary<Guid, string>();
12 public static void JiZhang(Guid id, string value)
13 {
14 zhangben[id] = value;
15 }
16
17 public static bool IsJiZhang(Guid id)
18 {
19 return zhangben.Keys.Contains(id);
20 }
21
22 public static string Get(Guid id)
23 {
24 return zhangben[id];
25 }
26 }
27 }

提供一个验证方案

来源 : 传智博客视频教程的一些个人总结

浏览器与服务器间的交互(客服端 <---> 服务器)

时间: 2024-11-06 03:48:22

浏览器与服务器间的交互(客服端 <---> 服务器)的相关文章

Linux 下基于多线程服务器/客服端聊天程序源码

Linux 下基于多线程服务器/客服端聊天程序,采用阻塞的socket技术,和多线程技术实现. 客服端程序:client.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h>

C# 向服务器上传文件(客服端winform、服务端web)

转载 首先写客服端,winform模拟一个post提交: /// <summary> /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// </summary> /// <param name="address">文件上传到的服务器</param> /// <param name="fileNamePath">要上传的本地文件(全路径)</param> /// <

Python网络编程UDP服务器与客服端简单例子

[转载] https://blog.csdn.net/hu330459076/article/details/7868028 UDP服务器代码: #!/usr/bin/env python # -*- coding:UTF-8 -*- from socket import * from time import ctime HOST = '127.0.0.1' PORT = 21567 BUFSIZE = 1024 ADDR = (HOST,PORT) udpSerSock = socket(AF

TCP服务器端和客服端(一)

就是一个客服端(Socket)和服务器(ServerSocket)端的链接间.我的理解是一个服务端可以链接多个客服端. 在客服端有输入流outPutStream. 用于发送数据 在服务器端有输出流.inputStream. 用于接受数据. 其他的我觉得多写几次就能够理解了.   客服端Socket package Text; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; publ

瘦客户端和富客服端

今天看webservice的时候看到了这个这个瘦客服端的,之前没有听说过,所以专门去查了一些资料的解释 1 瘦客服端 瘦客户端(Thin Client)指的是在客户端-服务器网 络体系中的一个基本无需应用程序的计算机终端. 它通过一些协议和服务器通信,进而接入局域网.作为应用程序平台的Internet的到来为企业应用程序提供了一个全新的领域:一个基于 Internet/intranet的应用程序运用一个只包含一个浏览器的瘦客户端.这个浏览器负责解释.显示和处理应用程序的图形用户界面(GUI)和它

Live555 分析(三):客服端

live555的客服端流程:建立任务计划对象--建立环境对象--处理用户输入的参数(RTSP地址)--创建RTSPClient实例--发出DESCRIBE--发出SETUP--发出PLAY--进入Loop循环接收数据--发出TEARDOWN结束连接. 可以抽成3个函数接口:rtspOpen rtspRead rtspClose. 首先我们来分析rtspOpen的过程: int rtspOpen(rtsp_object_t *p_obj, int tcpConnect) { ... ... TRA

服务器端 和 客服端 通信的 疑问点记录

为什么作为服务器端的电脑必须有唯一的ip地址,而又为什么客服端的电脑不受唯一的ip地址限制呢? MAC地址有局限性,如果两台电脑不在同一个子网络,就无法知道对方的MAC地址(MAC地址是广播机制找到的 也就是发送一个ip附加上MAC :FF FF FF FF FF FF  对应ip的主机收到后才会返回mac地址数据  但是只能在一个子网络进行广播) 访问某一不在一个子网络的网络资源时候 请求的只是一个ip地址 没有附加要访问服务器的MAC地址 但是同时会把自身的ip地址 和 MAC地址附加上到请

TCP/IP网络编程 学习笔记_7 --基于UDP的服务端/客服端

理解UDP UDP套接字的特点:在笔记2中讲套接字类型有提,类似信件或邮件的传输.UDP在数据传输过程中可能丢失,如果只考虑可靠性,TCP的确比UDP好.但UDP在结构上比TCP更简洁.UDP没有ACK,SEQ那样的操作,因此,UDP的性能有时比TCP高出很多.编程中实现UDP也比TCP简单.另外,虽然UDP是不可靠的数据传输,但也不会像想象中那么频繁地发生数据丢失.因此,在更重视性能而非可靠性的情况下(如传输视频,音频时),UDP是一种很好的选择.而如果是传递压缩文件则必须要用TCP,因为压缩

【转载】android客服端+eps8266+单片机+路由器之远程控制系统

用android客服端+eps8266+单片机+路由器做了一个远程控制的系统,因为自己是在实验室里,所以把实验室的门,灯做成了远程控制的. 控制距离有多远------只能说很远很远,只要你手机能上网的地方,不对应该是只要能打电话的地方,不对应该是只要是移动网(我用的是移动的卡)覆盖的地方, 这篇只说明怎么样才能实现远程通信(在路由器上怎样设置,wifi模块eps8266怎样设置),最后会贴上单片机,android的源码 请事先参考我的前几篇文章 android之WIFI小车编程详述, andro