這幾天,一直想找乙個替換整站即將要輸出到客戶端html方法,但是找了好多,都沒有找到,找到最大級別的,也就是在頁面中處理;再者,這兩天又看到了dudu寫的關於 outputcache bug 的文章,真讓我感覺到,不理解原理看來真的不行的,沒文化太可怕了,所以,必須要再次認真的審視下 httphandler 和 httpmodule 的作用及用法 啦
先說 httphandler ,其實自定義 httphandler 也是蠻簡單的,但是這個的作用不是太大,自定義httphandler也主要用在靜態檔案的處理上面了,比如說 加水印、防盜煉等等,都是對 靜態檔案做的處理,因為 httphandler 和 asp.net 中的page 只能 2 選1 操作,所以,用來做處理動態頁面,是不太便利的。(asp.net 中的page,即 system.web.ui.page ,也是乙個 httphandler,只不過是經過擴充套件的、複雜的 httphandler)。
再說下 httpmodule 吧 ,感覺 httpmodule 能處理的事情比較多,也相對比較重要,另外使用比之前者也簡單很多,因為有 global.asax 檔案嘛,你懂得,不需要往 webconfig 配置啦。
httpmodule 中的事件比較多,在各個事件中,做一些處理還是很不錯的,對於一些較深入的應用,前提搞
httpmodule 是必須的
頁面直接上**吧,這寫**主要是完成以下兩個任務:
1. 全域性過濾 站點的 html 輸出
2. 頁面加上 outputcache後 , httpmodule 中的事件是否還執行
using system;using system.web;
using system.io;
using system.text;
//////
mymodule 的摘要說明
///namespace moduledemo
private
module : authorizerequest!
" + datetime.now.millisecond.tostring() + "
");}
private
module : resolverequestcache!
" + datetime.now.millisecond.tostring() + "
");}
private
module : acquirerequeststate!
" + datetime.now.millisecond.tostring() + "
");}
private
module : prerequesthandlerexecute!
" + datetime.now.millisecond.tostring() + "
");}
private
module : postrequesthandlerexecute!
" + datetime.now.millisecond.tostring() + "
");}
private
module : releaserequeststate!
" + datetime.now.millisecond.tostring() + "
");}
private
module : updaterequestcache!
" + datetime.now.millisecond.tostring() + "
");}
private
module : endrequest!
" + datetime.now.millisecond.tostring() + "
");}
private
module : presendrequesthenaders!
" + datetime.now.millisecond.tostring() + "
");}
private
module : presendrequestconternt!
" + datetime.now.millisecond.tostring() + "
");}
public
void dispose()
}public
class replacehtml : stream
public
override
int read(byte buffer, int offset, int count)
//override the write method to filter response to a file.
public
override
void write(byte buffer, int offset, int count)
//the following members of stream must be overriden.
public
override
bool canread
}public
override
bool canseek
}public
override
bool canwrite
}public
override
long length
}public
override
long position
set
}public
override
long seek(long offset, system.io.seekorigin direction)
public
override
void setlength(long length)
public
override
void close()
public
override
void flush()
}}
default.aspx
<%
@ page
language
="c#"
%>
<%
@ outputcache
varybyparam
="*"
duration
="5"
%>
<
script
runat
="server">
protected
void
page_load(
object
sender,
eventargs
e) protected
override
void
render(
htmltextwriter
writer)
script
>
doctype
html
public
"-//w3c//dtd xhtml 1.0 transitional//en"
"">
<
html
xmlns
="">
<
head
id="head1"
runat
="server">
<
meta
name
="keywords"
content
="" />
<
meta
name
="description"
content
="" />
<
title
>
title
>
head
>
<
body
style
="font-family
:微軟雅?黑;
margin
:100px auto 100px 50px;"">
<
h1 style
="color
:gray;">
頁3面? html
h1>
<
h1 style
="color
:gray;">
測a試? replace
h1>
<
div><
asp:
label
runat
="server"
id="label1">
asp:
label
>
div>
body
>
html
>
web.config 配置:
MVC擴充套件HttpHandler
擴充套件用來做防盜煉 訪問特殊字尾名的處理方式 比如 這樣乙個位址 並不是直接訪問伺服器的物理路徑 會根據字尾名 找到當前字尾的處理程式 進行處理 所有字尾為.config的都由httpforbiddenhandler處理 字尾為這個的很安全 別人都是訪問不到的 通過這個 可以自己擴充套件一些特殊字...
阿里雲Linux建站過程
首先請允許我感謝b站up主 極客開發者 大家可以先學著,所需工具我已經傳到資源當中 我會把詳細的建站步驟與我個人網域名稱備案的整個流程 心得體會逐步完善到本篇部落格當中。總的來說建站的過程是 一 申請網域名稱 雲伺服器 二 網域名稱備案 三 網域名稱解析 四 使用tomcat與linux版的jdk配...
python全站爬蟲
通過正規表示式找到當前頁面中的所有url,儲存在set中 剔除重複 用類似圖資料結構的深度優先遍歷演算法遍歷set,實現全站爬蟲。from urllib import request from bs4 import beautifulsoup as bs import re import time ...