SharePoint Server 2007 页面模型
虽然SharePoint Server 2007使用了ASP.NET 2.0的基础页面模型,SharePoint页面基本上也是基于标准的aspx技术来构建,但SharePoint Server 2007的页面模型仍然要比普通的ASP.NET应用复杂很多。对于一个SharePoint开发人员(和设计人员),了解SharePoint的页面模型是非常非常重要的。
在SharePoint 2007中,将页面分为两种:Application Page和Site Page。Application Page是指SharePoint应用程序中用到的页面。比如,当我们进入到一个SharePoint站点的站点设置中后,几乎所有的站点设置页面都是Application Page。如果我们看到地址栏中的页面路径都是类似“http://sharepointsite/_layouts/xxx.aspx”这样的格式,也就是说,页面位于“_layouts”虚拟目录中,那么这个页面就是Applicatoin Page。Application Page在物理上被存放在SharePoint Web前端服务器的“Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\Layouts”目录中,不能被用户进行定制。而Site Page是指位于一个SharePoint站点中的普通页面。比如,站点的首页:“http://sharepointsite/default.aspx”,或者位于一个文档库中的页面:“http://sharepointsite/pages/xxx.aspx”,都是Site Page。
Application Page实际上和一个普通的ASP.NET页面没有任何区别。开发人员如果有需要,可以自己添加新的Application Page,你既可以在“Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\Layouts”目录中添加新的页面,也可以在这个目录下创建新的子目录(或虚拟目录),来放置你的Application Page。在Application Page中,开发人员可以根据自己的需求,直接添加In-line code,这些code都会直接被执行,就像一个普通的ASP.NET应用程序一样(当然,对于Code-behind的模式,Application Page也是支持的)。比如:
<script runat="server">
protected void Page_Load(Object sender, EventArgs e)
{
// 代码...
}
</script>
对于Application Page,SharePoint 2007总是认为它们是安全的,因为,站点的管理员(非服务器管理员)和用户都没有办法直接修改Application Page,所以,SharePoint 2007会直接“执行”它们。
如果你要创建自己的Application Page,尽量遵守这样的模式:
1、让你的Application Page从“Microsoft.SharePoint.WebControls.LayoutsPageBase”继承下来;
2、让你的Application Page使用位于Layouts目录中的“Application.master”这个Master Page;
3、在Layouts目录中创建一个新的子目录(或虚拟目录)来放你的Application Page,不要和SharePoint自带的Application Page混杂在一起。
Site Page比Application Page要更复杂一些。对于Site Page,我们通常根据它们是否已经被进行了定制(通过SharePoint Designer 2007),将Site Page分为Uncustomized Page和Customized Page。(在SPS2003中,使用的是Ghosted Page和Unghosted Page这两个术语。)
当我们新建一个站点的时候,所有的页面都是Uncustomized Page,这些页面都是直接使用了存放在SharePoint Web前端服务器磁盘上的页面模板(位于“Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE”的各个子目录中),换言之,这个新站点的页面其实是“不存在的”,它们只是一个“标记”(这也就是在SPS2003中,它们被称为Ghosted Page的原因),如果用户访问一个页面,SharePoint会自动从磁盘上找到那个真正的页面模板文件,然后将其载入到内存中,解析它,并将其编译成一个独立的dll文件(为了性能,这个dll会缓存在磁盘上以避免下次重复编译),然后载入这个dll,运行,输出。
但是,如果站点设计人员用SharePoint Designer 2007打开这个SharePoint站点,然后用SharePoint Designer打开某个Site Page文件,进行某些修改,保存,SharePoint会自动将修改后的文件内容保存到站点所用的内容数据库中,它就成了一个Customized Page。从此,这个Customized Page就和磁盘上的页面模板“脱离关系”了。当用户访问这个页面时,SharePoint会自动从内容数据库中读出这个文件的内容,然后对其进行解析,运行。注意!这次,SharePoint不会再将其编译成一个独立的dll文件了,实际上,SharePoint会在内存中载入这个页面的结构,运行,然后输出,然后将它从内存中卸载以节省内存。
从Uncustomized Page和Customized Page的运行模式上,我们就能看出它们的运行效率存在着不小的差别。首先,Uncustomized Page是位于磁盘上的,它的读入速度会比较快,其次,Uncustomized Page会在第一次被访问时就被编译成一个dll,避免了重复编译。比如,两个不同SharePoint站点的首页“default.aspx”如果都是Uncustomized Page,而且使用的是同一个页面模板,它们只会被编译一次。而Customized Page位于内容数据库中,读入速度比不上磁盘文件,而且它不会被编译成dll,而是只会在内存中进行解析,运行。
但是,有意思的是,Customized Page的解析运行方式虽然在速度上可能要慢,但却要更节省内存一些。因为在内存中载入一个页面的结构,进行解析运行后,是可以再释放掉的,而一个dll被载入后,是不能被释放掉的。这是因为.NET不支持载入程序集后再卸载程序集,呵呵。(但.NET支持创建AppDomain后再释放掉AppDomain。)
除了存放位置和运行效率上的不同,在代码安全上,Uncustomized Page和Customized Page也存在很大的区别。
类似于Applicaton Page,Uncustomized Page也是被SharePoint信任的页面,位于Uncustomized Page里面的ASP.NET In-line code会被直接运行。而Customized Page由于可以被站点设计者(可能他并非是服务器管理员)通过SharePoint Designer向其中加任意的In-line code,所以,默认的安全规则根本不会允许Customized Page中的服务器端代码被运行。
类似的,如果Uncustomized Page上面被放置一个服务器端控件,是没有问题的,但是,如果要向Customized Page上放一个服务器端控件(包括Web Part),那么这个控件就必须在站点的web.config中被标识为“Safe Control”(也就是增加新的“<SafeControl>”节点来标识某个控件是安全的)。
虽然SharePoint对Customized Page有这些安全上的限制,但是,服务器管理员通过修改web.config文件中的安全设置,是可以更改这样的默认安全限制的。比如,如果你希望站点的“MyPages”目录下的页面,即使它们是Customized Page,也允许被包含服务器端In-line code,可以在web.config中增加这样的内容:
<SharePoint>
<SafeMode ...>
<PageParserPaths>
<PageParserPath VirtualPath="/MyPages/*" CompilationMode="Always"
AllowServerSideScript="true" AllowUnsafeControl="true" IncludeSubFolders="true"/>
</PageParserPaths>
“CompilationMode”节点的值可以是:Never、Always和Auto,将其设置为Always,就可以强制进行编译。“AllowServerSideScript”是指定是否允许服务器端的代码,“AllowUnsafeControl”是指定是否允许非安全(也就是没有在“SafeControls”区域指定为安全)的控件。
最后要提醒的是,虽然通过修改web.config中的设置可以让所有的Site Page都能包含服务器端代码,但如非必要,尽量不要这样做。因为这将会使有权限对站点进行设计的人,通过使用SharePoint Designer,就可以在任何页面中添加In-line code,来进行任何操作。
SharePoint SDK参考:
“Application _layouts Page Type”
“Content Page Type”
相关文章:

oracle存储过程的常用语法
记录一下,主要方便自己以后查找: createorreplaceproceduresp_test(aa invarchar,bb innumberdefault0) isv_pos varchar(50);v_num number;begin---字符串查找和替换selectSUBSTR(PARAMETER, 1, INSTR(PARAMETER,branchId)-2) ||SUBSTR(PARAMETER, INST…
机器学习大神迈克尔 · 乔丹:我讨厌将机器学习称为AI
AI技术年度盛会即将开启!11月8-9日,来自Google、Amazon、微软、Facebook、LinkedIn、阿里巴巴、百度、腾讯、美团、京东、小米、字节跳动、滴滴、商汤、旷视、思必驰、第四范式、云知声等企业的技术大咖将带来工业界AI应用的最新思维。 如果你是某个AI技…

es6箭头函数(=)与展开特性运算符(...)的使用
2019独角兽企业重金招聘Python工程师标准>>> 箭头函数的几个写法 //当含有固定个参数的时候,es5写法 function test(a,b){ ..}//es6写法(es6参数可以设置默认值) let test (a,b) > {..}当函数体中仅有一行的时候,可以省略掉return与外部的…

华为atn980传输设备_在头发丝中实现每秒1000张高清DVD传输
这是近日央视《对话》栏目“超高清视频带来的产业诱惑”节目中,提到的随着4K、8K超高清视频发展,顺应时代发生的变化之一。超高清视频将为消费者带来全新的、超乎想象的体验。在这其中,黑科技的涌现更是对产业快速发展起着不可磨灭的推动作用…

李飞飞、吴恩达、Bengio等人的15大顶级深度学习课程,你收集全了吗?
AI技术年度盛会即将开启!11月8-9日,来自Google、Amazon、微软、Facebook、LinkedIn、阿里巴巴、百度、腾讯、美团、京东、小米、字节跳动、滴滴、商汤、旷视、思必驰、第四范式、云知声等企业的技术大咖将带来工业界AI应用的最新思维。 如果你是某个AI技…

2 拖拽模型_3Dmax插件 | 螺丝钉、挖洞、网格模型等可以分分钟搞定
今天给大家带来3Dmax插件Mesh Insert v1.14Mesh Insert是一款3dsmax建模插件,灵感来自Polystein for Modo。它通过替换库中模型资源快速插入到模型表面。非常适合硬表面和有机建模!1大纲1、安装说明2、插件功能3、视频讲解2过程步骤1安装说明1、关闭max,…

谈谈职业规划——CSDN对我的采访
职业规划就像软件工程电信、银行等行业一直是许多人非常向往的工作单位,清差厚禄,旱涝保收,陈皓却不以此为然。所以当记者采访他的时候,他连用了两个“最”字来形容他离开银行的成就感。陈皓毕业后的前两年就职于云南省工商银行&a…
最实用的机器学习算法优缺点分析,没有比这篇说得更好了
AI技术年度盛会即将开启!11月8-9日,来自Google、Amazon、微软、Facebook、LinkedIn、阿里巴巴、百度、腾讯、美团、京东、小米、字节跳动、滴滴、商汤、旷视、思必驰、第四范式、云知声等企业的技术大咖将带来工业界AI应用的最新思维。 如果你是某个AI技…

南大电子机器人入驻云南_云南大学外语协会 英文歌曲演唱比赛
云南大学外语协会英文歌曲演唱比赛顺利落幕2020年11月8日14:30,云南大学外语协会英文歌曲演唱比赛在文汇楼2116顺利开展。比赛流程简洁明了:参赛同学完成抽签之后,在主持人的引导下,按照流程有序进入指定位置等待表演&…

Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对…

智“逗”冰雪寒
和小K帮客户做完直播准备,他说一会儿要接冰雪寒冰-雪-寒多伟大的名字——我来51看的第一篇博客就是他的《网管日志》那曾经是51最火的文章之一<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />…

装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern)一句话 继承一个抽象类,加上自己的特点,然后再使自己也变成抽象类,然后让子类继承的模式,叫装饰模式。意图…

python 区域和检索_304. 二维区域和检索(Python)
题目难度:★★★☆☆类型:二维数组方法:动态规划给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。示例:给定 matrix [[3, 0, 1, 4, 2],[5, 6, 3…

观察者模式(Observer Pattern)(二):HeadFirst中的气象站的实现
1 观察者模式的原理,首先由一个主题,当主题发送变化的时候,通知该主题的订阅者 按照上面的分析我们来进行设计 1.抽象主题Subject public interface Subject {public void registerObserver(Observer o);public void removeObserver(Observer…

专访图灵奖得主John Hopcroft:中国必须提升本科教育水平,才能在AI领域赶上美国
AI技术年度盛会即将开启!11月8-9日,来自Google、Amazon、微软、Facebook、LinkedIn、阿里巴巴、百度、腾讯、美团、京东、小米、字节跳动、滴滴、商汤、旷视、思必驰、第四范式、云知声等企业的技术大咖将带来工业界AI应用的最新思维。 如果你是某个AI技…

完整复现何恺明ICCV获奖论文结果并开源 !(附论文开源代码)
ICCV 作为计算机视觉的顶级会议,2017年共收到2143篇论文投稿,比上一届ICCV2015的1698篇增加了26.2%。共621篇被选为大会论文,录用比例28.9%;poster、spotlight、oral 比例分别为24.61%、2.61%和2.09%。组委会根据作者署名统计了不…

电子合同的履行_什么是电子合同履行?怎么履行电子合同?
随着互联网产业的发展,许多传统产业都与互联网接轨,人们的传统生活方式也在转变。现在许多人的各种消费都喜欢在方便、快捷的互联网上进行,就连严肃的合同签订也是如此。不过还有很多人不知道什么是电子合同履行,下面律图小编就为…

10月机器学习开源项目Top10
作者 | Mybridge 译者 | 林春眄 整理 | Jane 出品 | AI科技大本营 【导读】过去一个月里,我们对近 250 个机器学习开源项目进行了排名,并挑选出热度前 10 的项目。这份清单的平均 github star 数量高达 1345,涵盖了包括深度学习, Tensorfl…

用SDM架构Cisco IOS ***图文详解全攻略(一)——easy ***
在测试***的过程中发现网上资料少少,于是自己花点力气写几篇普及教程,希望转贴的朋友给与支持,不要忘记署上原创是水煮豆豆的大名,嘿嘿~Cisco给我们提供了管理路由器的很好的安全工具SDM,同时也给我们提供了…

HP 服务器使用 SmartStart CD 引导安装 windows 2008 操作系统
1. 使用SmartStart CD引导安装之前的准备工作:首先,先根据自己的需要配置好RAID,可以使用开机自检检测到阵列卡时按F8进入ORCA的方法配置,也可以使用SmartStart CD中附带的ACU工具配置。其次,需要确认BIOS中启动顺…

parameter缩略语_缩略语
缩略语AccAccelerate(加速)BFBreakerfailure(断路器失灵)BRCBBuferReportControlBloc(有缓存报告控制块)CIDConfiguredIEDDescription(IED实例配置文件)CTCurrenttransformer(电流互感器)DevDevice(设备)ErrError(错误)FstFirst(第一个)GOOSE,GoGenericobjectorientedsubstatio…
[译]怎样用VisualStudio查看非托管代码
(译者:这篇文章作者是一位美国的MVP,这是他的系列文章"Under the cover"的第一篇,文章的本意从最底层的角度来优化代码的性能,并作为阅读作者其他文章的技术基础,这种通过这样的做法虽然初看起来有些过分,但是对读者了解.Net许多底层运作是十分有益的) 我们从使用vi…

盘点互联网大厂AI战略变迁,开发者将怎样pick前进路线?
随着各大企业相继试水“全面 AI”,人工智能在技术落地层面也开始持续深入,泛人工智能时代正在逼近。越来越多的发展趋势表明,未来的人工智能将逐步迈入广泛普及阶段,继而深入影响人类日常的生产生活方式,重塑传统生产结…

druid拦截器_CMS基于SpringBoot+Shiro+Mybatis+Druid+layui后台管理系统
contentManagerSystem后台管理系统简介contentManagerSystem,后台管理系统,采用SpringBoot构建整个项目框架,apacheShiro权限验证,mybatisdruid数据持久化动作,前端采用layui(http://www.layui.com/)展示,整个项目全部通过注解方式进行配置,具体大家可以…

Boost::asio io_service 实现分析
io_service的作用 io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调…

叮!你有一份2018英特尔人工智能大会的邀请函,请查收!
AI赋能的数字化应用,作为时代发展的核心驱动力,已经成为改变各行各业的神奇力量。想要准确把握智能时代的发展航向,领航舵手英特尔已向你发出邀请:2018英特尔人工智能大会,欢迎你的到来!11月14日-15日&…

赢得高薪的锦囊三秘诀
作者:jingch 来源:南京竞成 时间:2007-6-27 10:58:40 秘诀一 获得高薪的必备素质通过对一些高收入的外企白领阶层的调查发现,高学历并不与高收入划等号,高薪收入者的基本素质上的优势才是他们获得高薪的关键。概括起…

可疑文件_【国家标准】印刷文件鉴定技术规范点阵式打印文件的同机鉴定
印刷文件鉴定技术规范(GB/T 37232-2018)总则印刷文件同机(同版)鉴定的受理程序、送检材料的标识、检验鉴定程序、送检材料的流转程序及结果报告程序应按GB/T 37234-2018第4章~第8章中相应的要求。印刷文件同机鉴定分为传统制版文件同机鉴定和办公设备机制文件同机鉴定。其中,办…
前端开发神器之ngrok
ngrok能做什么,为什么是前端开发神器? 内网穿透,映射本地开发环境到公网,模拟多终端线上环境。 结合一个很简单的PWA demo,举个简单的例子 1.克隆demo到本地 git clone https://github.com/minimal-xyz/minimal-pwa.gi…