|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高java的运行效率。只是将java源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译。URL重写是截取传进Web哀求并主动将哀求重定向到其他URL的历程。好比扫瞄器发来哀求hostname/101.aspx,服务器主动将这个哀求中定向为http://hostname/list.aspx?id=101。一甚么是url重写
URL重写是截取传进Web哀求并主动将哀求重定向到其他URL的历程。好比扫瞄器发来哀求hostname/101.aspx,服务器主动将这个哀求中定向为http://hostname/list.aspx?id=101。
url重写的长处在于:
l延长url,埋没实践路径进步平安性
l易于用户影象和键进。
l易于被搜刮引擎收录
二完成url重写的基础办法
1.下载ms的URLRewriter.dll,放到你的web程序的bin下
下载地点1:http://www.sinoec.cn/fordown/URLRewriter.dll
下载地点2:
download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi
下载完成后,在web.config里设置以下:
<?xmlversion="1.0"encoding="utf-8"?>
<!--overred-->
<configuration>
<configSections>
<sectionname="RewriterConfig"
type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<addverb="*"path="*.aspx"
type="URLRewriter.RewriterFactoryHandler,URLRewriter"/>
</httpHandlers>
个中
<sectionname="RewriterConfig"
type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
</configSections>
用于指定设置节"RewriterConfig"的处置程序类的称号为”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,该类存在于bin目次下的URLRewriter.dll文件中
设置节"RewriterConfig"内容以下
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
个中关头的是这两句
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
<LookFor>~/d(d+).aspx</LookFor>暗示,用户输出的url,d(d+).aspx是url中文件名婚配的正则表达式(此处为字母d开首,前面跟一个或多个数字,并以.aspx开头。用户也可依据本人的必要自行设定)。
<SendTo>~/default.aspx?id=$1</SendTo>,暗示当服务器吸收到切合下面前提的哀求后怎样重写url。此处暗示会见defalutl.aspx并传进参数id,其值$1将用用户哀求的文件名中的第一个数字来暗示。
比方用户输出hostname/d11.aspx,服务器会把他重写为http://hostname/default.aspx?id=11。换句话说用户输出http://hostname/d11.aspx,实践会见的是http://hostname/default.aspx?id=11。如许就起到了埋没实在文件名,并便于用户影象的感化。
2.处置回发
在重写后的url里假如发生回发,比方有一个按钮,又挪用了该被重写的aspx,用户扫瞄器中将会显现该aspx文件实践的地点,也就是http://hostname/default.aspx?id=11。但从用户的角度思索,如果单击按钮时俄然看到URL变动会使他们感应不安。因而必需办理这个成绩。
办理办法有二:
(1)本人界说一个Actionlessform类,在aspx中不再利用体系供应的form标志
namespaceActionlessForm{
publicclassForm:System.Web.UI.HtmlControls.HtmlForm
{protectedoverridevoidRenderAttributes(HtmlTextWriterwriter)
{
writer.WriteAttribute("name",this.Name);
base.Attributes.Remove("name");
writer.WriteAttribute("method",this.Method);
base.Attributes.Remove("method");
this.Attributes.Render(writer);
base.Attributes.Remove("action");
if(base.ID!=null)
writer.WriteAttribute("id",base.ClientID);
}}}
创立此类并对其举行编译以后,要在ASP.NETWeb使用程序中利用它,应起首将其增加到Web使用程序的References文件夹中。然后,要利用它来取代HtmlForm类,做法是在ASP.NET网页的顶部增加以下内容:
<%@RegisterTagPrefix="skm"Namespace="ActionlessForm"
Assembly="ActionlessForm"%>
然后,将<formrunat="server">(假如有)交换为:
<skm:Formid="Form1"method="post"runat="server">
并将右侧的</form>标志交换为:
</skm:Form>
(2)以上的是承继个form,第二种办法就是承继page,如许你不必要在aspx页中改任何器材。
代码:
usingSystem;
usingSystem.IO;
usingSystem.Web;
usingSystem.Web.UI;
namespaceURL
{
publicclassOLPage:Page
{
publicOLPage()
{}
protectedoverridevoidRender(HtmlTextWriterwriter)
{
if(writerisSystem.Web.UI.Html32TextWriter)
{
writer=newFormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer=newFormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(writer);
}}
internalclassFormFixerHtml32TextWriter:System.Web.UI.Html32TextWriter
{
privatestring_url;//假的URL
internalFormFixerHtml32TextWriter(TextWriterwriter):base(writer)
{
_url=HttpContext.Current.Request.RawUrl;
}
publicoverridevoidWriteAttribute(stringname,stringvalue,boolencode)
{
if(_url!=null&&string.Compare(name,"action",true)==0)
{
value=_url;
}
base.WriteAttribute(name,value,encode);
}
}
internalclassFormFixerHtmlTextWriter:System.Web.UI.HtmlTextWriter
{
privatestring_url;
internalFormFixerHtmlTextWriter(TextWriterwriter):base(writer)
{
_url=HttpContext.Current.Request.RawUrl;
}
publicoverridevoidWriteAttribute(stringname,stringvalue,boolencode)
{
if(_url!=null&&string.Compare(name,"action",true)==0)
{
value=_url;
}
base.WriteAttribute(name,value,encode);
}}}
把这个文件编译成dll,并在你的项目中援用它。
然后把项目中的一切aspx文件对应的cs文件中的承继page类的代码改写为承继OLPage。
比方
publicclassWebForm1:page
改写为
publicclassWebForm1:URL.OLPage
如许就办理回提问题。
在VC.net的版本上,为了让C++运行在.NETFramework中,微软为C++引进了托管,就是托管C++(ManagedC++),这个根本就没有流行起来,自托管C++产生以后就没有收到过好评。 |
|