实验十利用ASP实现网页与Web服务器之间的信息交互
- 格式:ppt
- 大小:95.00 KB
- 文档页数:18
中前台页面和后台代码之间的交互1.页面中获取后台page类中的全局变量代码:publicpartialclass RiverBasin : System.Web.UI.Page {publicstring HiddenFieldX = "99.87495";publicstring HiddenFieldY ="24.799886";protectedvoid Page_Load(object sender, EventArgs e) {if (!Page.IsPostBack) { } } }前台js或html:var point = new BMap.Point( <%=HiddenFieldX%>, <%=HiddenFieldY%>);page类在页面回传或首次请求时都会被实例化,那么全局变量会被重置,如果想在!ispostback 中修改了变量,并想在postback中恢复,那么只有先保存到hidden控件当中然后在postback 的时候恢复。
这种方法用于少量数据的传输,类似mvc中的viewbag。
2.页面中使用后台代码的方法前台(使用#说明这个是在绑定控件当中):<%# SetIsCheck(Eval("SAExamStuta"))%>后台方法:protected string SetIsCheck(object check) { if(Convert.ToBoolean(check)) { return "<spanstyle='color:Red'>开启</span>"; } else{ return "<span style='color:Black'>关闭</span>"; } }一般用于在绑定的时候,还需要根据不同数据进行不同的显示。
WEB服务器的配置及简单ASP程序运⾏实验六WEB服务器的配置及简单ASP程序运⾏⼀、实验⽬的1、掌握IIS配置的⽅法。
2、学会编写和运⾏简单ASP程序。
⼆、实验内容与步骤(⼀)IIS配置和添加IIS服务⾸先要安装IIS,安装完成后,进⾏如下配置。
1、在E盘新建⼏个⽂件夹,名称分别为“web1”,“web2”,“web3”⽤来放⽹页⽂件。
并将⽼师传给的“注册⽹页.html”和“⽹页”⽂件夹复制到“web1”⽂件夹中。
2、选择“开始”→“控制⾯板”→性能和维护→“管理⼯具”→“Internet信息服务管理器”来打开IIS管理器如下图3、在“默认⽹站”上单击⿏标右键,选“属性”,进⼊名为“默认站点属性”设置界⾯;在“IP地址”后的下拉菜单中选择所需⽤到的本机IP地址(如192.168.1.65);4、在“默认⽹站”上单击⿏标右键,选择“新建虚拟⽬录”,5、在“别名”处输⼊“test1”,6、然后点击下⼀步,在⽬录处点击“浏览”按钮,选中存放⽹页的⽂件夹(或输⼊“E:\web1”)。
点击下⼀步,完成。
7、打开IE浏览器,在地址栏输⼊http://localhost/test1/注册⽹页.htm回车后观看,再输⼊http://localhost/ test1/⽹页/我的⽹页.htm之后再按回车键,此时就能显⽰,则说明设置成功!⼆、建⽴更多的Web站点:1、在E盘下建⽴⼀个⽂件夹,名字为web2,并将⽼师传给你们的myfirst.asp和aaa.asp复制到web2⽂件夹中。
2、在“默认⽹站”上单击⿏标右键,选择“新建虚拟⽬录”,5、在“别名”处输⼊“test2”,6、然后点击下⼀步,在⽬录处输⼊“E:\web2”点击“浏览”按钮,选中存放⽹页的⽂件夹。
点击下⼀步,完成。
6打开IE浏览器,在地址栏输⼊“http://localhost /test2/aa.asp”之后再按回车键,此时就能够调出⾃⼰⽹页的⾸页,则说明设置成功!7还可依次类推,建⽴第三个web站点。
河南机电高等专科学校学生实验报告实验课程名称 Web标准网页设计与ASP 实验项目名称使用Connection对象连接数据库系、部年级专业班学生姓名学号实验时间 20 12 年月日使用Connection对象连接数据库一、实验目的1.掌握数据库的链接方法;2.使用Execute方法查询数据库。
二、实验步骤(一)Connection对象使用Connection对象之前先要建立该对象,语法如下:Set对象实例名=Server.CreateObject(“ADODB.Connection”)说明:①对象实例名可以是任意一个变量名,但通常这个实例名都约定命名为conn。
②因为ADO中的对象都不是ASP的内置对象,因此不能直接使用它们,必须用Server.CreateObject方法先建立该对象的实例。
(二)使用Execute方法操控数据库1.利用Insert语句添加记录利用SQL语言的Insert语句可以执行添加操作,而使用Connection对象的Execute方法实际上可以执行任何SQL语句。
因此利用Execute方法执行一条Insert语句,就可以在数据表中添加一条记录。
2.利用Delete语句删除记录当管理员希望删除某些留言时,就需要在数据库中删除记录,可以利用Connection对象的Execute方法执行一条Delete语句来删除记录。
3.利用Updata语句更新记录当需要修改某条留言时,就需要用Execute方法执行Updata语句更新记录。
(三)检索数据库信息的实例1.创建一个学生信息的数据库使用Access2003软件创建一个学生信息表,信息内容包括:学号、姓名、地址、出生日期和性别。
并保存为db1.mdb。
2.使用Connection对象连接数据库连接上面建立的数据库,将连接设计保存为conn.asp,连接代码如下:<% dim connset conn=Server.CreateObject("ADODB.Connection")conn.open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db1.mdb") )%>3.使用Execute方法检索出性别为女的学生的信息将检索页面保存为show.asp,其代码如下:<!--#include file="conn.asp" --><%sql="select * from db1 where sex='女'"set rs=conn.execute(sql)%>4.显示性别为女的学生的信息显示性别为女的学生的所有信息,这与3在一起编写,其代码为:<body><table width="936" height="68" border="1"><tr><%for i=0 to rs.fields.count-1%><th><%=rs(i).name%></th><%next%></tr><%while not rs.eof%><tr><%for j=0 to rs.fields.count-1%><td><%=rs(j)%></td><%next%></tr><%rs.movenextwend%></table></body>5.完成学生信息的检索。
页⾯之间数据传递的⼏种⽅法1)Request.QueryString在ASP时代,这个是较常⽤的⽅法,到了,好像⽤的⼈不多了,但是不管怎么说,这是⼀个没有过时,且很值得推荐的⽅法,因为不管是ASP还是,最基本的都还是基于HTTp协议的。
缺点是⾮常明显的,让在多个页⾯传递时,可能就Request不到了2)Session这个是最常⽤的⼀个⽅法,Session的优点是使⽤简单,缺点是占⽤服务器资源,因为每⼀个Session都意味这服务器需要维护相应客户的会话信息,⾃然如果登录的⽤户多了,那么将⾮常占⽤服务器资源。
另外Session还有⼀个缺点,默认的如果你登录后20分钟内没有任何动作,服务器⾃动会取消该会话,所以那时你⼜需要登录。
PS。
这⾥使得我想起⼀个事情,前⼏天有⼀个公司让我看了⼀段代码,在登录时,就是使⽤Session记录⽤户登录的,My GOD,微软知道了肯定要吐⾎!!它⾟⾟苦苦给你提供的web.config⾥的配置 <deny user="*"/> 就要这⼀个配置,你不⽤,仍然⽤ASP时代的Session,岂不是浪费了MS的⼀⽚苦⼼3)Application这个在ASP时代还是⽐较常⽤的,主要⽤去存储全局变量,例如数据库链接信息,到了时代,⽤的不多,⾄少我好象⼀直没有⽤过。
4)Cookie这个是我的最爱,Cookie最⼤的特点是由客户端维护,不⽤占⽤服务器资源,⽽且你可以设定⽤户登录时,Cookie的有效期,例如⼀天,这样在⼀天内你不⽤担⼼系统再让你登录。
当然Cookie也有缺点,那就是安全性,因为Cookie在客户端,确实有些软件可以分析Cookie的登录信息,所以你写⼊Cookie的内容不要过于敏感,例如不要存储密码,还有作为安全,写⼊Cookie的内容最好要加密。
5)Viewstate新增的,Viewstate使⽤简单,缺点是只能够在同⼀个页⾯使⽤,在2.0⾥这个问题可以使⽤Button的PostBackUrl进⾏结果。
基于ASP的Web数据库交互访问技术初探[摘要]ASP是一个位于服务器端的脚本运行环境,通过这种环境,用户可以创建和运行动态的交互式Web服务器应用程序,如交互式动态网页,包括使用HTML 表单收集和处理信息,上传与下载、web数据库存取等等。
本文通过对ASP技术的介绍和运用实例说明了ASP技术在交互式网页设计中登陆WEB数据库系统中实现方法。
[关键词]ASP WEB数据库ADO(ACTIVEX DATA OBJET)一、前言ASP即Microsoft Active Server Pages,是一套微软开发的服务器端脚本环境,ASP内含于IIS 4.0和5.0之中,通过ASP我们可以结合HTML网页、ASP指令和ActiveX元件建立动态、交互且高效的WEB服务器应用程序。
有了ASP你就不必担心客户的浏览器是否能运行你所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通HTML中的脚本程序。
当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。
二、ASP动态网页的技术优势及其特点随着Internet的发展,静态Web站点的开发与维护变得越来越困难,一方面,信息的不断增加和变化,使站点维护人员不得不经常修改他们的网页,特别是基于数据库驱动的Web站点更是如此;另一方面,静态网页由于不能与浏览者进行有效交互,使人们感到越来越乏味,而不愿意再一次地进入同一站点。
所以开发动态网页或动态内容成了越来越多的站点所追求目标。
所谓动态内容是由每一个用户按照自己的需求发出请求而特殊制作的Web网页。
ASP的技术特点如下:(1)使用VBScript、JScript等简单易懂的脚本语言,结合HTML代码,即可快速地完成网站的应用程序。
(2)无须编译,容易编写,可在服务器端直接执行。
(3)使用普通的文本编辑器,如Windows的记事本,即可进行编辑设计。
Web页面之间传值问题研究摘要:在程序中,各个Web页面是相互孤立的,信息不能进行传递,如何高效地交换数据,是一个值得研究的问题。
Web页面之间传值的方法较多,但多数对性能消耗较大,利用Microsoft Visual Studio 2010开发平台,精选出三种性能高效的传值方法。
关键词: Web程序开发;Web页面传值0 引言 Web页面之间传值有多种方法,性能好的Web传值方法有以下3种。
1 查询字符串所谓查询字符串,是采用?name=wupingui之类的写法,在这一URL中,从问号(?)开始到结尾的部分就是查询字符串。
在网页之间相互跳转,常常需要传值,如何传值就需要使用查询字符串,其代码如下:/index.aspx?name=wuping&salary=3000在上述的url中,查询字符串有两个字段,一个字段是name,另外一个字段是salary,不论目标网页是相同Web应用程序中的网页还是外部网站的网页,查询字符串都可以顺利运行,而且目标网页不限于网页。
不过当目标网页是一个网页时,可以在目标网页中使用HttpRequest对象的QueryString属性来读取查询字符串的字段值。
在vs2010中新建一个页面employee.aspx,在页面上放置两个lable、两个TextBox和一个Button在该页面的Button1_Click事件中增加以下代码:protected void Button1_Click(object sender, EventArgs e){string name = this.TextBox1.Text;string salary = this.TextBox2.Text;Response.Redirect("salary.aspx?name=" + name +"&salary=" + salary + "",true);}在页面salary.aspx页面Page_Load事件上增加以下代码:protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){string name = Request.QueryString["name"].ToString();string salary = Request.QueryString["salary"].ToString();Response.Write(“姓名为:”+ name + "");Response.Write(“工资为:”+ salary);}}在页面employee.aspx中,姓名文本框中输入wupingui,在工资文本框中输入2500。
Web前端开发实训案例教程初级前后端数据交互Web前端开发是当前互联网行业中非常热门的领域,而前后端数据交互是Web前端开发过程中必备的技能之一。
在这篇文章中,我们将探讨Web前端开发实训案例,并介绍初级前后端数据交互的方法和实践。
一、案例背景在本次实训案例中,我们将创建一个简单的任务管理系统。
该系统可以用于记录和管理任务的创建、分配、完成等信息。
前端页面将展示任务列表,并提供添加、删除、编辑等功能。
后端将负责接收和处理前端发送的请求,并与数据库交互,实现数据的持久化。
二、前端开发环境搭建在开始开发前,我们需要搭建好前端开发环境。
首先,确保你已经安装了最新版本的Node.js和npm工具。
然后,使用npm安装前端开发所需的依赖包,如Webpack、Babel等。
接下来,创建一个项目文件夹,并在其中初始化一个新的npm项目。
在项目中安装必要的开发工具和框架,如React、Vue等。
最后,使用命令行工具启动开发服务器,以便在浏览器中预览和调试前端页面。
三、前后端数据交互方法在任务管理系统中,前后端数据交互是非常重要的。
前端通过发送请求来获取、新增、修改或删除任务信息,而后端则负责接收和处理这些请求,并将对应的操作应用到数据库中。
1. 获取任务列表:前端向后端发送GET请求,后端查询数据库中的任务数据,并将数据以JSON格式返回给前端。
2. 添加任务:前端向后端发送POST请求,请求中包含新任务的信息。
后端接收到请求后,将新任务信息存储到数据库中,并返回操作结果给前端。
3. 修改任务:前端向后端发送PUT请求,请求中包含要修改的任务信息。
后端接收到请求后,根据任务ID在数据库中查询到对应的任务数据,并将修改后的任务信息更新到数据库中。
4. 删除任务:前端向后端发送DELETE请求,请求中包含要删除的任务ID。
后端接收到请求后,根据任务ID在数据库中删除对应的任务数据。
四、实训案例步骤在本次实训案例中,我们将按以下步骤进行前后端开发和数据交互的实践。
SignalR 实现服务端消息推送到Web端之前的文章介绍过 SignalR, ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信. 今天我们来实现服务端消息推送到Web端, 首先回顾一下它抽象层次图是这样的:实际上 SignalR 2 实现服务端消息推送到Web端, 更加简单. 为了获取更好的可伸缩性, 我们引入消息队列, 看如下基本流程图:消息队列MQ监听, 在Web site 服务端一收到消息,马上通过Signalr 推送广播到客户端. 创建 MVC WEB APP, 从NuGet安装SignalR 2.12Install-Package Microsoft.AspNet.SignalR具体实现代码,是这样的,我们增加一个空的Hub:publicclass FeedHub : Hub{publicvoid Init(){}}是简单的消息模型, 标题与正文属性:[Serializable]publicclass PushMessageModel{publicint Id { get; set; }publicstring MSG_TITLE { get; set; }publicstring MSG_CONTENT { get; set; }}服务端推送具体类,记录日志, 创建消息队列实例,监听, 等待收取消息. 这里我们使用的是AcitveMQ的.net客户端. ActiveMQListenAdapter是一个封装过的对象.publicclass MQHubsConfig{privatestatic ILogger log = new Logger("MQHubsConfig");/// <summary>/// Registers the mq listen and hubs./// </summary>publicstaticvoid RegisterMQListenAndHubs(){varactivemq =Megadotnet.MessageMQ.Adapter.ActiveMQListenAdapter<PushMessage Model>.Instance(MQConfig.MQIpAddress,MQConfig.QueueDestination);activemq.MQListener += m =>{Format("从MQ收到消息{0}", m.MSG_CONTENT);GlobalHost.ConnectionManager.GetHubContext<FeedHub>().Clients. All.receive(m);};activemq.ReceviceListener<PushMessageModel>();}}上面有一句关键代码GlobalHost.ConnectionManager.GetHubContext<FeedHub>() .Clients.All.receive(m); 这里使用了GetHubContext方法后,直接来广播消息.需要在MVCApplication下加载:publicclass MvcApplication : System.Web.HttpApplication{protectedvoid Application_Start(){AreaRegistration.RegisterAllAreas();FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles); MQHubsConfig.RegisterMQListenAndHubs();}}同时需要增加一个Starup.cs, 用于Owin[assembly: OwinStartup(typeof(RealTimeApp.Startup))] namespace RealTimeApp{publicclass Startup{publicvoid Configuration(IAppBuilder app){// Any connection or hub wire up and configuration should go here app.MapSignalR();}}}接下来是客户端App.js:function App() {var init = function () {Feed();$.connection.hub.logging = true;$.connection.hub.start().done(function() {console.log("Connected!");$(document).trigger("Connected");}).fail(function() { console.log("Could notConnect!"); });};init();};Feed.js 具体与SignalR.js通信, 创建名为receive的function, 与服务端对应function Feed() {var chat = undefined;var init = function () {// Reference the auto-generated proxy for the hub.chat = $.connection.feedHub;// Create a function that the hub can call back to display messages. chat.client.receive = function (item) {var selector = "ul.feed-list li[data-id=" + item.Id + "]";if (!($(selector).length > 0)) {$("ul.feed-list").prepend($(".feed-template").render(item)); $("ul.feed-list li:gt(3)").remove();}$.messager.show({title: 'Tips',msg: item.MSG_CONTENT,showType: 'show'});};// Start the connection.$.connection.hub.start().done(function () {chat.server.init();});};init();};上面的javascript代码与服务端有通信, 具体看如下图:在Index.cshtml, 我们需要引用SignalR客户端JS, 放置hubs, 这里我们使用了jsrender, easyui.js 来呈现推送的消息.@model dynamic@section Scripts {<link href="/Content/themes/default/window.css"rel="stylesheet" /><link href="~/Content/themes/default/progressbar.css"rel="style sheet"/><link href="~/Content/themes/default/linkbutton.css"rel="styles heet"/><script src="~/Scripts/jquery.signalR-2.1.2.min.js"></script> <!--Reference the autogeneratedSignalR hub script. --><script src="~/signalr/hubs"></script><scriptsrc="~/Scripts/jsrender.js"></script><scriptsrc="~/Scripts/jquery.easyui.min-1.4.1.js"></script> @Scripts.Render("~/Scripts/project.js")<script type="text/javascript">$(document).ready(function () {var app = new App();});</script>}<div class="row-fluid"><div class="span8"><div class="widget"><div class="widget-header"><h2>Feed</h2></div><div class="widget-content"><ul class="span12 feed-list"></ul></div></div></div></div><script class="chat-template" type="text/x-jquery-tmpl"> <li><p>{{>Message}}</p></li></script><script class="feed-template" type="text/x-jquery-tmpl"> <li data-id="{{>Id}}"><div class="row-fluid"><div class="span8"><h3>{{>MSG_CONTENT}}</h3></div></div></li></script>上代码服务端引用js的Script.Render, 需要在BundleConfig.cs中加入以下代码:bundles.Add(new ScriptBundle("~/Scripts/project.js").IncludeDirectory("~/Scripts/Project", "*.js", false));同时我们构建一个WebAPI来发送需要推送的消息, 片断代码:/// <summary>/// SendMessage/// </summary>/// <param name="messagemodel">The messagemodel.</param>/// <returns></returns>[HttpPost]public IHttpActionResultSendMessage(PushMessageModelmessagemode l){return SendToServer(messagemodel);}/// <summary>/// Sends to server./// </summary>/// <param name="messagemodel">The messagemodel.</param>/// <returns></returns>private IHttpActionResultSendToServer(PushMessageModelmessagemo del){if (ModelState.IsValid){if (messageRepository.SendMessage(messagemodel)){log.Debug("发送成功!");return Ok();}else{log.ErrorFormat("发送失败!{0}", messagemodel);return Content(HttpStatusCode.ExpectationFailed, new Exception("send message error"));}}else{log.ErrorFormat("参数验证失败!{0}", messagemodel);return Content(HttpStatusCode.BadRequest, ModelState);}}发送消息到ActiveMQ的关键代码:publicclass MessageRepository:IMessageRepository{privatestatic ILogger log = new Logger("MessageRepository");/// <summary>/// 发送消息/// </summary>/// <param name="messagemodel"></param>/// <returns></returns>publicbool SendMessage(PushMessageModelmessagemodel){varactivemq =new ActiveMQAdapter<PushMessageModel>(MQConfig.MQIpAddress, MQConfig.QueueDestination);return activemq.SendMessage<PushMessageModel>(messagemodel)>0;}}如果您需要运行DEMO程序,需要构建基于ActiveMQ的消息队列, 运行效果是这样的, 我们在一个静态html中, 发送一个ajax到webapi服务端, 发送后另一个website网站收到后, 列表更新, 并在右下角弹出框IE的控制台输出:HTML1300: Navigation occurred.File: Index[11:05:25 GMT+0800 (China Standard Time)] SignalR: Client subscribed to hub 'feedhub'.[11:05:25 GMT+0800 (China Standard Time)] SignalR: Negotiating with'/signalr/negotiate?clientProtocol=1.4&connectionData=%5B %7B%22name%22%3A%22feedhub%22%7D%5D'. [11:05:25 GMT+0800 (China Standard Time)] SignalR: This browser doesn't support SSE.[11:05:25 GMT+0800 (China Standard Time)] SignalR: Binding to iframe's load event.Iframe transport started.[11:05:25 GMT+0800 (China Standard Time)] SignalR: foreverFrame transport selected. Initiating start request. [11:05:25 GMT+0800 (China Standard Time)] SignalR: The start request succeeded. Transitioning to the connected state.[11:05:25 GMT+0800 (China Standard Time)] SignalR: Now monitoring keep alive with a warning timeout of13333.333333333332 and a connection lost timeout of 20000.[11:05:25 GMT+0800 (China Standard Time)] SignalR: Invoking feedhub.InitConnected![11:05:25 GMT+0800 (China Standard Time)] SignalR: Invoked feedhub.Init[11:07:12 GMT+0800 (China Standard Time)] SignalR: Triggering client hub event 'receive' on hub 'FeedHub'. [11:07:18 GMT+0800 (China Standard Time)] SignalR: Triggering client hub event 'receive' on hub 'FeedHub'. [11:07:32 GMT+0800 (China Standard Time)] SignalR: Triggering client hub event 'receive' on hub 'FeedHub'.Triggering client hub event 'receive' on hub 'FeedHub'. [11:09:25 GMT+0800 (China Standard Time)] SignalR: Triggering client hub event 'receive' on hub 'FeedHub'. 上面粗体是最后我们发的第5条信息控制台的输出.。