我记录网站综合系统 -- 技术原理解析[3:我记录框架处理流程]

news/2024/5/9 13:19:18/文章来源:https://blog.csdn.net/weixin_30820151/article/details/95762803

要分析我记录的整个处理流程,先从wojilu的初始化入口,看看wojilu在初始化的时候到底做了些什么事情。

相关代码:wojilu.Web\Global.asax

 

1 void Application_Start( object sender, EventArgs e ) {
2         wojilu.Web.SystemInfo.Init();
3         wojilu.Web.Mvc.MvcFilterLoader.Init();
4         wojilu.Web.Jobs.WebJobStarter.Init();
5     }

wojilu.Web.SystemInfo:系统的固定数据,比如网站根路径、app路径、主机(ip+端口号)名称等。这里的信息是以后路由的参考信息,在以后URL和实际地址映射的时候将用到这里的数据。

wojilu.Web.Mvc.MvcFilterLoader: mvc 过滤器的加载器。初始化各种过滤器,并且将各种过滤器注册到系统之中。

wojilu.Web.Jobs.WebJobStarter:计划任务启动器的初始化。

WebJob:计划任务,类似于服务的一种任务,可以指定Interval(间隔时间)。

更多计划任务的详细介绍:http://www.wojilu.com/Common/Page/38

通过上面这些步骤,整个系统就可以响应URL请求了。

 

接下来就是介绍一下整个MVC的流程:

 

一个标准的MVC流程是指从路由解析(Route)到页面生成(Render)的全过程。

这些原本都是由ASP完成的任务,现在全都由wojilu系统完成了。

在详细介绍各个Process之前,我们先看看ProcessorBase的定义吧:

 

 1 namespace wojilu.Web.Mvc.Processors {
 2 
 3     internal abstract class ProcessorBase {
 4 
 5 
 6         public abstract void Process( ProcessContext context );
 7 
 8     }
 9 
10 }

ProcessorBase 是一个抽象类,里面有一个抽象的方法Process(处理),这个方法的参数是 ProcessContext(处理内容)。ProcessContext里面包含着生成页面所需要的一切信息,从路由解析开始,数据从URL信息开始,通过各个Process一点点变得丰富。例如通过路由的时候,URL将被解释成页面Controller信息放入ProcessContext中,通过安全认证Process的时候,访问权限等信息会被追加到ProcessContext中。ProcessContext作为信息的载体,贯穿于整个Process中。

了解了整个MVC流程之后,我们要问,触发MVC的最初的地方在哪里。

我们知道,要自定义HTTP处理,就必须自己实现一个 IHttpHandler,我记录系统要实现全部的HTTP访问过程,必然需要实现IHttpHandler。所以wojilu的IHttpHandler实现就是整个MVC的源头。

 

 1 /*
 2  * Copyright 2010 www.wojilu.com
 3  * 
 4  * Licensed under the Apache License, Version 2.0 (the "License");
 5  * you may not use this file except in compliance with the License.
 6  * You may obtain a copy of the License at
 7  * 
 8  *      http://www.apache.org/licenses/LICENSE-2.0
 9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 using System;
18 using System.Web;
19 using System.Web.SessionState;
20 
21 using wojilu.Web.Context;
22 using wojilu.Caching;
23 using System.Text;
24 using System.Collections.Generic;
25 
26 namespace wojilu.Web.Mvc {
27     /// <summary>
28     /// wojilu mvc 的核心处理器:处理客户端请求,将结果返回
29     /// </summary>
30     public class CoreHandler : IHttpHandler, IRequiresSessionState {
31         public virtual void ProcessRequest( HttpContext context ) {
32             if (MvcConfig.Instance.IsPageCache) {
33                 String pageContent = CacheManager.GetApplicationCache().Get( context.Request.Url.PathAndQuery ) as String;
34                 if (pageContent != null) {
35                     context.Response.Write( pageContent );
36                     return;
37                 }
38             }
39             MvcContext ctx = new MvcContext( new WebContext( context ) );
40             ProcessContext.Begin( ctx );
41         }
42         public virtual void ProcessRequest( IWebContext context ) {
43             ProcessContext.Begin( new MvcContext( context ) );
44         }
45         public Boolean IsReusable {
46             get { return true; }
47         }
48     }
49 }

 看到这个,大家不禁要问,系统怎么知道HTTP使用哪个IHttpHandler的具体实现呢?

接下来请大家打开 源代码 wojilu.Web 的 Web.Config文件。

这里有一个httpHandlers节:

里面定义了对于各种请求的处理方法。例如,对于refresh.aspx使用wojilu.Web.Handler.RefreshServerHandler来处理,robots.txt使用System.Web.DefaultHttpHandler来处理。

最后一行里,如果这个请求不属于其他处理方法的职责范围的话(例如aspx),就使用wojilu.Web.Mvc.CoreHandler来处理。

1     <httpHandlers>
2         <add verb="*" path="CaptchaImage.ashx" type="wojilu.Web.Handler.CaptchaImageHandler, wojilu"/>     
3         <!-- <add verb="*" path="WebForm1.aspx" type="System.Web.UI.PageHandlerFactory" /> -->
4         <add verb="*" path="*.asp" type="wojilu.Web.Handler.PageNotFoundHandler, wojilu"/>
5         <add verb="*" path="robots.txt" type="System.Web.DefaultHttpHandler"/>
6         <add verb="*" path="refresh.aspx" type="wojilu.Web.Handler.RefreshServerHandler, wojilu.Core"/>
7         <add verb="*" path="*.css,*.jpg,*.jpeg,*.gif,*.png,*.bmp,*.ico,*.js,*.htm,*.html,*.xml,*.swf,*.zip,*.7z,*.rar,*.cur" type="System.Web.DefaultHttpHandler"/>
8         <add verb="*" path="*" type="wojilu.Web.Mvc.CoreHandler, wojilu"/>
9     </httpHandlers>

这样的话,对于aspx的页面请求,通过查看Config知道了使用wojilu.Web.Mvc.CoreHandler来处理。通过调用wojilu.Web.Mvc.CoreHandler的ProcessRequest方法,开始处理请求,ProcessRequest的ProcessContext.Begin正式开始MVC之旅了。

Config ->

    wojilu.Web.Mvc.CoreHandler.ProcessRequest - >

          wojilu.Web.Mvc.CoreHandler.ProcessRequest: ProcessContext.Begin

这里介绍了整个MVC的大体流程和进入MVC的入口方法,大家学习wojilu可以从这里作为入口。

 

下次预告: [核心]我记录系统的路由处理  2011/6/16

 

wojilu下载地址:http://www.wojilu.com/Forum1/Topic/1308 

我记录网址 http://www.wojilu.com/

欢迎大家加入我记录开发团队

 

 

转载于:https://www.cnblogs.com/TextEditor/archive/2011/06/13/2078856.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_725177.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随笔之——各大热门网站search 搜索框的写法,浅析!

随笔之——各大热门网站search 搜索框的写法&#xff0c;浅析&#xff01; 关于搜索框&#xff0c;写法有很多种&#xff0c;搜索框这一块是一个比较细的活&#xff0c;要先计算好他的高、宽&#xff1b; 下面我就以京东搜索框为例&#xff0c;给大家浅析一下。 上面就是最终se…

网站前端性能优化总结【转】

一、服务器侧优化 1. 添加 Expires 或 Cache-Control 信息头 某些经常使用到、并且不会经常做改动的图片&#xff08;banner、logo等等&#xff09;、静态文件&#xff08;登录首页、说明文档等&#xff09;可以设置较长的有效期&#xff08;expiration date&#xff09;&…

css学习网站

css学习网站 CSSPlay cssplay是一个CSS demo网站&#xff0c;里面很多demo&#xff0c;这些文章有教如果放置图片&#xff0c;有些是说CSS技巧。 1. CSS Help Pile CSS Help Pile重点关于CSS资源&#xff0c;技巧与手法。该网站授予良好的网页组及优秀的资源&#xff0c;适用…

开源 免费 java CMS - FreeCMS1.9 移动APP生成网站列表数据

项目地址&#xff1a;http://www.freeteam.cn/ 生成网站列表数据 提取同意移动APP訪问的网站列表,生成json数据到/mobile/index.html页面。 从左側管理菜单点击生成网站列表数据进入。点击确定就可以。转载于:https://www.cnblogs.com/blfbuaa/p/6714679.html

使用ServletContextListener和HttpSessionListener两种监听器实现记录当前网站在线人数...

web.xml中配置&#xff1a; <listener> <listener-class>com.mcm.listener.ServletContextListenerImpl</listener-class> </listener> <listener> <listener-class>com.mcm.listener.HttpSessionListenerImpl</listener-cla…

PC网站微信扫码支付,Native支付,“当前商户号暂不支持关联该类型的appid“,“签名错误,请检查后再试““springBoot 微信支付“

springBoot 微信支付 PC网站微信扫码支付-Native支付一、采坑大合集1.当前商户号暂不支持关联该类型的appid2.签名错误&#xff0c;请检查后再试二、springboot集成微信支付Demo&#xff08;老版本XML&#xff09;1.官方SDK下载&#xff1a;[https://pay.weixin.qq.com/wiki/do…

前端和算法实现:给网站上加上自己的水印(简单+复杂)

watermark插件的github地址&#xff1a;https://github.com/saucxs/watermark 有详细的使用步骤&#xff0c;可以参考&#xff0c;不会用请留言&#xff0c;感觉可以&#xff0c;请给个星星。 sau交流学习社区&#xff08;首发&#xff09;&#xff1a;https://www.mwcxs.top/p…

大型网站的架构设计与演进

大型网站之大&#xff0c;在于访问量和数据量同时都规模巨大&#xff0c;缺一不可。 1. 架构设计 大型网站中&#xff0c;最核心的功能是计算和存储。 存储&#xff1a;DataBase&#xff0c;计算&#xff1a;Application server&#xff0c;应用服务器完成业务功能和逻辑。如果…

网站莫名跳转,从百度谈什么是网站劫持?

今年2月份的时候&#xff0c;网上爆出了神马搜索劫持百度搜索流量事件&#xff0c;网友使用百度搜索进入的搜索结果页出来的却是神马搜索的结果页。 百度搜索流量事件是网站劫持的其中一种表现。网站劫持还会导致以下问题&#xff1a; 用户输入正常网址跳转到其它地址&#xff…

软工作业4:用户体验分析:以 “师路南通网站” 为例

一、目标&#xff1a;针对师路南通 &#xff0c;开展UX分析。 PS&#xff1a;对比另外2个学习网站&#xff1a;1. UMU学习平台 &#xff1b;2. 学生安全教育平台 基于实例分析&#xff0c;体会用户体验设计的 7 条准则。二、过程 &#xff08;一&#xff09;满意的地方 1.界面符…

使用阿里云域名 服务器 Tomcat7 阿里云免费证书 Http转Https以及Https表单提交问题 搭建网站全过程及其踩的坑

一天的时间才搭完累死了! 我在这里主要记录一下,每个修改的意义.如果只是修改而不知道修改的意义我觉得下次还是不会! 云服务器本地使用Http协议访问Tomcat不用输入端口号 这里我已经在阿里云上购买了服务器及域名,并且域名已经备案. 1.登录阿里云服务器. 2.在服务器中下载…

用Teleport Ultra下载网站全部页面 爬虫

测试case&#xff0c;就是把Commons-FileUpload 的API下载来 上网查的时候我才发现这是一个由很多页面组成的网站&#xff0c;下载起来很麻烦。怎么办呢&#xff1f;呵呵&#xff0c;一定是有办法的。Teleport Ultra这个工具就能帮我们搞定&#xff01;这是一个汉化绿版的迅雷下…

网站收集

1.http://msdn.itellyou.cn/ MSDN很多工具可以下载 将地址拷贝到迅雷下载即可 2.https://visualstudiogallery.msdn.microsoft.com/a1166718-a2d9-4a48-a5fd-504ff4ad1b65 isual Studio示例代码浏览器 免费Visual Studio示例代码浏览器为开发人员提供了一个在Visual Studio 20…

大型网站的标准

大型网站的标准 问题&#xff1a;什么样的网站才能算的上大型网站&#xff1f; 答&#xff1a; 用户访问量&#xff08;优酷&#xff0c;百度&#xff09;流量大&#xff08;优酷&#xff1a;流媒体服务器搭建&#xff0c;主要技术点在于带宽&#xff09;海量数据的检索问题&am…

python爬取内容乱码_Python爬取网站返回的内容为乱码解决方法

1、爬取某网站内容时&#xff0c;返回的结果为乱码&#xff0c;如图&#xff1a;2、写在前面的解释Requests会基于HTTP头部响应的编码做出有根据的推测&#xff0c;当访问r.text时&#xff0c;Requests会使用其推测的文本编码。查看网页返回的字符集类型&#xff1a;r.apparent…

关于php留言本网站的搭建

1.检查php&#xff0c;http服务是否安装 [rootlocalhost ~]# rpm -qa | grep http httpd-tools-2.4.6-40.el7.centos.x86_64 httpd-2.4.6-40.el7.centos.x86_64[rootlocalhost ~]# [rootlocalhost ~]# rpm -qa | grep http-bash: [rootlocalhost: 未找到命令 2.检查到没有安…

axure web组件下载_04网站设计关于axure原型预览文件访问慢的原因

01背景最近发现原来的原型预览访问速度超级慢&#xff0c;这一切貌似是最近调整了下Axure原型中的几个元件&#xff0c;上传之后&#xff0c;原本访问超级快的文件&#xff0c;变的超级超级慢。02原因分析过程1、首先直接从服务器角度找原因。自认为服务器可能是宽带不够&#…

css3网站代码 html5_HTML5和css3(一)

一、什么是 HTML5HTML5 的概念与定义是一个新版本的 HTML 语言&#xff0c;定义了新的标签、特性和属性拥有一个强大的技术集&#xff0c;这些技术集是指&#xff1a;HTML5 、CSS3 、javascript, 这也是广义上的 HTML5定义&#xff1a;HTML5 定义了 HTML 标准的最新版本&#x…

mysql投票网站_PHP+Mysql实现网站顶和踩投票功能实例

PHPMysql实现网站顶和踩投票功能实例&#xff0c;通过记录用户IP&#xff0c;判断用户的投票行为是否有效&#xff0c;该实例也可以扩展到投票系统中。首先我们在页面上放置“顶”和“踩”的按钮&#xff0c;即#dig_up和#dig_down&#xff0c;按钮上分别记录了投票的票数以及所…

openresty 交给php,openresty搭建网站防火墙

实现一个简单的防火墙,例如:当我提交一个 select * from 疑似 sql注入的参数时,则会直接被拦截下载waf配置:wget https://github.com/loveshell/ngx_lua_waf/archive/v0.7.2.tar.gz解压文件并将./config.lua,./init.lua,./waf.lua,./wafconf/*文件移动到你的项目目录例如在上篇…