DTcmsV4.0分析学习——(3)URL重写

3.URL重写

3.1 控制流程

通过IHttpModule控制所有页面请求,具体流程如下

(1)真实路径可正常访问

(2)前台页面通过URL重写映射aspx目录,后台页面通过URL重写映射admin目录,插件页面通过URL重写映射plugins目录,静态页面通过URL重写映射html目录

(3)xmlconfig/urls.config 是URL重写规则的XML配置文件,使用缓存依赖优化性能

URL重写与MVC路由在功能上很相似,但两者其实并不相同,区别在于,URL重写是将一个URL映射到另一个URL,而路由则是将URL映射到资源。

3.2 源码分析 

3.2.1 URL字典

读取URL配置文件,使用缓存(文件依赖- xmlconfig/urls.config),并使用单例模式。

使用volatile定义变量,读取这个变量的值时候每次都是从momery里面读取而不是从cache读。这样做是为了保证读取该变量的信息都是最新的,而无论其他线程如何更新这个变量。

上面是DTcms的写法,但有一个问题就是每次返回时首先要上锁再判断,这样就牺牲了一些本来不必牺牲的性能,因此,可以优化代码:

添加的外层的if语句块,这是为了使得每个线程欲获取实例时不必每次都得加锁,因为只有实例为空时(即需要创建一个实例),才需加锁创建,如果已存在一个实例,就直接返回该实例,节省了性能开销。

时间: 06-12

DTcmsV4.0分析学习——(3)URL重写的相关文章

DTcmsV4.0分析学习——(1)数据库结构分析:表结构

数据库名:DTcmsdb4 DTcmsV4.0共35张表(33张表+2张插件表) dt_article 内容管理 dt_article_albums 图片相册 dt_article_attach 附件表 dt_article_attribute_field 扩展属性表 dt_article_attribute_value 扩展属性表 dt_article_category 栏目类别 dt_article_comment 评论 dt_channel 系统频道表 dt_channel_field 频

二:理解ASP.NET的运行机制(例:基于HttpHandler的URL重写)

url重写就是把一些类似article.aspx?id=28的路径重写成 article/28/这样的路径 当用户访问article/28/的时候我们通过asp.net把这个请求重定向到article.aspx?id=28路径有两种方法可以做这件事情 一:基于HttpModule的方案这个方案有有缺点,具体缺点以后再谈我曾写过一篇文章<不用组件的url重写(适用于较大型项目) >就是按这个模式写的 二:基于HttpHandler的方案我们这个例子就是按这个方案做的我们接下来就按这种方式做这个例

Url Rewrite 再说Url 重写

前几天看到园子里一篇关于 Url 重写的文章<获取ISAPI_Rewrite重写后的URL>, URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次.搜索一下URL-Rewrite可以找到很多URL-Rewrite方面的文章和组件,自己以前也多次接触过这个东东,也来说说吧. ScottGu 有一篇非常经典的 URL-Rewrite Blog Tip/Trick: Url Rewriting with ASP.NET http://weblogs.asp.net

LNMP的搭建及URL重写测试

内容: 1.LNMP的搭建 2.搭建基于LNMP的discuz论坛(www.hill.com) 3.实现https 4.实现访问http时自动跳转至https以及防盗链设置.URL重写测试 一.LNMP的搭建 我们知道,在apache与php的结合方式有三种,而nginx与php的结合目前只有一种是行之有效的:php-fpm 1.yum直接安装快速搭建LNMP,官方下载nginx的预安装包(rpm包),当然也可以编译安装 #yum install -y prce-devel zlib-devel

Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

Cookie / Session / URL重写

Cookie //创建一个Cookie对象 Cookie cookie = new Cookie("username","JACK"); //在客户端存储的时间(生命周期)单位是秒 7天 7*24*60*60 //如果这里设置为0 就表示客户端不保存该cookie 即临时cookie //如果设置为-1 就表示客户端关闭之后就删除该cookie 也可以称之为临时cookie cookie.setMaxAge(-1); //设置cookie在客户端存放的路径 如果不设

Session,Cookie,jsessionid,Url重写

在一些投票之类的场合,我们往往因为公平的原则要求每人只能投一票,在一些WEB开发中也有类似的情况,这时候我们通常会使用COOKIE来实现,例如如下的代码: < % cookie[]cookies = request.getCookies(); if (cookies.lenght == 0 || cookies == null){ doStuffForNewbie(); //没有访问过 }else{ doStuffForReturnVisitor(); //已经访问过了 } % > 这是很浅显

URL重写技术总结

概要:什么是url重写? URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.比如浏览器发来请求 hostname/101.html ,服务器自动将这个请求中定向为http://hostname/list.aspx ?id=101. url重写的优点在于: 1.缩短url,隐藏实际路径提高安全性. 2.易于用户记忆和键入. 3.易于被搜索引擎收录. 正文:实现url重写的基本方法: 一. 下载ms的URLRewriter.dll,放到你的web程序的bin下 下载地址1

ASP.NET 中执行 URL 重写

具体实现步骤(其中的一种实现方法): 一.下载相关的DLL(ActionlessForm.dll和UrlRewriter.dll) http://download.csdn.net/detail/yingwanghbx/4510059 二.在项目中引用那两个DLL文件 右击项目,点击Add Reference,选择Browse,然后选择相应的DLL,点击OK即可. 三.添加browser文件 1.右击项目,点击Add-New Item,选择Browser File,取个有意义的名字.在生成的*.

Nginx之反向代理、日志格式、集群、缓存、压缩、URl 重写,读写分离配置

location的模式匹配按照优先级由低到高有以下四种: Nginx作为一个优秀的Web服务器,不仅在处理静态内容上比Apache优秀,还经常被用来做反向代理服务器,且支持缓存,URL重写,自定义格式,读写分离等功能,并且支持在TCP/IP第七层实现集群功能,基于AIO(异步I/O)event_driven(事件驱动)mmap(内存映射)等机制和功能,具有轻量级.高性能.消耗低.特性丰富.配置简单等特点 实验环境: node1:192.168.139.2 node2:192.168.139.4