博文
URL 重写的常见用法(1)(2006-08-10 14:19:00)
摘要:适用范围:
Microsoft(r) ASP.NET
摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重写。URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。讨论实现 URL 重写的各种技术,并介绍执行 URL 重写的一些实际情况。
本页内容
引言
URL 重写的常见用法
请求到达 IIS 时将会发生什么情况
实现 URL 重写
构建 URL 重写引擎
使用 URL 重写引擎执行简单的 URL 重写
创建真正“可删节”的 URL
结论
参考资料
引言
让我们花点时间来看一下网站上的一些 URL。您是否发现一些类似于 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 的 URL?或者,您可能将一系列网页从一个目录或网站移动到另一个目录或网站,结果导致已将旧 URL 用作书签的访问者断开链接。在本文中,我们将了解如何通过将 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 替换为类似于 http://yoursite.com/people/sales/chuck.smith 的网址,使用 URL 重写将那些冗长的 URL 缩写为富有意义且容易记忆的 URL。我们还将了解如何将 URL 重写用于创建智能 404 错误。
URL 重写是截取传入 Web 请求并自动将请求重定向到其他资源的过程。执行 URL 重写时,通常会检查被请求的 URL,并基于 URL 的值将请求重定向到其他 URL。例如,在进行网站重组而将 /people/ 目录下的所有网页移动到 /info/employees/ 目录中时,您可能希望使用 URL 重写来检查 Web 请求是否指向了 /people/ 目录中的文件。如果请求指向 /people/ 目录中的文件,您可能希望自动将请求重定向到 /info/employees/ 目录中的同一文件。
使用传统的......
post和get的不同之处(2006-08-10 13:16:00)
摘要:post和get的不同之处
GET与POST的区别在于:(对于CGI)
如果以GET方式传输,所带参数附加在CGI程式的URL后直接传给server,并可从server端的QUERY_STRING这个环境变量中读取;
如果以POST方式传输,则参数会被打包在数据报中传送给server,并可从CONTENT_LENGTH这个环境变量中读取出来。
还有一种情况是,你用的是GET方式,但传送的参数是路径,如:
----< ahref="/cgi-bin/a.pl/usr/local/bin/pine" >CGI< /a >
----这时所传递的参数"/usr/local/bin/pine"存放在PATH_INFO这个环境变量中。环境变量的读取方式为$str=$ENV{'QUERY_STRING'};
理论上说,GET是从服务器上请求数据,POST是发送数据到服务器。事实上,GET方法是把数据参数队列(query string)加到一个URL上,值和表单是一一对应的。比如说,name=John。在队列里,值和表单用一个&符号分开,空格用+号替换,特殊的符号转换成十六进制的代码。因为这一队列在URL里边,这样队列的参数就能看得到,可以被记录下来,或更改。通常GET方法还限制字符的大小。事实上POST方法可以没有时间限制的传递数据到服务器,用户在浏览器端是看不到这一过程的,所以POST方法比较适合用于发送一个保密的(比如信用卡号)或者比较大量的数据到服务器。
Post是允许传输大量数据的方法,而Get方法会将所要传输的数据附在网址后面,然后一起送达服务器,因此传送的数据量就会受到限制,但是执行效率却比Post方法好。
对于GET提交的数据,WWW服务器将把数据放在环境变量QUERY_STRING中;对于POST方法,数据被送到WWW服务器的STDOUT中,然后CGI从自己的STDIN中读取。使用传统的CGI方法,用户必须自己编程来处理这些数据。
GET与POST的区别在于,如果以GET方式传输,所带参数附加在CGI程式的URL后直接传给server,并可从server端的QUERY_STRING这个环境变量中读取;如果以POST方式传输,则参数会被打包在数据报中传送给server,并......
WEBFORM与WINFORM的交互问题(收集)(2006-08-10 11:45:00)
摘要:
其实我这个问题本身就提得有些模糊.你想知道的是两个工程之间的交互还是,在IE中使用winform控件,或是在winform中访问IE呢?
http://www.66study.com/Article/web/net/VB/200506/50514.html
http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx(应用了WebBrowser控件)
http://www.tldown.com/article/article_14859_1.html
http://blog.joycode.com/lostinet/archive/2004/06/04/23638.aspx
结合 MSHTML 与 WebBrowser 生成美观实用的 WinForm 应用程序。
我用WinForm开发也有一段时间了。我觉得目前的WinForm开发速度是够的,但是一些原本在HTML就很容易做到的事情,在WinForm中就很难实现了。
这个主要的原因可能是WinForm复用控件的能力非常强,但是可用的控件却非常少。一般买回来的控件不但贵,而且也不是太好扩展。
作为一个学了多年HTML的人,我当然希望在WinForm中依然能使用HTML的特征,例如强大的CSS!,自动排版伸缩的特征,(CSS与排版可以更方便打印!),以及脚本的编写。(有时候写脚本比写WinForm的程序更爽。具体情况具体做)。
要做这个其实不难。但是要灵活运用则不容易了。
通常,使用WebBrowser控件的人,只是简单地使用MSHTML调用WebBrowser里的东西。也就是说,这个调用是单项的,只考虑到修改HTML来显示某种东西。
今天我写这个随笔的意图是告诉大家怎样把用户在WebBrowser里的操作反馈给WinForm 。
做这个反馈的基石是......
用winform的方式操纵webform--浅谈IHttpHandler(2006-08-10 11:44:00)
摘要:
用winform的方式操纵webform--浅谈IHttpHandler
好久以前看过一篇有关自定义IHttpHandler的文章,当时就想写点自己的体会,一直没空。今天就说说这个吧。首先谈谈asp.net的一些参数传递和页面定向的方式 第一,asp.net是用Page.Navigate()调用新页面的URL。Page.Navigate()向浏览器返回了一个http状态码302,使得浏览器向server请求那个新的URL。这种导航方法导致每次客户请求都需两次在client和server之间往返。第二,任何要传递到新页面的信息都需作为URL的参数或存储在Session中或存储在数据库中以便新页面得到这些信息。传统的asp开发人员很习惯这种做法,但其他的web编程人员则有一些更高级的方法。但是很明显的这两个页面是有依赖性的,而依赖性是编译器捕捉不到的也是不容易在设计阶段建模的。所以在debug时,参数是否被正确的传递就只有我们自己检查了。再有传统的数据传递方式有可能会暴露一些关键的数据。更为关键的是这使得面向对象的设计变得很复杂。当然我并没有否定传统的方式,我这是在强调asp.net缺乏对服务器端的多页面之间的通信的支持。 但是我们可以自定义httphandler来扩充这种支持。 开始之前,我们先来看一下asp.net怎样处理页面请求,asp.net是通过System.Web.UI.PageHandlerFactory类的实例来处理。PageHandlerFactory依赖于另一个类PageParser。一个页面在第一次请求时PageParser把它编译成一个真正的.Net的类并cache已编译的实例 HttpApplication | |1.GetHandler() | PageHandlerFactory | |2.GetCompiledPageInstance() | PageParser 我们要做的第一步是override由asp.net......
关于在WinForm里用HttpWebRequest获得某个页面,并填写页面的t(2006-08-10 11:40:00)
摘要:方法如下:
step1:use HttpWebRequest class to request,and use HttpWebResponse get the response.
if you read the response, you can get the information including what did in the Page_load function.
step2: if you want to fill a textbox or click a button and etc.. in this page, you can repalce the response with the Message,and use HttpWebRequest class to post it to the server.The server will get what in the textbox or do the onclick function.
Message: you can use sniffer to catch the postbag and get what in it,usually with a '&' and the webcontrol name or id.It is a format of ASPX post.
step3: use HttpWebResponse get the response.You can read the response to get the information which did in the onclick function.
以下代码是向一个指定的页面发送请求,填写三个textbox,click一个button,并得到Server端的执行是否成功的class。注:由于页面的代码也是我写的,所以我知道将要Post页面的结构,即我知道每个页面控件的name和页面结构。
public class FtpMessage
{
private string m_fileName;
private string m_host;......
回复在IE中使用VS.net WinForm控件 (2006-08-10 11:04:00)
摘要: 回复: 在IE中使用VS.net WinForm控件
Using Windows Forms Controls in Internet Explorer
在IE浏览器里使用Windows Forms控件
(点击此处查看本文的beta1版)
本文描述了如何在IE浏览器中执行Windows Forms控件。使用者不用做任何提示,也无需注册,这些Windows Forms控件就能在IE里自动激活,并实现Common Language Runtime(CLR)的代码安全机制.在IE中激活Windows Forms控件可以分四步来完成,下面所列的是详细的步骤:
* 创建Windows Forms控件;
* 创建一个包含对象标签的HTML文档;
* 创建虚拟目录,复制并设置权限;
* 运行该控件。
1. Windows Forms控件:SimpleControl.dll
几乎所有的Windows Forms控件都可以用,但在这个例子里,我们使用的是包含在.NET Framework SDK QuickStart Tutorial Creating Controls中的SimpleControl控件。
2. HTML文档: SimpleControl.html
接下来一步是生成内有一个对象tag的HTML文档,以激活Windows Forms控件。此外,还要加入一些脚本和输入tag(input tags)到该控件的示范程序入口。
<object id="simpleControl1"
classid="http:SimpleControl.dll#Microsoft.Samples.WinForms.Cs.SimpleControl.SimpleControl"
height="300"
width="300">
<param name="Text" value="Simple Control">
</object>
对象tag:
classid包含两个有趣的部分:导向控件库的路径和全名(......
在IE中使用winform控件(2006-08-10 11:01:00)
摘要:
在IE中使用VS.net WinForm控件
在Visual Studio .net中,类似于Applet或ActiveX控件,WinForm控件可以嵌入IE中使用。嵌入IE的Windows窗体控件不要求注册,不需用户提示即可激活。我们可以很方便地实现一些WebForm中实现起来相对麻烦的交互操作,结合.net Remoting等技术访问后台数据库,则可生成功能强大而且美观的WebForm页面。
使用该技术,需要客户端安装.net FrameWork及IE 6.0,在Windows 2003中已经自带了.net FrameWork。
嵌入WebForm的WinFrom控件利用公共语言运行库代码访问安全性,一些特殊操作还需要设置访问权限。
下面就让我们做个简单的例子,在WinForm用户控件中使用GDI+实现画线功能,并把它嵌入IE浏览器。
开发环境:Windows 2000专业版、Visualt Studio .net 2002
1.创建WinForm用户控件
我们可以建立一个“Windows控件库”项目,最后嵌入浏览器时只需要生成的dll文件。但为了方便调试,我们可以先把控件嵌入WinForm中。
新建“Windows应用程序”,名称为WinFormInWebForm,生成的解决方案也名称为WinFormInWebForm。在解决方案中再添加一个“Windows控件库”项目WinFormControl,系统在该项目中自动添加一个了UserControl1的用户控件,删除该控件,然后在“Windows控件库”项目中添加一个用户控件WinFormGDICtrl。
现在我们先把该控件加如“Windows应用程序”的Form1中。
首先需要生成解决方案以生成控件的dll文件......
一个很有意思的鼠标特效(2006-08-10 10:59:00)
摘要:<SCRIPT language=JavaScript>
dCol='000000';//date colour.
fCol='000000';//face colour.
sCol='000000';//seconds colour.
mCol='000000';//minutes colour.
hCol='000000';//hours colour.
ClockHeight=40;
ClockWidth=40;
ClockFromMouseY=0;
ClockFromMouseX=100;
//Alter nothing below! Alignments will be lost!
d=new Array("SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY");
m=new Array("JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER");
date=new Date();
day=date.getDate();
year=date.getYear();
if (year < 2000) year=year+1900;
TodaysDate=" "+d[date.getDay()]+" "+day+" "+m[date.getMonth()]+" "+year;
D=TodaysDate.split('');
H='...';
H=H.split('');
M='....';
M=M.split('');
S='.....';
S=S.split('');
Face='1 2 3 4 5 6 7 8 9 10 11 12';
font='Arial';
size=1;
speed=0.6;
ns=(document.layers);
ie=(document.all);
Face=Face.split(' ');......
在C#应用程序中控制输入法(转)(2006-08-10 10:50:00)
摘要:在C#应用程序中控制输入法 在Windows系统一般都安装了至少三种输入法,在输入数据时常常会切换输入法,虽然Windows系统提供了切换快捷健,但对输入工作还是带来了不少麻烦。如果在应用程序中为用户提供智能输入法自动切换,那么这样的应用程序就显得更加专业、更加具有竞争力。不知你可用过Access,在表数据输入时Access自动切换输入法,很酷吧,现在你也可以实现这一切。如果也想你的程式也酷一下的话,请继续... 为了控制输入法,.NET类库在System.Windows.Forms.InputLanguage类中提供了支持。我计划先花一点时间讲述InputLanguage类的功能,随后举一个实例InputLanguageRichEdit。 1、InputLanguage类是一个密封类,它提供了许多方法和属性实现输入法管理功能,这其中有几个属性尤其重要,我将在下面逐一讲解,如果你想全面了解类的全部方法和属性,请浏览MSDN。 public static InputLanguage CurrentInputLanguage {get; set;} //获得或设置当前线程的输入法。 public static InputLanguage DefaultInputLanguage {get;} //获得缺省输入法。 public static InputLanguageCollection InstalledInputLanguages{get;} //获得系统输入法集。可以通过这个容器对象列举系统当前安装的输入法列表。 public string LayoutName {get;} //获得输入法在系统托盘中的注册名称。 ...... 2、我们已经研究了InputLanguage类提供的几个重要属性了,现在可以开始动手在应用开发中应用InputLanguage类。我想创建一个.NET Window Form的系统程序,用一个列表框列举当前系统安装的所有输入法,通过改变列表框的选项自动改变当前线程的输入法。同时还实现了根据桌面托盘中输入法的变化来改变列表框的选项。 (1)、新建项目 --> 选择"Visual C#项目" --> 输入项目名:InputLanguageRichEdit。 (2)、在"工具箱"中拖一个RichTextBox......
如何迁移数据库到另一个分区(2006-08-07 11:52:00)
摘要:
问题描述:
一台服务器,联了好几个阵列,其实可以看作不同的逻辑驱动器,就假设为c盘,d盘,e盘
sql server 2000 程序装在了c盘,数据装在了d盘
现在阵列d需要撤走,我需要把原来d盘的数据库文件挪到e盘上,数据库有100多个,一个一个手动备份恢复时间不够,而且我不知道数据库文件的路径变了以后会有什么问题(我做了试验,服务起不起来了)。
我应该如何做?
我试了一种办法,就是把d盘的所有数据库的数据文件和文件夹原封不动的拷贝到e盘,然后把d盘撤走,把e盘的盘符改为d,就可以了,但是总觉得属于歪招,所以想知道正规做法是怎么做的?
解决方法:
最省事的方法还是所谓的改盘符歪招. 这种方法也最节约时间.
正常的方法就是备份/还原(不推荐, 太慢)
或者是1楼的分离/附加, 如果只是变盘符, 可以写自动化脚本
最歪的方法是改系统表, 直接把系统表中记录的数据文件和日志文件目录改正确.(SQL Server 2005已经无法修改系统表, 所以定义这种方法是最歪的)
改系统表方法的具体实现脚本:
-- 自动迁离的脚本(自动实现分离+复制文件+附加)
-- 注意根据需要修改下面的--** 注释的部分.
-- 邹建2006.07 (引用请保留此信息)
-- 备份数目录信息和分离数据库
IF OBJECT_ID('tempdb..#') IS NOT NULL
DROP TABLE #
CREATE TABLE #(
DbName sysname,
Name sysname,
FileName nvarchar(260),
FilePath as LEFT(FileName, LEN(FileName) - CHARINDEX('\', REVERSE(FileName))))
EXEC sp_msforeachdb N'
--** 如果是所有的用户数据库都要处理, 则去掉下面两句的注释, 并且注释掉后面的两行
--IF N''?......