ASP.Net+XML打造留言薄

 ASP.Net+XML打造留言薄

 一.概述:
  留言簿是网站的一个重要组成部分,是访问者发表意见的场所,也是网站管理员了解网站基本运行情况的有力工具,所以留言簿在现在的网站中扮演了十分重要的角色。

  不过在以前开发一个留言簿并不是一件容易的事,开发者的工作量往往会很大。而现在随着微软推出VS.NET,相应的技术也推陈出新。特别是XML技术在.NET Framework中的广泛运用,使得整个.NET构架具有十分优越的基础。而ASP.NET中推出的崭新的编程模型更使得开发Web应用程序变得非常容易。本文就结合ASP.NET技术和XML技术的优点向大家介绍如何打造一个属于自己的留言簿。

  二.实现方法:

  一个基本的留言簿应至少包括两个功能:接受用户输入的信息并保存该信息到后台数据库;显示用户输入的信息。用户输入的信息一般包括用户名、Email地址、QQ号码、用户主页、留言信息等,这些信息通常是保存在后台数据库的某个表中的,不过本文要运用一个XML文件来存储这些信息。显示用户输入的信息时一般得把所有的信息都显示出来,这里的方法就是从XML文件中读取数据并运用XSLT技术对其进行格式转换,最后以HTML的形式显示在浏览器中。

  这样,我们的留言簿就需要两个Web页面,一个用于接受用户的输入信息,另一个用于显示用户已经输入过的信息。而存储信息的XML文件(guestbook.xml)则需具有如下的结构:

<?xml version="1.0" encoding="GB2312"?>
<guestbook>
<guest>
<name>令狐冲</name>
<email>doose@etang.com</email>
<qq>10102350</qq>
<homepage>www.doose.com</homepage>
<comment>本留言簿由"令狐冲"创建,希望你能喜欢哦:)要知道如何创建一个属于自己的留言簿,那么就请仔细阅读《运用ASP.NET和XML技术打造留言簿》一文!</comment>
</guest>
</guestbook>

  下面我们先来创建用于接受用户输入信息的Web页面-GuestBook.aspx。根据前面所提的基本要求,该Web页面包括了以下几个部分:留言簿标题、"用户名:"标签及输入框、"Email地址:"标签及输入框、"QQ号码:"标签及输入框、"个人主页:"标签及输入框、"留言信息:"标签及输入框、一个"确定"按钮、一个"重置"按钮、一个"查看留言簿"按钮,同时该页面还包括了两个验证按钮,分别用于验证用户名以及Email地址是否为空,若为空,则提醒用户输入。同时,为使留言簿具有良好的用户界面,我运用了表格进行页面布置,这样留言簿中的各个成分就能有条有理,层次分明了。有关该Web页面的详细代码请参考文后附带的源代码,这里就不给出了。页面布置的图示如下:


图1

  完成了该Web页面的布置,我们仅仅是完成了一部分的工作,到此为止我们并没有进行过真正的编码。我想大家对ASP.NET中的代码后置技术肯定是了解或熟悉的,它将Web页面的布置工作和后端的编码工作区分开来,达到了良好的分离效果。下面我们就为该Web页面中的三个按钮分别编写消息相应函数:

private void btnOK_Click(object sender, System.EventArgs e)
{
SaveXMLData();

name.Text = "";
email.Text = "";
qq.Text = "";
homepage.Text = "";
comment.Text = "";
}

private void btnReset_Click(object sender, System.EventArgs e)
{
name.Text = "";
email.Text = "";
qq.Text = "";
homepage.Text = "";
comment.Text = "";
}

private void btnView_Click(object sender, System.EventArgs e)
{
// 显示所有用户的留言信息
Response.Redirect( "ViewGuestBook.aspx" );
}

  其中,第一个按钮是最重要的,它能将用户的输入信息存储到XML文件中,调用的方法就是SaveXMLData();而第二个按钮仅仅完成文本框的重置清空工作;第三个按钮的作用是运用另一个Web页面显示所有的用户输入信息。同时,第一个按钮在成功保存信息后也会将浏览器导向到显示所有用户输入信息的页面。
  下面我们来详细分析一下SaveXMLData()方法,其实现如下:

private void SaveXMLData()
{
try
{
// 创建一个XmlDocument对象,用于载入存储信息的XML文件
XmlDocument xdoc = new XmlDocument();
xdoc.Load( Server.MapPath( "guestbook.xml" ));

// 创建一个新的guest节点并将它添加到根节点下
XmlElement parentNode = xdoc.CreateElement( "guest" );
xdoc.DocumentElement.PrependChild( parentNode );

// 创建所有用于存储信息的节点
XmlElement nameNode = xdoc.CreateElement( "name" );
XmlElement emailNode = xdoc.CreateElement( "email" );
XmlElement qqNode = xdoc.CreateElement( "qq" );
XmlElement homepageNode = xdoc.CreateElement( "homepage" );
XmlElement commentNode = xdoc.CreateElement( "comment" );

// 获取文本信息
XmlText nameText = xdoc.CreateTextNode( name.Text );
XmlText emailText = xdoc.CreateTextNode( email.Text );
XmlText qqText = xdoc.CreateTextNode( qq.Text );
XmlText homepageText = xdoc.CreateTextNode( homepage.Text );
XmlText commentText = xdoc.CreateTextNode( comment.Text );

// 将上面创建的各个存储信息的节点添加到guest节点下但并不包含最终的值
parentNode.AppendChild( nameNode );
parentNode.AppendChild( emailNode );
parentNode.AppendChild( qqNode );
parentNode.AppendChild( homepageNode );
parentNode.AppendChild( commentNode );

// 将上面获取的文本信息添加到与之相对应的节点中
nameNode.AppendChild( nameText );
emailNode.AppendChild( emailText );
qqNode.AppendChild( qqText );
homepageNode.AppendChild( homepageText );
commentNode.AppendChild( commentText );

// 保存存储信息的XML文件
xdoc.Save( Server.MapPath( "guestbook.xml" ));

// 显示所有用户的留言信息
Response.Redirect( "ViewGuestBook.aspx" );
}
catch( Exception e ) {}
}

  该方法主要运用了XmlDocument类、XmlElement类以及XmlText类等,这些类都是包含在System.Xml命名空间中的,所以请在代码文件的开头处添加using System.Xml的语句。该方法运用了一个try-catch语句块,在try部分首先通过创建一个XmlDocument对象来载入XML文件,然后创建根节点的儿子-guest节点并在guest节点下添加存储信息所必须的五个子节点。所有这些子节点都是XmlElement对象,它们是通过XmlDocument对象的CreateElement()方法来获取的。同时,XmlDocument对象还通过CreateTextNode()方法来获取文本信息并在后面将其添加到相对应的节点中。在合理的添加guest节点及其子节点以及文本信息后,XmlDocument对象通过Save()方法将用户输入的信息保存到XML文件中。最后,浏览器会导向到显示所有用户输入信息的页面。这样,该Web页面运行的效果如图2所示:


图2

  下面我们来创建用于显示所有用户输入信息的页面-ViewGuestBook.aspx。在该Web页面中,我们要运用到XSLT技术,它能将前面创建的XML文件中的数据以HTML的形式显示出来。由于是运用XSLT技术显示用户输入信息的,所以在设计该Web页面时我们无需添加任何Web控件,只要重载该Web页面的Load()方法即可。

private void Page_Load(object sender, System.EventArgs e)
{
// 创建一个XmlDocument对象以载入存储信息的XML文件
XmlDocument xdoc = new XmlDocument();
xdoc.Load( Server.MapPath( "guestbook.xml" ));

// 创建一个XslTransform对象并导入XSL文件
XslTransform xslt = new XslTransform();
xslt.Load( Server.MapPath( "guestbook.xsl" ));

string xmlQuery = "//guestbook";
XmlNodeList nodeList = xdoc.DocumentElement.SelectNodes( xmlQuery );

MemoryStream ms = new MemoryStream();
xslt.Transform( xdoc, null, ms );
ms.Seek( 0, SeekOrigin.Begin );

StreamReader sr = new StreamReader( ms );

// 显示输出结果
Response.Write( sr.ReadToEnd() );
}

  该方法首先创建一个XmlDocument对象用于载入前面创建的XML数据文件,之后创建一个XslTransform对象并导入相应的XSL文件。通过该XSL文件中的内容它能将原来的XML文件中的数据格式化为HTML的形式并显示在浏览器中。因为其中运用到了XSLT转换,所以我们还得在代码文件的开头处添加using System.Xml.Xsl的语句。

  下面便是XSL文件的源代码,其中最重要的部分是<xsl:template match="name">……</xsl:template>一块。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1" style="border-collapse: collapse" bordercolor="Teal" align="center" width="505" height="34">
<tr>
<td valign="middle" align="center" bgcolor="Teal" colspan="2" width="505" height="85">
<font style="color:White;background-color:Teal;font-family:华文行楷;font-size:X-Large;font-weight:bold;">欢迎访问"令狐冲"的留言簿!</font>
</td>
</tr>
<tr><td width="505" height="26" align="left" colspan="2"></td></tr>
<xsl:for-each select="//guest">
<xsl:apply-templates select="name"/>
</xsl:for-each>
<tr>
<td valign="middle" align="center" colspan="2" width="505">
<font>
本留言簿由<a href="mailto:0024108@fudan.edu.cn">王凯明</a>开发! </font>
</td>
</tr>
</table>
</xsl:template>
<xsl:template match="name">
<tr>
<td width="95" height="26" align="right">
<font>用户名:</font>
</td>
<td width="400" height="26" valign="middle" align="left">
<font><xsl:value-of select='.'/></font>
</td>
</tr>
<tr>
<td width="95" height="26" align="right" bgcolor="e0e0e0">
<font>Email地址:</font>
</td>
<td width="400" height="26" valign="middle" align="left" bgcolor="#e0e0e0">
<font><a HREF="mailto:{../email}"><xsl:apply-templates select="../email"/></a></font>
</td>
</tr>
<tr>
<td width="95" height="26" align="right">
<font>QQ号码:</font>
</td>
<td width="400" height="26" valign="middle" align="left">
<font><xsl:apply-templates select="../qq"/></font>
</td>
</tr>
<tr>
<td width="95" height="26" align="right" bgcolor="#e0e0e0">
<font>个人主页:</font>
</td>
<td width="400" height="26" valign="middle" align="left" bgcolor="#e0e0e0">
<font><a HREF="http://{../homepage}" target="_blank"><xsl:apply-templates select="../homepage"/></a></font>
</td>
</tr>
<tr>
<td width="95" height="26" valign="top" align="right">
<font>留言信息:</font>
</td>
<td width="400" height="26" valign="top" align="left">
<font><xsl:apply-templates select="../comment"/></font>
</td>
</tr>
<tr><td width="505" height="26" align="left" colspan="2"></td></tr>
</xsl:template>
</xsl:stylesheet>

  这样,当用户点击"查看留言簿"按钮或是成功输入信息后浏览器便导向到该显示所有用户输入信息的Web页面,其运行效果图示如下:


图3

  三.总结:

  这样,一个具有基本功能的留言簿就完成了,从中我们可以体会到运用ASP.NET技术开发Web应用程序是相当容易的,同时在结合了XML技术之后,ASP.NET可以变得更加强大。还有文章中介绍的XSLT技术是非常有用的,你可以参考其它相关的更多资料以使它成为你开发过程中的一个有力工具。

<script language="javascript" type="text/javascript"> </script>  
已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
限时福利1:原价 129 元,最后2天仅需 69 元!后天涨价至98元 限时福利2:购课进答疑群专享柳峰(刘运强)老师答疑服务 限时福利3:购课添加助教领取价值 800 元的编程大礼包 为什么需要掌握高性能的MySQL实战? 由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准之一。 为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了「高性能 MySQL 知识框架图」,帮你梳理学习重点,建议收藏! 【课程设计】 课程分为四大篇章,将为你建立完整的 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库的性能调优、高并发、海量业务处理、面试解析等。 一、性能优化篇: 主要包括经典 MySQL 问题剖析、索引底层原理和事务与锁机制。通过深入理解 MySQL 的索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引的使用和优化技巧,能够避开很多实战中遇到的“坑”。 二、MySQL 8.0新特性篇: 主要包括窗口函数和通用表表达式。企业中的许多报表统计需求,如果不采用窗口函数,用普通的 SQL 语句是很难实现的。 三、高性能架构篇: 主要包括主从复制和读写分离。在企业的生产环境中,很少采用单台MySQL节点的情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构的实现是非常有必要的。 四、面试篇: 程序员获得工作的第一步,就是高效的准备面试,面试篇主要从知识点回顾总结的角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪的工作机会。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页