Dart网络编程-备忘录

准备工作

在开始之前先翻墙,至于怎么翻,就八仙过海,各显神通吧!

好了,我已经翻出去了,然后再创建一个dartium的快捷方式,其实dartium就是一个测试版的Chrome浏览器,dart目前只能在dartium下运行,谁叫dart是非主流呢

新建项目

打开WebStorm新建一个web项目,项目名就叫todo

项目创建成功后试试运行自动生成的代码,看看是否正常运行,正常运行的话就进行下一步,把todo.css、todo.dart、todo.html三个文件里的代码都删掉,没错,就是删掉,哈哈哈哈。。。。

敲敲代码

在todo.html里敲入下面的代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>备忘录</title>
  <link rel="stylesheet" href="todo.css">
</head>
<body>
<h2>未完成的待办事项</h2>

<div>
  <input id="to-do-input" type="text" placeholder="需要做什么?">
</div>

<div>
  <ul id="to-do-list"></ul>
</div>

<!--导入dart的相关文件-->
<script type="application/dart" src="todo.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>

在todo.css里敲入下面的代码

body {
  /*把多个字体名称作为一个“回退”系统来保存,如果浏览器不支持第一个字体,
  则会尝试下一个,相当于某个元素的字体族名称或/及类族名称的一个优先表*/
  font-family: 'Open Sans', sans-serif;
  /*为元素设置一种纯色,这种颜色会填充元素的内容、内边距和边框区域,
  扩展到元素边框的外边界(但不包括外边距)*/
  background-color: WhiteSmoke;
  /*设置所有外边距属性,该属性可以有1到4个值*/
  margin: 15px;
}

#to-do-input {
  font-family: 'Open Sans', sans-serif;
  /*设置字体的尺寸,实际上它设置的是字体中字符框的高度,
  实际的字符字形可能比这些框高或矮(通常会矮) */
  font-size: 14px;
  /*设置文本的粗细,数字值400相当于normal,700等价于bold*/
  font-weight: normal;
  /*定义元素边框与元素内容之间的空间,就是设置内边距属性*/
  padding: 5px 0px 5px 5px;
  /*设置元素的宽度*/
  width: 100%;
  /*设置所有的边框属性,可以按顺序设置如下属性:border-width、border-style、
  border-color,如果不设置其中的某个值也不会出问题*/
  border: 1px solid Silver;
  background-color: White;
}

#to-do-list {
  padding: 0px;
  margin: 0px;
  /*设置在何处放置列表项标记,用于声明列表标志相对于列表项内容的位置*/
  list-style-position: inside;
}

#to-do-list li {
  padding: 5px 0px 5px 5px;
  /*设置下边框的所有属性*/
  border-bottom: 1px dotted Silver;
}

对css写得好像有点太细了。。主要是写得时候为了思路清析点,因为我是做后端的,对前端基本就是一个小白。。

最后,在todo.dart里敲入下面的代码

import 'dart:html';

//声明元素对象
InputElement toDoInput;
UListElement toDoList;

void main() {
  //从DOM中获取元素
  toDoInput = querySelector('#to-do-input');
  toDoList = querySelector('#to-do-list');
  //设置事件处理,这里的事件是元素值改变时触发
  toDoInput.onChange.listen(addToDoItem);
}

//事件处理函数
void addToDoItem(Event e) {
  //新建一个元素对象
  var newToDo = new LIElement();
  newToDo.text = toDoInput.value;
  toDoInput.value = '';
  toDoList.children.add(newToDo);
}

好了,代码敲完了,可以运行了

页面效果

现在就看看效果吧

你以为这就完成了吗?怎么可能,一个web项目怎么可能没有服务器呢!

搭服务器

在项目下新建一个dart文件server.dart

然后再里面随便写点什么,运行一下,运行的方式如下图

这时可能出现以下错误

意思是编码不对,这时你要切换编码

然后在server.dart里敲入以下代码

import 'dart:io';
import 'package:http_server/http_server.dart';

//VirtualDirectory可以从根路径获取文件和目录清单
VirtualDirectory virDir;

void directoryHandler(dir, request) {
  //获取根目录下指定文件的路径
  var indexUri = new Uri.file(dir.path).resolve('todo.html');
  //返回指定的文件
  virDir.serveFile(new File(indexUri.toFilePath()), request);
}

//404错误的处理方法
void errorPageHandler(HttpRequest request) {
  request.response
  //设置状态码,如果没有设置则默认HttpStatus.OK
    ..statusCode = HttpStatus.NOT_FOUND
    ..write('找不到页面!')
    ..close();
}

void main() {

  //设置根路径
  virDir = new VirtualDirectory(Platform.script.resolve('web').toFilePath())
  //是否获取文件和目录清单,为false则不获取
    ..allowDirectoryListing = true
  //覆盖默认的错误处理页面,要注意顺序(错误处理要放在正常处理前面,否则无效)
    ..errorPageHandler = errorPageHandler
  //用指定的文件覆盖默认返回的目录清单
    ..directoryHandler = directoryHandler;

  //绑定一个IPv4的HttpServer,设置80端口
  HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 80).then((server){
    //通过HttpResponse对象让服务器响应请求
    server.listen((request){
      //将文件或目录清单返回给客户端
      virDir.serveRequest(request);
    });
  });
}

然后再运行server.dart。。。失败了,失败就对了,原因看下图

文件里根本就没有这俩货,怎么可能成功

下载依赖

打开pubspec.yaml文件

添加一句 http_server: any ,代码如下

name: todo
version: 0.0.1
description: A sample web application
dependencies:
  http_server: any
  browser: any
dev_dependencies:
#  unittest: any

然后点击 Get Dependencies

这样就会开始下载相关包

下载完成是这样的

然后我们再看一下目录

相关的依赖包都有了,现在就可以运行server.dart了

最终效果

运行server.dart

然后打开dartium,访问本机地址

分享一下我的项目文件
http://pan.baidu.com/s/1c0uF9Ji

更多关于服务器的信息请看相关文章
http://blog.csdn.net/hekaiyou/article/details/46483787
http://blog.csdn.net/hekaiyou/article/details/46501267
http://blog.csdn.net/hekaiyou/article/details/46503899

时间: 2024-10-01 10:18:34

Dart网络编程-备忘录的相关文章

Dart网络编程-备忘录2.0

这个项目是根据之前的备忘录升级的 http://blog.csdn.net/hekaiyou/article/details/46834057 先翻墙,再打开WebStorm,然后新建web项目todo_with_delete 创建成功后先试试运行,成功后再修改代码,首先修改todo_with_delete.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl

Dart网络编程-拼字游戏

先翻墙,再打开WebStorm,新建web项目,项目名为anagram 然后试试运行自动生成的代码,没问题就可以修改代码了 首先重写 anagram.html 的代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>拼字游戏</title> <link rel="stylesheet" href="anagr

iOS开发那些事-iOS网络编程同步GET方法请求编程

iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法.我们先了解其中最为简单的同步GET方法请求. 为了学习这些API的使用MyNotes"备忘录"应用实例,数据来源于服务器端,而不是本地的Notes.xml(或Notes.json)文件. 首先实现查询业务,查询业务请求可以在主视图控制器MasterViewController类中实现,其中MasterViewController.h代码如下: #import <UIKit/U

python网络编程之数据传输UDP实例分析

  本文实例讲述了python网络编程之数据传输UDP实现方法.分享给大家供大家参考.具体分析如下: 一.问题: 你觉得网络上像msn,qq之类的工具在多台机器之间互相传输数据神秘吗?你也想玩一下在两台机器之间传数据吗?今天让python告诉我们基本原理吧,当然只是做简单的了解,实际情况复杂的多. 我们今天用python实现一个简单的udp程序. 二.程序实现: 1) 使用模块 (socket)套接字模块: 套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问 .使用

python网络编程之文件下载实例分析

  本文实例讲述了python网络编程之文件下载实现方法.分享给大家供大家参考.具体如下: 真是越看越喜欢python啊,想要了解它提供的http和ftp下载功能,原来是如此的简单. 1.相应模块 ftplib模块定义了FTP类和一些方法,用以进行客户端的ftp编程.我们可用python编写一个自已的ftp客户端程序,用于下载文件或镜像站点.如果想了解ftp协议的详细内容,请参考RFC959或是查看python帮助吧. Urllib模块提供了非常高级的接口来从网络上抓取数据,主要使用到的是url

网络编程Socket

 网络模型 OSI参考模型 TCP/IP参考模型 可以上网脑补 学的网络编程主要在应用层(我想android.JavaWeb.QQ.梦幻西游等吧,估计是).传输层和网际层混,每个层都有自己的协议规则. 传输层主要用TCP(同步:面向连接,数据量大).UDP(异步:面向无连接,大小限制在64k内,QQ聊天.网络视频用的UDP) 网际层主要用IP协议 应用层协议:HTTP 网络通讯要素 IP地址:标识网络上的电脑的,相当于给电脑取个唯一的名字   192.168.1.1,最大只能设置255这是字

Java IO和网络编程的一些问题

1.网络编程时的同步.异步.阻塞.非阻塞? 同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果.异步:函数调用在没得到结果之前,没有调用结果,返回状态信息.阻塞:函数调用在没得到结果之前,当前线程挂起.得到结果后才返回.非阻塞:函数调用在没得到结果之前,当前线程不会挂起,立即返回结果. 2.Java如何实现无阻塞方式的Socket编程? NIO有效解决了多线程服务器存在的线程开销问题. 在NIO中使用多线程主要目的不是为了应对每个客户端请求而分配独立的服务线程, 而是通过多线程充分利用

Java编程那些事儿101——网络编程概述

第十三章 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输

iOS开发网络篇—网络编程基础(二)

下面叙述的是关于几个必须要知道的iOS网络编程入门级别的要点: 1.客户端如何找到连接的服务器 客户端通过URL找到想要连接的服务器 2.什么是URL URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL URL的基本格式 = 协议://主机地址/路径 http://www.520it.com/img/logo.png 协议:不同的协议,代表着不同的资源查