一个页面标题和过滤输出的解决方案(上)

首先要提到一个东西:Response.Filter,它可以为你服务什么?

filter可以让你截取到最后的html输出,如果你的程序需要在输出之前,做一些处理,用这个比较方便。

 

 

第二个问题,在哪里,如何使用Response.Filter

这里使用上全局的Global.asax处理,在Global.asax的Application_BeginRequest事件里截取html

 

 

事件代码复杂?其实就一行:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Response.Filter = new HttpResponseFilter(HttpContext.Current.Response.Filter,new ReplaceTextList());
}

 

 

代码中的HttpResponseFilter类是什么?

说功能:这类主要实现的功能是,接替默认的Filter,然后换成自定义的Filter,方便处理自己要处理的事情。

哪来的:由于Response.Filter 是一个Stream类,所以新类HttpResponseFilter需要继承自Stream,然后复写Write方法,实现自定义方法即可。

 

 

复写代码示例:


public override void Write(byte[] buffer, int offset, int count)
{
            //读出写的文字

            byte[] data = new byte[count];

            Buffer.BlockCopy(buffer, offset, data, 0, count);

            string inputText = Encoding.UTF8.GetString(data);

            //开始替换
            if (replaceTextList != null && replaceTextList.Count > 0)
            {
                foreach (KeyValuePair<string, string> values in replaceTextList)
                {
                    inputText = Regex.Replace(inputText, values.Key, values.Value, RegexOptions.Singleline);
                }
                replaceTextList.Clear();
            }
            replaceTextList = null;

            //将替换后的写入response
            byte[] newdata = Encoding.UTF8.GetBytes(inputText);
            filterStream.Write(newdata, 0, newdata.Length);
}

 

代码解读:

分三步走:

1:读取原文本内容

2:然后替换修改成自己的内容

3:写回去输出

注意事项:要注意网站编码是UTF8还是GB2312

重点是:我扩展了替换那一块,我用了一个Dictionary<string, string> 

然后循环替换,当然支持正则,所以替换的原始文字和替换后的文字就对应上两个string上了

具体扩展应用见下篇文章。

 

扩展的小说明:

为了可扩展与方便大伙,我定义了一个抽象类,先实现了三个正则用于截取标题,说明,和关键字,具体应用还是见下文。

 

时间: 2024-09-20 00:03:52

一个页面标题和过滤输出的解决方案(上)的相关文章

一个页面标题和过滤输出的解决方案(下)

上一篇说到:为了可扩展与方便大伙,我定义了一个抽象类,先实现了三个正则用于截取标题,说明,和关键字. 抽象类代码简洁如下: public abstract class ReplaceTextListBase     {         /// <summary>         /// 将被返回的替换文本集合列表         /// </summary>         public Dictionary<string, string> replaceTextLis

如何计算打开一个页面时的流量?

问题描述 我部署了一个网站但带宽只有4M我想计算一下打开一个页面时数据量是多少.... 解决方案 解决方案二:在客户机上把其他的服务都关了,然后隔一定时间反复的打开一个网页,然后取平均值.每个页面的数据流量未必都一样,同一个页面因为登陆的用户或获取的数据资源不一样,页面大小也不一定一样解决方案三:IE9的开发人员工具有个网络选项卡,能监视到从后台获取了多大的数据量.

如何用session把datalist里面的某一个数据赋值到另一个页面中

问题描述 datalist查询出来的一列数据加超链接并把数据作为Session值传值到另外一个网页求助! 解决方案 解决方案二:session只保留id等查询关键字,另一个页面查询数据再加载解决方案三:那就取出来给赋值给session啊然后在另外一个页面取这个session的值解决方案四:session会占用服务器资源,保存数据不宜过多..解决方案五:如果为了安全,只是一两个页面用的Session,用完后及时Session.Romove("session名")解决方案六:把所有数据拼接

页面标题五个常见错误

摘要: 页面标题是 搜索引擎排名一个非常重要的影响因素 ,但是很多站长却也时常忽视它,经常犯下这篇文章里讲的 五个常见错误. 什么是页面标题呢? 页面标题说白了就是通常在一份H 页面标题是搜索引擎排名一个非常重要的影响因素,但是很多站长却也时常忽视它,经常犯下这篇文章里讲的五个常见错误. 什么是页面标题呢? 页面标题说白了就是通常在一份HTML/XHTML文档上方<head>标签里赋予 <title>标签的值.大多数浏览器会在浏览器窗口和/或浏览器选项卡上方显示页面标题. 以下面的

php5-怎么用php抓取一个页面的文章标题和标题对应的内容导入数据库,T_T

问题描述 怎么用php抓取一个页面的文章标题和标题对应的内容导入数据库,T_T 解决方案 http://www.jb51.net/article/48923.htm 把数据先抓回来,然后筛选你想要的,存入数据库就可以了. 解决方案二: 用xml工具解析,或正则

请问一下,一个动态网站的几个页面共用一个页面的关键词和标题这些怎么解决

问题描述 请问一下,我的网站:居丫网www.homefoot.com我给他们加上关键词,标题和描述但是出现很多页面都是共用的一个页面的标题现象,他们都是动态调用的,怎么解决这个问题,使他们单独拥有各自的标题和描述等 解决方案 方案1.写到配置文件中或者存到数据库中,然后系统加载的时候加到内存中(application中) ,然后在JSP中el表达式取值就可以了.方案2.使用JSP的装饰工具:如Tiles.SiteMesh2解决方案二:可以使用变量,分别进行不同的传值显示.

jsp 如何以post方式向另一个页面传送参数?

问题描述 jsp 如何以post方式向另一个页面传送参数? response.sendRedirect("/Message.jsp?userName="+userName+"&passWord="+passWord); 这是我写的,但是,是明文传输,如何以post方式传输? 解决方案 一.写一个表单,用post提交 二.使用js的ajax post方式 解决方案二: sendRedirect只能get,你可以输出表单html代码,指定表单method为pos

filter过滤输出的问题

问题描述 filter过滤输出的问题 import java.io.CharArrayWriter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; public class HttpCharacterResponseWrapper

frameset框架,点击一个页面的返回按钮,另一页面的显示内容要跟着返回显示上级的信息。

问题描述 frameset框架,点击一个页面的返回按钮,另一页面的显示内容要跟着返回显示上级的信息. 我的frameset分为top.jsp.left.jsp.mainFarme.jsp. 我在top.jsp页面有一个按钮 <li id="bk"><a href="javascript:history.go(-1)"><span>返  回</span></a></li> 然后left.jsp有一