搜档网
当前位置:搜档网 › 应用Yii和PHP5进行web的敏捷开发翻译

应用Yii和PHP5进行web的敏捷开发翻译

应用Yii和PHP5进行web的敏捷开发翻译
应用Yii和PHP5进行web的敏捷开发翻译

应用Yii和PHP5进行web的敏捷开发

第十二章:迭代9:添加管理模块

到目前为止,我们已经给TrackStar应用程序增加了很多功能。如果你还记得在第8章,我们介绍了使用基于用户角色的层次结构来限制用户访问某些功能。这有助于限制对一些单一项目的管理职能的访问。例如:在一个特定的项目中,你可能不希望让所有的成员都有删除权限。我们为用户分配到一个项目内的特殊角色来实现基于角色的访问控制,然后控制这些角色是否有访问该功能的权限。

然而,我们尚未解决的是整个应用程序的管理需求。例如TrackStar Web应用程序经常需要的有一个非常特殊的用户拥有所有的管理权限。其中一个例子就是让系统的每一个用户拥有CURD操作,而不仅仅是项目。我们应用程序的系统管理员应该有以下权限:能够登录,删除或者修改用户、项目、问题,管理所有的评论,等等。同时,我们经常建立适用于整个应用程序的额外功能,如能给所有用户发布站点系统信息,管理电子邮件运动,打开/关闭某些应用功能,管理角色的层次,改变站点主题,等等。因为管理员的权限与用户的权限有极大的不同,把这些功能和应用程序分离是一个好想法。我们将通过Yii模块建立所有的管理功能来完成这个分离。

12.1迭代计划

在这个迭代中,我们将集中完成以下开发任务:

?创造一个新的模块来存放管理功能

?为系统管理员建立系统广播功能,用户可以在项目列表页面查看

?为应用模块添加一个新课题

?创建一个新表保持系统消息数据

?为系统信息生成所有的CURD操作

?只允许管理用户使用新模块中的功能

?在项目列表页面显示新系统信息

12.2模块

模块类似于一个大型应用程序中的小型应用程序。它有与应用程序类似的结构,包含模型、视图、控制器及其他支持组件。然而,模块不能作为独立的应用程序,它们必须嵌入某一个应用程序。

Modules在帮助你的应用程序模块化架构方面很有用。大型的应用程序经常可以分成几个离散的应用程序,这些离散的应用程序也可以用模块来构建。站点功能,如添加一个用户论坛,用户博客或站点管理员功能都是一些例子,说明从主站点功能分离出来的功能,可以让它们单独开发,并且容易在未来的计划中重用。我们将在应用程序中不

同的位置建立存放管理功能的模块。

12.3创建一个模块

使用我们的老朋友,Gii代码生成工具创建一个新模块是很容易的。伴随着我们的URL的改变,要通过http://localhost/ trackstar / gii来访问该工具。打开后,在左边的菜单中选择Module Generator选项。你将看到下面的画面:

我们需要给模块取一个唯一的名字。由于我们正在创建一个管理模块,我们可以命名为admin。在Module ID内输入admin,点击Preview按钮。如下图所示,它会向你展示它将会生成的所有文件,让你在创建之前预览这些文件:

然后点击Generate按钮来生成这些文件。由于web服务器进程它自动创建文件夹和文件的要求,所以要确保你的/protected文件夹是可写入的。下面的截图显示一个成功的模块生成:

让我们更进一步的看看这个自动生成的模板。Yii中模块是以一个文件夹组织的,文件夹的名字就是该模块的名字。默认情况下,居所有的模块保存在/protected/modules 目录下。每个模块文件夹的结构都与主应用程序非常相似。这个指令为我们所做的是创建admin模块建立脚手架文件夹结构。因为这是我们的第一个模块,顶层的文件夹

/protected/modules被创建了,然后将admin文件夹放在里面。下面为我们展示了模块命令行为我们建立的所有文件夹和文件:

一个模块必须拥有一个模块继承自CWebModule或其子类。该模块类的名字由模块ID (在这里指admin) 和字符串Module联合生成。模块ID的第一个字母大写。所以,在我们的例子中,我们的admin模块类文件被命名AdminModule.php。模块类主要作为存储模块代码共享信息的中转站。例如,我们可以用CWebModule的params属性来存储模块性能的具体参数,并利用其components属性在模块级分享应用程序的组件。这个模块类在模块中的作用类似于应用程序类对整个应用程序的作用。所以CWebModule 是对模块的就像CWebApplication是对应用程序的。

12.4 使用一个模块

正如成功建立的信息表明,在我们使用新模块之前,我们需要在主应用程序中设置modules属性,才可以使用它。在添加gii模块应用程序之前,允许我们使用gii代码生成工具。我们对主要配置文件protected/config/ main.php 进行改变。以下代码显示了所需的改变:

PHP代码:

'modules'=>array(

'gii'=>array(

'class'=>'system.gii.GiiModule',

'password'=>'iamadmin',

),

'admin',

),

保存这个改变后,我们的新admin模块就可以使用了。我们可以先通过访问http:

//localhost/ trackstar/admin/default/index来看一下。该请求显示的模块的访问页类似于我们的主应用程序页,除了我们需要在路由中添加moduleID。所以我们的路径形式如下:moduleID/ controllerID/actionID。我们URL请求/admin/default/index 应该解释为admin模块的default控制器的index方法。当我们访问这个页面,我们看到类似下面的画面:

12.5 主题化一个模块

我们立刻发现这一视图(View)似乎没有应用任何布局(Layout)。有人可能会想,控制器渲染视图时用的是renderPartial(),而不是render()。然而,在检查我们的默认的admin的controller文件,/protected/modules/admin/controllers/ DefaultController.php时,我们可以看到,事实上它使用的是render()方法。因此,我们需要使用一个layout文件(如果有的话)。

问题是在模块中几乎一切都是独立的,包括layout文件的默认路径。网站模块布局的默认路径是/protected/ modules/[moduleID]/views/layouts,在我们的例子中moduleID应该是admin。我们可以看到,在这个文件夹中没有文件,所以没有应用默认布局。

在这里多讲一点。在上一次迭代中,我们实现了一个名为new的新主题。我们也可以通过这个主题管理我们所有的模块view文件,包括layout view文件。如果我们这样做,我们需要增加一些主题文件夹结构以适应我们的新模块。文件夹的结构与预期的一样。大致上为:/themes/[themeName]/views/[moduleID]/layouts/为布局文件,

/themes/[themeName]/views/[moduleID]/[controllerID]/为对应controller的视图文件。

为了说得更清楚,我们模拟一次admin模块调用view的过程的Yii决策流程。下面就是admin模块的DefaultController.php文件中$this->render('index') 的渲染过程:

1.当render()被调用,与renderPartial()不同,它会尝试用一个layout文件来修饰指定的视图文件index.php。我们的应用程序现在被配置使用名为new的主题,所以要在这个主题文件夹中找到layout文件。我们的新模块的DefaultController类继承自我们的应用程序组件controller.php,所以使用了column1作为指定的$layout的属性值。这个属性没有被重写,所以这也是DefaultController的Layout值。最后,当这些都在admin模块中完成后,Yii首先寻找以下layout文件:/themes/new/views/admin/layouts/column1.php。注意到在这个文件夹结构包含了moduleID。

2.这个文件不存在,所以在模块的着默认位置查找。如前所述,每一个模块都有特定的默认布局文件夹。因此,在这种情况下,它将试图找到下面的layout文件:

/protected/modules/admin/views/layouts/column1.php.

3.这个文件也不存在,因此它将不会使用layout。现在只是在没有布局时尝试简单的渲染指定试图文件index.php。但是,我们已经为应用程序定义了特定的主题new,所以它将首先寻找以下的视图文件:/themes/new/ views/admin/default/index.php。

4.这个文件也不存在,那么它将再次查找在这个模块(AdminModule)的控制器(DefaultController.php)的默认位置,即:/protected/modules/admin/views/default/index.

php。

这就解释了为什么网页http://localhost/trackstar/admin/default/index被渲染了却没有任何布局。现在,为了使事情变得完全分离和简单,让我们管理一下在我们的模块的默认位置的视图文件,而不是在主题new内。让我们为admin模块应用我们为原始应用程序设计的主题,就是在使用新主题前的样子。这样的话,我们的admin模块的页面就会和正常应用程序页面有所不同,这将有助于提醒我们,我们是在特殊的admin事务,但我们不需要花任何时间想出一个新设计。

12.6应用一个主题

首先,让我们为模块设定一个默认的layout值。我们在模块类的int()方法设置我们的的模块级配置,模块类位于/protected/ modules/AdminModule.php。打开这个文件,并且添加下面的代码:

PHP代码:

class AdminModule extends CWebModule

{

public function init()

{

// 当模块创建时,调用这个方法

// 你可以在这里用代码来自定义模块或应用程序

// 导入模块级模型和组件

$this->setImport(array(

'admin.models.*',

'https://www.sodocs.net/doc/df3873781.html,ponents.*',

));

$this->layout = 'main';

}

...

这样一来,如果我们在更细化的水平没有特别指定布局文件,像在一个控制器类中,模块的所有视图将会调用位于/protected/modules/ admin/views/layouts/下的main.php布局文件来修饰。

现在,我们自然需要创建这个文件。从主应用程序复制两个布局文件:

/protected/views/layouts/main.php和/protected/ views/layouts/column1.php,并把他们两个放在/protected/modules/ admin/views/layouts/文件夹。复制完之后,我们需要对它们做一些修改。

首先修改column1.php文件。在beginContent()中去除对/layouts/main的引用,修改后代码如下:

PHP代码:

beginContent();?>

endContent();?>

在未指明导入文件时调用beginContent(),将会使用模块的默认的布局文件,而我们刚刚将其指定到新复制的main.php文件。

现在让我们对main.php布局文件做一些修改。我们打算给应用程序头部添加Admin Console文本,来强调我们是应用程序的一部分。我们也将修改我们的菜单项,添加一个到管理主页的链接,以及一个回到主站点的链接。我们可以消除这个菜单的About和Content链接,因为我们并不需要在管理部分重复这些选项。修改后代码如下:

PHP代码:

...

...

文件其余部分不变。现在如果我们访问admin模块页面,我们看到类似下面的画面:

如果我们点击Back To Main Site的链接,我们被带回到最新主题主应用程序。

12.7 限制admin模块的访问

一个你可能已经注意到的问题是:任何用户,包括游客都可以访问我们的新的admin 模块。但实际上我们建立admin模块只想将该功能提供给拥有管理员权限的用户。所以我们要解决这个问题。

幸运的是,我们已经在第8章就在应用程序中实现了RBAC访问模型。我们现在要做的是将其扩大,包括一个新的管理员角色和该角色的管理权限。如果你回忆一下在第八章中,我们使用了一个Yii脚本命令来实现RBAC的结构。我们需要增加命令。所以,打开包含脚本命令的文件,/protected/commands/shell/RbacCommand.php和添加以下内容:

PHP代码:

//给管理员创建一个常规的任务级权限

$this->_authManager->createTask("adminManagement","access to the

application administration functionality");

//创建站点管理员的角色,并添加适当的权限

$role=$this->_authManager->createRole("admin");

$role->addChild("owner";

$role->addChild("reader");

$role->addChild("member");

$role->addChild("adminManagement");

//确保我们系统内有一个管理员(使它是用户的id号为1)

$this->_authManager->assign("admin",1);

当着修改完成后,我们必须重新运行我们的命令来更新数据库。这样做之后,打开yiic shell,执行rbac的命令:

% cd Webroot/trackstar

% protected/yiic shell

>> rbac

当我们对RBAC模型修改完后,我们可以添加一个访问检查

AdminModule:beforeControllerAction()方法,这样admin模块中没有什么事物会被执行,除非用户是admin角色:

PHP代码:

public function beforeControllerAction($controller,$action)

{

if(parent::beforeControllerAction($controller,$action))

{

// 在模块控制器执行actions之前,调用这个方法

// 你可以在这里自定义代码

if( !Yii::app()->authManager->checkAccess("admin",Yii::app()-

>user->id) )

{

throw new CHttpException(403,Yii::t('yii','You are not authorized

to perform this action.'));

}

else

{

return true;

}

}

else

return false;

}

当这些都完成后,如果在admin模块中,一个没有被分配到admin角色的用户试图访问网页,他们将会遇到授权错误页面。例如,如果你在没有登录的情况下,试图访问管理页面,你会遇到以下结果:

这同样适用于任何未被指派admin角色的用户。

现在,我们可以在主应用程序菜单添加admin部分的链接。这样,拥有管路员权限的用户不需要记住的是繁琐的URL就可以进入到管理控制台。作为一个提示,我们的主应用程序菜单位于应用主题的默认布局文件中,/themes/new/views/layouts/main.php。打开这个文件,并且作如下修改:

PHP代码:

现在,使用有admin权限的用户登录应用程序,我们将会看到在顶部的导航中有一个新的链接,它将带我们到站点新添加的admin部分。

12.8 添加系统级的信息

由于一个模块可以被认为是一个小型应用程序,因此,向模块添加功能和向主程序添加功能具有相同的步骤。让我们只为管理员添加一些新功能;这个功能可以使他们第一次登录应用程序时向用户显示的系统级信息。

12.9 创建数据库表

和创建新功能一样,我们需要一个地方来放置我们的数据。我们需要创建一个新的表来存储我们系统级的信息。对于我们而言,我们可以简单一点。下面是我们数据表表的定义:

SQL代码:

CREATE TABLE `tbl_sys_message`

(

`id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,

`message` TEXT NOT NULL,

`create_time` DATETIME,

`create_user_id` INTEGER,

`update_time` DATETIME,

`update_user_id` INTEGER

)

在主要的trackstar_dev和我们的trackstar_test数据库中都创建这个新表。

12.10 创建模型和CRUD脚手架

当表建立好以后,下一步就是使用Gii代码生成器来建立模型类了。我们将首先使用Model Generator来创建模型类,然后用Crud Generator创建脚手架来与该模型快速互动。接下来,引导Gii工具表单来创建一个新的模型。

这一次,我们是在模块内容中做的,我们需要明确指定模型的路径。用下面的图中所描述的值填写表单(当然,你的Code Template路径值应该是具体到您的本地设置):

现在,我们可以用相同的方式创建的CRUD脚手架。同样的,以前我们所做的与我们现在正在做的之间的唯一的区别在于模型类的位置是在admin模块中。从Gii工具选择Crud Generator选项后,按照如下图填写Model Class和Controller ID:

这里要注意一点,我们的模型类是在admin模块之中的,我们的控制类以及所有其他与这个代码生成有关的文件也应被放置在管理模块中。

通过点击Preview按钮后点击Generate按钮完成文件创建。下图是所有被创建的文件列表:

12.11 将链接添加到我们的新功能

让我们在主admin部分导航内添加一个新的菜单项链接到我们新建的消息功能。打开含有我们的主菜单导航的文件,/protected/modules/admin/ views/layouts/main.php,并将在menu不见添加下列数组项:

array('label'=>'System Messages,'url'=>array('/admin/sysMessage/index')),

由于为新的系统消息功能自动创建controller和view文件使用了2列布局文件,我们可以做下列两件事之一:我们可以改变controller文件让它使用我们现有的单个列布局文件,或者我们可以新增2列的布局文件到我们的admin模块。后面的会很容易做到,也会更好看,因为所有的view文件都被设计成拥有一个自菜单项,里面存放了所有crud 功能的连接,而该菜单项被放在右边的一列中。下面是我们所要做的步骤:

1. 从主应用程序中复制2列布局到admin模块:即复制/protected

iews/layouts/column2.php和/protected/modules/ admin./views/layouts/column2.php。

2.删除新复制的column2.php 文件中的第一行上的beginContent() 方法的输入内

容/layouts/main。

3.修改SysMessage()模型类,使之继承自TrackstarActiveRecord(如果你还记得,这将添加代码自动更新create_time/user和update_time/user属性)。更新SysMessageController 控制器类使用新的位于模块文件内的column2.php 布局文件,而不是主应用程序的。自动生成的代码中$layout='https://www.sodocs.net/doc/df3873781.html,youts.column2',但我们需要的修改$layout = 'column 2'。

4.由于我们继承自TrackstarActiveRecord,我们可以删除在自动生成系统消息创建的窗体中不必要的字段和模型的类,同时移除与之项目的模型类中的rules。在SysMessage::rules()方法中移除一下内容:array('create_user,update_user,'numerical,'integerOnly'=>true) 还有array('create_time,update_time,'safe')。

最后一步不是必需的,但它的好处是只验证这些用户可以输入字段规则的习惯。

最后一个需要修改的是,我们应该是更新我们简单的访问规则,来实现只有admin 角色中的用户可以访问这个方法的需求。这也是为什么我们在

AdminModule::beforeControllerAction()方法中使用RBAC模型的原因。我们实际上可以将accessRules 完全删除。但是,我们要通过更新它以实现要求,所以你在下面可以看到,如何使用访问规则的方法。使用以下的代码替换SysMessageController::accessRules() 方法:

PHP代码:

public function accessRules()

{

return array(

array('allow',// 只允许用户有“admin”的角色才可以进入行动

'actions'=>array('index','view','create','update',

'admin','delete'),

'roles'=>array('admin'),

),

array('deny',// 否认所有用户

'users'=>array('*'),

),);

}

好了,都改完以后,如果使用http://localhost/trackstar/admin/sysMessage/create访问新消息输入表单,我们将看到类似下图的界

在表单中填写Hellow Users! This is your admin speaking…后点击Submit按钮。应

用程序将重定向到类似下面的新建消息的清单页面:

12.12向全体用户显示消息

现在我们已经将消息存入在我们的系统,我们将展示给在应用程序的主页的用户。

12.13 在应用程序级导入新模型类

为了在应用程序中随时访问我们新创建的模型,我们应当将其配置为应用程序的一部分。修改protected/config/main.php文件内容如下:

PHP代码:

// 半自动生成模型和组件类

'import'=>array(

'application.models.*',

'https://www.sodocs.net/doc/df3873781.html,ponents.*',

'application.modules.admin.models.*',

),

12.14 选择最近更新的消息

我们将限制只显示一条消息,并且会根据表中的update_time来选择。我们希望把它添加到主项目列表页面,所以我们需要修改ProjectController::actionIndex()方法。通过添加以下代码来改变该方法:

PHP代码:

public function actionIndex()

{

$dataProvider=new CActiveDataProvider('Project');

Yii::app()->clientScript->registerLinkTag( 'alternate','application/rss+xml',

$this->createUrl('comment/feed'));

//基于update_time获得系统最新显示的消息

$sysMessage = SysMessage::model()->find(array(

'order'=>'t.update_time DESC',

));

if($sysMessage != null)

$message = $sysMessage->message;

else

$message = null;

$this->render('index',array(

'dataProvider'=>$dataProvider,

'sysMessage'=>$message,

));

}

现在,我们需要改变我们的视图文件来显示新内容。只需要在views/project/index.php 的

Projects

上添加下列代码:

PHP代码:

现在我们只要访问我们的项目列表页面(即我们的应用程序主页),就会看到如下图所显示的内容:

12.15 添加少许的设计调整

好了,这完成了我们想要做的,但是对用户来说,这条消息并不是最完美的,我们可以在我们的css主文件中(/themes/new/css/main.css)添加一点片段来做一点修改:

CSS代码:

div.sys-message

{

padding:.8em;

margin-bottom:1em;

border:3px solid #ddd;

background:#9EEFFF;

color:#FF330A;

border-color:#00849E;

}

修改完成后,我们的页面消息就更完美了。下图显示了更改以后的消息:

可能有人会说,这种设计调整太多了。如果整天盯着这些消息的颜色,用户可能会头痛。我们可以用用一个段小的JavaScript脚本使消息在五秒后淡出。由于我们只在用户访问该主页我们显示该消息,这样则这可以避免他们盯着看太长时间。

我们将使事情变得更容易,因为Yii框架包含了强大的JavaScript框架jQuery。jQuery是一个开源的JavaScript库,它简化了HTML文档对象模型(DOM)和JavaScript 之间的交互。深入介绍jQuery的细节不在这本书的范围之内,但访问其文件以稍微熟悉一下其特点,这是非常值得的。由于Yii包含了jQuery,你可以直接在Yii的视图文件中使用jQuery代码,Yii会自动帮你管理好jQuery库的数据。

我们也将使用该应用程序的辅助组件CClientScript在生成的网页中来注册jQuery JavaScript代码。这将确保它被放置在适当的地方,以及也会被适当的标识和格式化。

那么,让我们改变一下之前添加的可以使消息淡出的一个JavaScript脚本。用下面的代码替换我们刚刚添加到views/project/index.php中的代码:

PHP代码:

Yii::app()->clientScript->registerScript(

'fadeAndHideEffect',

'$(".sys-message").animate({opacity:1.0},5000). fadeOut("slow");'

);

endif;?>

现在,如果我们刷新我们的主项目列表页面,我们会看到消息在五秒钟后淡出。更多的可以轻松地添加到你的网页的,很酷的jQuery效果的信息,你可以看看jQuery的API文档:https://www.sodocs.net/doc/df3873781.html,/ category/effects/

最后,你可以添加另一个系统信息来确保一切都正常工作。因为该条消息获得了最新的update_time属性,所以它将成为唯一现实的那一条。

12.16 总结

在本次迭代中,我们介绍了Yii模块的概念,并且实践了如何添加admin模块到网站。我们了解了如何创建一个新的模块,如何使用一个新主题,如何在模块内添加应用程序的功能,甚至如何利用现有的RBAC模型在模块内申请一个功能的访问授权。我们还演示了如何使用jQuery为我们的应用程序添加UI效果。

此外,随着这个管理界面的添加,我们完成了应用程序所有的主要功能。虽然应用程序是非常简单,但我们觉得是时候将它们发布出去了。下一次迭代中我们将聚焦如何将该程序放置到发布环境中。

网站设计与Web应用开发技术习题答案

各章习题参考答案 第1章习题参考答案 1. 答:Internet是一个宽泛的概念,WWW实际上Internet所提供的众多服务中的一项。由于很多人上网主要浏览网站,很多初学者容易混淆这两个概念。 2. 答:统一资源定位符(URL)用于定位某个资源,由于Internent的复杂性,其提供的服务及传输协议有很多种,为了能区分,URL中必须进行说明,此处的http就是为了说明该请求属于超文本传输协议;URL的概念比较宽泛,http只是其中的一种传输协议,也可能出现别的情况,比如ftp等。。而www则是所请求服务器的域名,有些服务器的域名中就不包含www。 3. 答:其实技术是没有好坏之分的,关键在于是否适合你所应用的环境以及你是否能掌握。一味的求新、求好是没有经验的开发者所采取的行动。我们不应该单纯追求技术的先进性,而要追求有效和实用,当你要实现一个方案时,要分析项目的性质及最终用户,然后再寻找能解决问题的最经济、最实用也能满足用户需要的手段。因为用户并不关心你采用多么先进的技术,用户关心的是可靠(Reliable)、快速(Rapid)、方便(Convenient)。 4. 答:可以根据上文提供的基本原则,进行区分。不过有些网站不能截然的划分成其中的某一种。平时上网时多观察,多思考,对于提高自己的能力有很大的帮助。 第2章习题参考答案 1.答:可以简单的通过两个方式进行判断: (1) 查看“管理工具”下是否有“Internet信息服务(IIS)管理器”,通过查看可以获知; (2) 直接在浏览器中输入“0.1”,看是否能看到有关信息。 2. 答:一般来说,这样就可以使用了,不过使用默认的配置可能会在将来出现问题。因此,通常我们需要进一步对网站进行配置。根据实际需要,一般来说,网站的安全性配置和网站的性能配置是需要修改的。 3. 答:按照目前官方网站的说法,目前的Apache2完全能够替代Apache1了,从下面的网页,大家可以清楚的了解Apache2对于Apache1.x版本所作的改进之处。 第3章习题参考答案 1. 答:完全可以,但不是在浏览器的地址栏里输入,我们需要首先通过80端口(有些Web服务器可能不使用这个端口)登录到服务器,例如使用dos命令: teln 然后,在下面的界面上(什么都看不见,也不回显)输入类似于以下的信息: Accept:*/* Pragma:no-cache Cache-Control:no-cache

web开发技术试卷及参考答案

《WEB开发技术》期末考卷(A) 一、选择题(30题、每题2分、总计60分) 1、是用于创建Web应用程序的平台,此应用程序可使用IIS和.NET Framework在Windows 服务器上运行。 # 2、文件由Visual 创建,用于定义Web应用程序的配置。 A. 3、打开SQL Connection 时返回的SQL Server 错误号为4 060,该错误表示: 。 A. 连接字符串指定的服务器名称无效 B. 连接字符串指定的数据库名称无效 C. 连接超时 D. 连接字符串指定的用户名或密码错误 4、在DataSet中,若修改某一DataRow 对象的任何一列的值,该行的DataRowState 属性的值将变为。 A. B. C. D. 5、关于网页中的图像,下列说法正确的是。 A.图像由标签开始,由结束 B.图像标签的href属性用于指定图像链接的URL 属性的值是所要显示图像的URL D.以上全都是错的 6、如果希望单击超链接打开新的HTML页面,则需将target属性设为。 7、为创建在SQL Server 2000 中执行Select 语句的Command 对象,可先建立到SQL Server 2000 数据库的连接,然后使用连接对象的方法创建SqlCommand 对象。 A. CreateObject B. OpenSQL C. CreateCommand D. CreateSQL 8、为了在程序中使用ODBC .NET 数据提供程序,应在源程序工程中添加对程序集______ 的引用。 A. B. C. . D. 9、DataAdapter 对象的DeleteCommand 的属性值为null,将造成: A. 程序编译错误 B. DataAdapter 在处理DataSet 中被删除的行时,将引发异常 C. DataAdapter 在处理DataSet 中被删除的行时,这些行将被跳过不处理 D. DataAdapter 在处理DataSet 中被删除的行时,将出现对话框询问用户如何处理该行 10、下列语句的值是。 String str=”中华人民共和国”; (“人”); B.2 11、应用程序中所有页面均可以访问变量。 12、指令用于定义页面解析器和编译器所使用的特定的页面的属性。 A. @Page B. @Control C. @Import D. Register

网站设计与Web应用开发技术(第二版)习题答案

附录各章习题参考答案 第1章习题参考答案 1. 答:Internet是一个宽泛的概念,WWW实际上Internet所提供的众多服务中的一项。由于很多人上网主要浏览网站,很多初学者容易混淆这两个概念。 2. 答:统一资源定位符(URL)用于定位某个资源,由于Internent的复杂性,其提供的服务及传输协议有很多种,为了能区分,URL中必须进行说明,此处的http就是为了说明该请求属于超文本传输协议;URL的概念比较宽泛,http只是其中的一种传输协议,也可能出现别的情况,比如ftp等。。而www则是所请求服务器的域名,有些服务器的域名中就不包含www。 3. 答:其实技术是没有好坏之分的,关键在于是否适合你所应用的环境以及你是否能掌握。一味的求新、求好是没有经验的开发者所采取的行动。我们不应该单纯追求技术的先进性,而要追求有效和实用,当你要实现一个方案时,要分析项目的性质及最终用户,然后再寻找能解决问题的最经济、最实用也能满足用户需要的手段。因为用户并不关心你采用多么先进的技术,用户关心的是可靠(Reliable)、快速(Rapid)、方便(Convenient)。 4. 答:可以根据上文提供的基本原则,进行区分。不过有些网站不能截然的划分成其中的某一种。平时上网时多观察,多思考,对于提高自己的能力有很大的帮助。 5. 略 第2章习题参考答案 1.答:主要包括以下几个步骤(1) 建立网站前的市场分析,(2) 建设网站目的及功能定位,(3) 网站的技术解决方案,(4) 网站内容规划,(5) 网页界面设计,(6) 网站测试,(7) 网站发布与推广,(8) 网站维护,(9) 网站建设日程表,(10) 费用明细。详细内容可参考本书 2.2部分。 2.答:可以简单的通过两个方式进行判断: (1) 查看“管理工具”下是否有“Internet信息服务(IIS)管理器”,通过查看可以获知;这个方法可以获知本机是否使用了IIS服务,且仅对Windows操作系统有效。 (2) 直接在浏览器中输入“http://127.0.0.1”,看是否能看到有关信息(若安装的Web 服务器所设置的端口不是默认的80,则此方法无效)。 (3) 在本机执行netstat –a命令,查看是否存在Web服务器。 Web服务器的安装方法请查看本书2.4部分。 3.答:一般来说,这样就可以使用了,不过使用默认的配置可能会在将来出现问题。因此,通常我们需要进一步对网站进行配置。根据实际需要,一般来说,网站的安全性配置和网站的性能配置是需要修改的。

Web开发技术及其应用学习心得

Web开发技术及其应用学习心得 从大学开始接触Web应用开发技术,但是大学里概念性的东西过强,导致学完后对于如何实际应用开发并不是很有条理。 一、何为Web应用程序 我刚开始学习的是java和C++应用程序,这些程序只能在本机上运行,接触了Web应用程序开发,才知道原来自己一直在接触使用Web应用程序,像在学校使用的教务管理系统还有经常用上的人人网,都是Web应用程序,Web应用程序首先是“应用程序”,和用标准的程序语言,如C、C++、C#等编写出来的程序没有什么本质上的不同。然而Web应用程序又有自己独特的地方,就是它是基于Web的,而不是采用传统方法运行的。换句话说,它是典型的浏览器/服务器架构的产物。也就是说我们开发的程序是运行在服务器端,客户使用浏览器就可以使用程序提供的服务。 二、Web应用程序开发常用语言 Web应用程序开发常用语言有JSP、ASP、PHP、https://www.sodocs.net/doc/df3873781.html,等,自己在网上对这些语言进行的一些了解,这些语言各有各的优势和缺点,编程者可以根据各自的情况选择编程语言,我起初学习Web编程的时候是学的JSP,它的底层语言是JAVA,由于有过Java和网页设计的基础学习起来也不是很麻烦,上手还是比较快的,但是随着系统的复杂度的提高我发现开发越来越麻烦,每个表单和控件都要自己定义引用,后来通过同学的推荐,开始着手学习https://www.sodocs.net/doc/df3873781.html,,它是微软公司继ASP后推出的又一门服务器端脚本语言,https://www.sodocs.net/doc/df3873781.html,一般分为两种开发语言,https://www.sodocs.net/doc/df3873781.html,和C#,C#相对比较常用,因为是.NET独有的语言,https://www.sodocs.net/doc/df3873781.html,则为以前VB 程序设计,适合于以前VB程序员,如果新接触.NET,没有其他开发语言经验,建议直接学习C#。 三、如何学好https://www.sodocs.net/doc/df3873781.html, 学习https://www.sodocs.net/doc/df3873781.html,我个人觉得首先应该对HTML标签有所了解,因为开发动态网页还是要跟HTML标签打交道,多了解一些你在编程的时候更容易上手,还有HTML 提供的一些表单,最好能熟悉,在https://www.sodocs.net/doc/df3873781.html,中也提供了各类控件,这些控件的学习都比较简单,所见即所得,可以直接向页面中拖各种控件,后台代码写在.cs 文件中。关于学习方法,个人心得总结如下: 学习的过程最好能结合各自情况,像我自身只是一般的初学者,所以我从先看一些https://www.sodocs.net/doc/df3873781.html,的视频教程,尽快熟悉它的用法和规范,因为这样接受比较快,但是不能一味的只看视频,必须要学着去实践,开始可以跟着视频上的例子照葫芦画瓢作一些试试,可以自己尝试着去修改例子,将它变成自己的东西。另外又找了两本.net方面的书,最佳组合是一本基础的书和一本实例书,这样可以巩固前面的学习,如果有不清楚的地方可以直接查书,加深记忆,看实例的书,并且最好能照着书上实现一遍,提高自己的水平,前万不要眼高手低,要不到到头来前功尽弃,前面学的都忘了。 此次授课的老师实践经验非常丰富,他把学员建立在现实开发的基础上,深入浅出,引用实例,授课一点也不枯燥,我们在接受了他们大量的信息的同时,很自然地消化处理,没有任何被动。Java语言程序设计、数据库技术基础、Servlet和JSP编程基础到轻量级J2EE体系架构程序开发,老师们贴切的例子

Web开发技术习题集

第一章 1.下列动态网页和静态网页的根本区别描述错误的是(D) A、静态网页服务器端返回的HTML文件是事先存储好的; B、动态网页服务器端返回的HTML文件是程序生成的; C、静态网页文件里只有HTML标记,没有程序代码; D、动态网页中只有程序,不能有HTML代码; 真棒,答对了! 2.下面哪一项不是网页制作工具(D) A、FrontPage; B、Dreamweaver; C、Visual Studio; D、PhotoShop; 3.目前的物联网、大数据和云计算的智能生活时代属于下列哪个web发展阶段(C) A、; B、; C、; D、; 题目解析:一般认为11或者12年开始进入Web 时代,属于大互联时代。典型特点是多对多交互,不仅包括人与人,还包括人机交互以及多个终端的交互。智能手机促进了移动互联网的发展。现在是大互联时代的初期,真正的时代一定是基于物联网、大数据和云计算的智能生活时代,实现了“每个个体、时刻联网、各取所需、实时互动”的状态,也是一个“以人为本”的互联网思维指引下的新商业文明时代。 4.关于webservice,下列说法错误的是(D) A、webservice可以通过手机端访问; B、Web应用程序中无需下载安装Web服务可直接调用网上的Web服务提供的方法来实现某个功能;

C、webservice服务可实现分布式应用; D、webservice不能通过局域网访问; 题目解析:局域网可以访问在本局域网内部的webservice服务,能不能访问webservice取决于web服务的服务所在网络位置。 5.域名系统DNS的含义是(A) A、Domain Name Service; B、Direct Network System; C、Dynamic Network System; D、Distributed Network Service; 6.下列有关浏览器到服务器到脚本到程序表述正确的是(D) A、一个URL指向一个CGI脚本. 一个CGI脚本的URL能如普通的URL一样在任何地方出现; B、服务器接收请求, 按照那个URL指向的脚本文件(注意文件的位置和扩展名),执行脚本; C、脚本执行基于输入数据的操作,包括查询数据库、计算数值或调用系统中其他程序; D、脚本不能产生某种Web服务器能理解的输出结果; 7.关于“服务端/客户端技术”的描述,不正确的是(D) A、“服务器端/客户端技术”描述的是一种工作方式; B、我们用来浏览网页的计算机属于客户端; C、web服务器既属于服务器端,也可属于客户端; D、web服务器只能属于服务器端; 8. 下面这段Html代码在浏览器中运行结果为(C)

asp。net web 应用开发技术喻钧课后答案修正版

第一章 1.填空、选择题(1)网址(2)D (3)A (4)C (5)A 2.解答题 (1)c/s结构适用于局域网,要有专门的小范围的网络硬件环境,b\s结构则是适用于广域网,只要能接入internet的用户即可使用;c/s结构用户有固定还有限,系统升级和维护难,成本也高, b\s结构客户端零维护,易于实现系统的无缝升级;c/s结构软件单一、整体性好,可重用性差;b\s结构是多重结构,构件独立,可重用性好;c/s结构客户端和服务器是平台相关,b\s结构则是不相关;c/s结构信息控制性强,b\s结构就相对来说较弱。 (2)他们主要区别在于服务器对他们的处理方式不同。静态网页都具有一个固定的URL,它的内容是原封不动被传递的,想要修改网页内容,必须修改HTML源代码,静态网页没有数据库的支持,不支持客户端与服务器端的交互;动态网页中,不同额请求和访问数据的变化会生成不同的HTML代码,网页内容会改变,它具有数据库访问功能,支持客户端与服务器端的交互。 (3)客户端脚本语言都是解释型的,基于对象的脚本语言,他们的工作机制是:将脚本嵌入到web页面中,并随着HTML文件一起传送到客户端,由浏览器解释执行;服务器脚本语言则都运行在服务器端,能够动态的生成网页,脚本运行不受客户端浏览器限制,脚本程序都是将脚本语言嵌入到HTML文件中,执行后返回到客户端HTML代码。 第二章 1.(1)HTML网页文件的标记是,网页文件的主体标记是,标记页面标题的标记是。 (2)表格的标签是(

),单元格的标签是()。表格的宽度可以用百分比和(像素)两种单位来设置。 (3)表单对象的名称由(name)属性设定;提交方法由(method)属性指定;若要提交大量数据,则采用(POST)方法;表格提交后的数据处理程序由(target)属性指定。 (4)当表格以电子邮件的形式发送,MIME类型设置为(multipart)。 (5)DTD是对(XML)文档所做的规范和约定。 2、(1)A; (2)C; (3)C; (4)A; (5)A;(6)B;(7)D;(8)C. (9) B; (10) A; 3、 (1)XML和HTML都来自于SGML,它们语法相似,但是传统的HTML无法表达数据的含义,而这恰恰是电子商务、智能搜索必须的。HTML不能表述化学符号。数学公式、音乐符号、矢量图形等。HTML扩展性差,而且XML语法较为严格,具有良好的自描述性。(2)XHTML包括XML和HTML,DHTML就是动态的HTML,包含HTML/XHTML,CSS,JavaScript。 (3)XML Schema比DTD提供额类型更多,具有更强的表现能力,能够更好的满足不同领域应用的需求。 (4)CSS包含一个或多个格式化规定和定义,他控制XML和HTML文档中的标签如何在浏览器的显示;XSLT用于将一种XML文档转换为另外一种XML文档,或者可被浏览器识别的其他类型的文档,比如HTML和XHTML。换句话说,CSS只适合用于输出比较固定的最终文档。CSS的优点是简洁,消耗系统资源少;而XSLT虽然功能强大,但因为要重新索引XML结构树,所以消耗内存比较多。将它们结合起来使用,比如在服务器端用XSLT 处理文档,在客户端用CSS来控制显示 第三章 一、选择题 1、D 2、A 3、B 4、C 5、C 6、C 7、B 8、C

介绍Java Web项目开发需要使用到的技术

介绍Java Web项目开发需要使用到的技术 目前,国内外信息化建设已经进入基于Web应用为核心的阶段,Java作为应用于网络的最好语言,前景看好。然而用Java建造一个web应用不是件轻松的事情,概括一下,实施Java的WEB项目需要掌握的技术如下: Java语言 面向对象分析设计思想 设计模式和框架结构 XML语言 网页脚本语言 数据库 应用服务器 集成开发环境 下面我们具体地看每个技术. 1.Java语言 Java语言体系比较庞大,包括多个模块。从WEB项目应用角度讲有JSP、Servlet、JDBC、JavaBean(Application)四部分技术。 Java Database Connectivity (JDBC)技术: 在Java Web应用开发中,数据库管理系统(RDBMS)的使用是不可缺少的。JDBC(Java Database Connectivity) 是一种用于执行SQL 语句的Java API。它由一组用Java 编程语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的API,使他们能够用纯Java API 来编写数据库应用程序。简单地说,JDBC 可做三件事: 与数据库建立连接 发送SQL 语句 处理结果 Servlet技术 Servlet是运行在服务器端的程序,可以被认为是服务器端的applet。servlet被Web服务器(例如Tomcat)加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种操作,然后返回结果。 Servlet的主要优点包括: Servlet是持久的。servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)。 Servlet是与平台无关的。如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。 Servlet是可扩展的。由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。servlet自然也具备了这些特征。 Servlet是安全的。从外界调用一个servlet的惟一方法就是通过Web服务器。这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。 Servlet可以在多种多样的客户机上使用。由于servlet是用Java编写的,所以你可以很方便地在HTML中使用它们。 JavaServer Pages(JSP) 技术: JSP是从Servlet上分离出来的一小部分,简化了开发,加强了界面设计。JSP定位在交互网页的开发。运用Java语法,但功能较Servlet弱了很多,并且高级开发中只充当用户界

《Web应用程序开发》教学大纲

《Web应用程序开发》课程教学大纲 课程名称:Web应用程序开发课程编码: 英文名称:Web Application Development 学时:54 学分:3 开课学期:第七学期 适用专业:计算机科学与技术 课程类别:专业必修课 先修课程:数据库原理与应用、Java面向对象程序设计、网页制作技术 建议教材:《Web技术应用基础》第2版,樊月华,清华大学出版社 一、课程目的、任务 《Web应用程序开发》是计算机科学与技术专业的一门专业必修课。本课程以理论和实际应用相结合,使学生通过本课程的学习,熟悉Web技术的各种基本概念、体系结构和主要组成,并达到一定的应用水平。掌握一种主流的Web集成技术,熟悉其配置和应用环境,能与传统程序设计和数据库开发技术相结合,并能根据实际问题,能独立设计、开发、调试完成一个Web应用。 二、课程教学基本要求 通过本门课的学习,使学生掌握构建Web应用软硬件平台的基本技能,具有基本的Web 编程能力,掌握HTML、CSS与XML、JavaScript技术的应用,熟练掌握应用JSP技术完成数据库库信息存储、管理与发布技术。本课程的教学形式采用课堂讲授与实训相结合的形式,教学中要注重学生动手能力的培养,帮助学生提高综合应用Web技术来开发Web应用的方法和技巧,提高学生综合解决Web应用问题的能力。要求学生学会扩展学习的能力。提高学生应用知识和技术解决应用技能。本课程考核以平时课程考核和期末考核为主,分别占40%和60%。 三、课程教学内容(分章节) 第一章Web技术概述 1.1 Web简介 1.2 计算机网络基础 1.3 IP地址、域名和URL 1.4 Web基础知识

asp。net-web-应用开发技术喻钧课后答案修正版

asp。net-web-应用开发技术喻钧课后答案修正版

第一章 1.填空、选择题(1)网址(2)D (3)A (4) C (5)A 2.解答题 (1)c/s结构适用于局域网,要有专门的小范围的网络硬件环境,b\s结构则是适用于广域网,只要能接入internet的用户即可使用;c/s结构用户有固定还有限,系统升级和维护难,成本也高, b\s结构客户端零维护,易于实现系统的无缝升级;c/s结构软件单一、整体性好,可重用性差;b\s结构是多重结构,构件独立,可重用性好;c/s结构客户端和服务器是平台相关,b\s结构则是不相关;c/s结构信息控制性强,b\s结构就相对来说较弱。 (2)他们主要区别在于服务器对他们的处理方式不同。静态网页都具有一个固定的URL,它的内容是原封不动被传递的,想要修改网页内容,必须修改HTML源代码,静态网页没有数据库的支持,不支持客户端与服务器端的交互;动态网页中,不同额请求和访问数据的变化会生成不同的HTML代码,网页内容会改变,它具有数据库访问功能,支持客户端与服务器端的交

互。 (3)客户端脚本语言都是解释型的,基于对象的脚本语言,他们的工作机制是:将脚本嵌入到web页面中,并随着HTML文件一起传送到客户端,由浏览器解释执行;服务器脚本语言则都运行在服务器端,能够动态的生成网页,脚本运行不受客户端浏览器限制,脚本程序都是将脚本语言嵌入到HTML文件中,执行后返回到客户端HTML代码。 第二章 1.(1)HTML网页文件的标记是,网页文件的主体标记是,标记页面标题的标记是。 (2)表格的标签是(

),单元格的标签是()。表格的宽度可以用百分比和(像素)两种单位来设置。 (3)表单对象的名称由(name)属性设定;提交方法由(method)属性指定;若要提交大量数据,则采用(POST)方法;表格提交后的数据处理程序由(target)属性指定。 (4)当表格以电子邮件的形式发送,MIME类型设置为(multipart)。

JAVAWEB项目开发到底需要掌握哪些技术

JavaWeb项目开发到底需要掌握哪些技术 目前,国内外信息化建设已经进入基于Web应用为核心的阶段,Java作为应用于网络的最好语言,前景无限看好。然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。概括一下,实施Java的WEB项目需要掌握的技术如下: Java语言 面向对象分析设计思想 设计模式和框架结构 XML语言 网页脚本语言 数据库 应用服务器 集成开发环境 下面我们具体地看每个技术. 1、Java语言 Java语言体系比较庞大,包括多个模块。从WEB项目应用角度讲有JSP、Servlet、JDBC、JavaBean(Application)四部分技术。 (1)、Java Database Connectivity(JDBC)技术 在Java Web应用开发中,数据库管理系统(RDBMS)的使用是不可缺少的。JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API。它由一组用Java编程语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,使他们能够用纯Java API来编写数据库应用程序。 简单地说,JDBC可做三件事: 与数据库建立连接, 发送SQL语句, 处理结果。

(2)、Servlet技术 Servlet是运行在服务器端的程序,可以被认为是服务器端的applet。servlet被Web服务器(例如Tomcat)加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种操作,然后返回结果。 Servlet的主要优点包括 Servlet是持久的。servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)。 Servlet是与平台无关的。如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。 Servlet是可扩展的。由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。servlet自然也具备了这些特征。 Servlet是安全的。从外界调用一个servlet的惟一方法就是通过Web服务器。这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。 Servlet可以在多种多样的客户机上使用。由于servlet是用Java编写的,所以你可以很方便地在HTML中使用它们。 (3)、JavaServer Pages(JSP)技术 JSP是从Servlet上分离出来的一小部分,简化了开发,加强了界面设计。JSP定位在交互网页的开发。运用Java语法,但功能较Servlet弱了很多,并且高级开发中只充当用户界面部分。JSP容器收到客户端发出的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式响应给客户端。其中程序片段可以是:操作数据库、重新定向网页以及发送E-Mail 等等,这些都是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP称为Server-Side Language。JavaServer Pages的主要优点包括 ●一次编写,各处执行(Write oshy;nce,Run Anywhere)特性 作为Java平台的一部分,JavaServer Pages技术拥有Java语言“一次编写,各处执行”的特点。随着越来越多的供货商将JavaServer Pages技术添加到他们的产品中,您可以针对自己公司的需求,做出审慎评估后,选择符合公司成本及规模的服务器,假若未来的需求有所变更时,更换服务器平台并不影响之前所投下的成本、人力所开发的应用程序。 ●搭配可重复使用的组件 JavaServer Pages技术可依赖于重复使用跨平台的组件(如:JavaBean或Enterprise

WEB应用开发技术

WEB应用开发技术 题号:1 题型:是非题本题分数:5 内容: 网站中的Global.asax文件(如果有的话)必须放在应用程序的根目录下。() 1、错 2、对 标准答案:2 学员答案:1 本题得分:0 题号:2 题型:是非题本题分数:5 内容: 利用DetailsView控件增添记录特别方便,因为不需要另外增加输入框。() 1、错 2、对 标准答案:2 学员答案:2 本题得分:5 题号:3 题型:是非题本题分数:5 内容: 离开了网站,ASP网页能够单独运行。() 1、错 2、对 标准答案:1 学员答案:2 本题得分:0 题号:4 题型:是非题本题分数:5 内容: 网站中的Global.asax文件(如果有的话)必须放在应用程序的根目录下。() 1、错 2、对 标准答案:2 学员答案:2 本题得分:5 题号:5 题型:是非题本题分数:5

内容: Web.config是网站中必须的配置文件. () 1、错 2、对 标准答案:1 学员答案:1 本题得分:5 题号:6 题型:单选题(请在以下几个选项中选择唯一正确答案)本题分数:5 内容: 在https://www.sodocs.net/doc/df3873781.html,2.0中,可以使用哪个控件对数据进行分页: A、GridView B、页面加载视图 C、Smart Tag D、DataList 标准答案:A 学员答案:B 本题得分:0 题号:7 题型:单选题(请在以下几个选项中选择唯一正确答案)本题分数:5 内容: 下列语句执行后y的值为:int x=0,y=0; while(x<10) { y+=(x+=2); } A、10 B、20 C、30 D、55 标准答案:C 学员答案:C 本题得分:5 题号:8 题型:单选题(请在以下几个选项中选择唯一正确答案)本题分数:5 内容: 当页面运行时,可以调用Repeater控件的什么方法获取要显示的记录: A、DataView B、DataList C、DataSource D、DataBind 标准答案:D 学员答案:A 本题得分:0

308#——Web开发技术

《Web开发技术》模拟题 1 一、单项选择题 1、HTML是 C ___的缩写。 a)Hybrid Text Multipurpose Language b)High Texture Modular Language c)Hyper Text Markup Language d)Hyper Text Middleware Language 2、下列哪个标记可以在HTML文档里边插入水平线?A a)


b)

c) d) 3、插入电子邮件链接的协议为:D a)http b)ftp c)file d)mailto: 4、在HTML文档中插入文本区域的标记是:C a) b)