当前位置:首页 » 密码管理 » 码语访问者

码语访问者

发布时间: 2025-06-14 22:33:57

A. ASP怎么查看在线访问者的IP地址

分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

访问者访问一个蠢含IP。ASP文件,能获得他的IP,而我们能同时从另外一个页面LOADIP。ASP文件看到他的IP,这段代码要怎么写呀,我写了出来能获得IP,但是就是我们不能同时从另外一个颤笑页面看到访问者的IP,哪位大侠能教教我!

IP。ASP 代码

<% Application.Lock()

Application("Userip") = Request.ServerVariables("HTTP_X_FORWARDED_FOR")

If Application("Userip") = "" Then Application("Userip") = Request.ServerVariables("REMOTE_ADDR")

Session("Userip")=Application("Userip")

Application.UnLock()

Response.Redirect("loadip")

%>

LOADIP。ASP代码

<%

if Session("userip") <> "" then

online=Response.IsClientConnected

online=true

userip=Session("userip")

Response.Write"<table border=1 align=center>"

Response.Write"<tr><td width=100>"

Response.Write("来访者IP:")

Response.Write"<带洞笑/td><td width=200 align=center><a href=#>"

Response.Write(userip)

Response.Write("</a></td><td>")

Response.Write(date())

Response.Write("</td></tr></table>")

else

Response.Write("<div align=center>")

Response.Write("没有来访者")

Response.Write("</div>")

end if

%>

哪里错了,哪位大哥大姐帮帮我!

解析:

没有错误,请问你是那里报错?本地和远程调试都未出现错误啊?

=============

你能解释一下“同时”是个什么意思么?

你的意思是你打开一个页面,如果有访问者登陆后,你打开的那个页面就立即显示出登陆者的IP?

B. 怎么做电子地图,类似百度的那种最好有实例+代码的链接

首先,你加别人的链接,正常情况别人是很喜欢的,因为这本身就是一种免费的推广方法,所以你不必担心。

然后介绍一下比较常见的网络推广方法:

1、广告网站软文推广法:现在广告类型的网站非常流行,去广告网站主要是去几个有人气的广告网站有针对性的加几百上千个用户。然后选择合适的软文并合理的附带上网站链接,发表到自己的日志里。再让自己的一些好友分享,这样就让很多人都关注到你的文章,关注到了你的网站。

2、广告网站API合作推广法:如果你自己或下面的员工有一定的技术实力,可以开发一些和自己网站产品相关的小插件,插到校内上,插到海内上。只要有开放API的广告网站都去插下。现在很多网站都有在这么搞,去校内看看哪些开放的应用程序,很多都是一些小网站提供的,而且上面都或多或少有挂自己网站的广告。而且这个市场越早做越好,很多广告网站都是才开始尝试开发API,审核的要求还不是特别严格。等以后做的网站多了,再想插到广告网站里去就难了。

3、收藏夹推广法:把一些精彩内容的页面添加到QQ书签,网络搜藏,雅虎收藏等,让喜欢这些内容的网民去阅读,收藏。

4、版主联盟推广法:这个方法适合论坛社区网站的推广。也就是先去加入一些版主联盟,像大旗版主联盟就很不错,每天把论坛的一些精彩内容提交上去,等待被相关频道录用,一经录用,那就会给你带去不少的IP。我最多的一次是两天就给网站带去了3W多的IP点击量。

5、回复置顶推广法:其实这个方法我也不知道该叫什么名字,它的局限性很小,据我所知,只使用于猫扑大杂烩,就暂且叫回复置顶吧。这个方法是我偶然发现的,是在看网站IP来路的时候发现的,发现那天有200多的IP来自猫扑的一个帖子,但是我知道我们没有去那里发过推广帖,所以觉得有点奇怪,就去那个帖子看看,发现是有人放了我们网站的一个链接,并且回复置顶了,所以才给我们带来了200多的IP。后来我就去和一些常在猫扑混的网友聊,才知道可以用一种叫“月明符”的道具来置顶回复。版主还不能删,只要管理员才有权删,所以一般情况下都能置顶一段时间。

6、有奖注册推广法:以增加会员注册量来做的一种推广方法。一般大家都是以有奖注册,或者一些激励注册的方法来推广,现在的人都是现实很精的,无利可图的事,他们是不会做的。

7、免费游戏推广法:免费游戏就是在你的网站挂一中免费的游戏,但是是要和网站的主题相同,还要是有奖游戏。他们网站就挂了一款完全免费的“梦幻体彩”足球比分竞猜游戏,就和他们的网站内容完全是一致。推广的效果也非常好。

9、搜索引擎推广法:如今的新手站长,最热衷的就是这个短平快的方法。搜索网站的功能就是整合网络资源,给网民找到最适合的网站内容,给其他网站带去流量是其意想不到的副作用。很多站长类网站的网站推广栏目,似乎都变成seo专区了。seo的最好方法,就是网页代码规范、访问速度快、内容独特少重复,对网民有用,而且具有唯一性。

10、软文推广法:写文章,或者引用好文章,里面巧妙地加入自己的网址。

11、博客推广法:软文要有发表的地方。一个是发到论坛,文章站,一个是发到博客里。发到博客里有个好处,不会被乱删。

12、媒体推广法:让传统的媒体,报纸、电视、广播等等报道。

13、手机推广法:wap网站、群发短信、彩铃提示等。手机的功能越来越强,小巧容易携带,以后手机的上网人数肯定超过电脑人数。

14、网摘推广法:提高优质网页、图片、帖子到网摘站和聚合类网站。如果被推荐,也能有不少流量。

15、论坛推广法:注册几十个几百个论坛,每个论坛注册几十个帐号,把签名设为自己的网站。发表热门内容,自己顶自己帖子。注意换马甲,发布有争议性的标题内容。好的标题是论坛推广成败的100%。这里说的论坛是指泛论坛,包含留言本、论坛、贴吧等等一切网民可能聚集的地方。

16、第三极推广法:在宣传网站的同时,缀上自己的财富第三极号码。在每个网页的内容后面,加上自己的财富第三极号码,扩大知名度,还有带来额外的财富收入。

17、QQ和MSN昵称推广法:把昵称修改为网址,例如免费大奖游戏。

18、邮件列表推广法:就是定期不定期的给网民发送电子杂志。

19、非预期邮件推广法:用专业的邮件群发工具,上网批量搜集电子信箱地址,然后群发。如今的很多网站,都要用电子信箱作为用户名,因此,搜集电子信箱地址,比以前方便多了,而且这些电子信箱都是活信箱,网民经常用的信箱,而非失效的信箱,效果不错。邮件标题要“规范”,别让网民误以为是垃圾邮件。

20、口碑推广法:好好做内容,让网民自己主动传播你的网站。

21、限制访问内容推广法:给网站内容分出访问等级,设置访问条件。给网民一个推广链接,网民只有推荐够一定访客或者注册会员后,才能访问该内容。非主流色彩爱情网站多用此方法,效果奇佳。

22、网站排名投票推广法:加入其他的网站推出的网站排名,或者给其他站进行网站排名,都能有效地提高网站的展示率。

23、聚合链接推广法:将优秀内容聚合在一起,吸引网民。

24、BT电炉哇嘎资源推广法:可以在音视频文件里放入自己的网站,特别是在一些需要证书才能收看的视频文件里,甚至可以弹出网站。一些站长使用这种方法,借助最新的电影上映时机,发布一个视频文件,就能搞到几十万的ip,效果绝对一流。

25、图片打水印推广法:防止别的网站引用图片,不仅不友好没效果,而且阻挡了搜索引擎的收录。从某种角度来说,其他网站也是自己网站的特殊网民。如果给网站打上水印,放上网站地址,积极地让别的站引用图片,提高网址曝光率,那么宣传效果是很好。水印法,包括图片水印法、视频水印法、网页水印法

26、视频源Flash推广法:如今的视频网站,都提供外部的访问接口。在别的网站、日志引用这些视频的同时,直接宣传了网站,扩大了网站的影响力。

27、提交到网址站推广法:网站导航站,网站目录站。

28、电子邮件自动回复推广法:就是在邮箱设置自动回复,把网站的地址和网站介绍设置为自动回复内容。当你接收到任何一封邮件的时候,邮箱就会自动回复过去。

29、无偿单向链接推广法:无偿给其他网站做链接,既能丰富自己网站的信息,而且在网民搜索别的站的时候,又可能出现自己的网页结果。

30、网站间互换链接推广法:这是几年前最流行的网站宣传方法,如今存在的交换链网站很稀少了。

31、批量提交交换链接推广法:用自动提交工具,提交网站到其他网站的友情链接栏目。当站长们在审核是否通过你站的时候,就为你贡献了一个ip。人类社会的发展,就是得益于工具自动化程度的提高。要充分利用互联网传递信息的自动化、数字化、批量化优势,善于使用批量宣传工具,节省人力重复性劳动。

33、流量统计推广法:在网站的所有页面上放置一个iframe页面引用代码,在所引用的页面上放上其他网站的统计器,用程序代码控制变换统计id,当其他站长查看统计,浏览访问来路来源的时候,你的网站就出现了。一般的站长都会点击查看的,这种宣传方法效果很好,属于密不外传的绝招,很多人知道网络和google的威力就是从网站访问来路知道的。

34、互换频道推广法:和其他网站互相交换频道。就是把对方网站当作自己的一个频道在网站上推广。这样互相捧场,互相帮衬,威力巨大。

35、免费资源推广法:给其他网站提供免费的服务,比如免费统计,免费评测,免费天气查询代码,免费博客,免费ip查询代码,免费股票查询代码,免费搜索代码,免费在线客服系统,免费留言本,免费域名,免费空间,免费pr评价,免费电子书,免费查询,免费挂qq,免费认证,免费素材等等。要让自己提供的服务,成为其他网站的标准配置。时间久了,流量自然有了。

36、内容联盟推广法:这个方法适合有服务器资源的站长。提供一个平台,可以绑定其他网站的域名,把网站的头尾广告位置送给其他站长,吸引其他网站加入。看似是为其他网站做嫁衣裳,实际上是在宣传自己的网站,扩大了网站知名度和影响力。网络上流量最大的地方不是搜索网站,而是其他网站。搜索网站流量大,但是平均到每个站,也就几个几十个,对自己实际意义不大。拉到一个站长,胜过拉到几千个网民。这种方法长期而持久。

37、威逼强迫推广法:比如网站**miibeian、各地公共安全局,都可以强迫网站放链接。一般人用不了。不过可以变相使用,比如黑客加链接法。

38、做大做强推广法:比如门户站。让小网站以加自己网站的链接为荣。尽管很少有站从门户网站得到一星半点的好处,但是对强者天然的崇拜心理,仍然让无数站长不由自主地献身链接,并以此为光荣。至于人家是否留意和领情,则是另外一回事了。

39、客户端软件插件推广法:有技术含量的站长可以采用此法。开发流行的网民常用的客户端软件,比如聊天工具类软件qq,网络游戏类工具,下载工具类网站迅雷等等,都可以弹出窗口,可以直接弹网站首页,也可以弹一些活动页。效果奇好。

40、收费资源免费推广法:比如长久提供软件注册码,注册号,序列号,免序列号版软件,提高网站粘性。比如操作系统的ghost版本,养活了好几个日访问量几十万ip的网站。

41、群组推广法:如今的web2.0等社交网站,都有这个功能。在群组里广发消息,吸引注意力。

42、发布任务推广法:在威客网站发布任务,不仅能够吸引接受任务的人,而且能够吸引一大批旁观者。要充分利用这种一对多的传播优势。

43、印发宣传单线下宣传推广法:既可以自己印发,也可以和其他传统企业合作,使用它们的现有渠道。比如和超市合作,在购物小票上印制自己网站的网址。可以拿网站上的资源和超市交换。

44、流量交换联盟推广法:加入流量交换联盟,运用专业的流量交换系统平台,直接和其他网站交换流量,互惠互利,共同发展。

45、鼓励访客宣传推广法:至于如何打动网民口碑宣传,则要根据网站内容,灵活安排了。一般新奇有趣互动性的内容效果教好。比如测试类啊、评比类啊、节日祝福类啊、搞怪类啊等等内容的网页容易被强烈传播。可以考虑自己的网站如何发掘这方面的素材。

46、名片推广法:在名片上,手册上,一切自己能掌控的纸上,印上网址、写上网址。

47、电子邮件签名推广法:在电子邮箱的设置里,设置一下。加上网站网址和网站介绍。以后写信就会自动加上,自己就省事不少。

48、网上竞赛推广法:比如美女评比、网站评比等等各种资格赛的评比。

49、付费推广法:如果一些方法免费行不通。只要性价比合适,出去一个,可以收回两个,不妨付费推广。舍得舍得,舍不去的还会跑回来的。

50、分工合作推广法:社会效率的提高一个是工具自动化水平的提高,另一个是分工的价值。自己的能力有限,善于整合外部力量,雇用别人推广,把专业的事情交给专业的人来做,可以达到事半功倍的效果。

51、按效果付费推广法:如果你有可以出售的资源,不妨在网络上以按效果付费的方法推广,可以免费得到大量的流量。

52、设为主页和加入收藏推广法:如果你站的内容足够好,访问者也许愿意长期访问你的网站。在这一点上,要多费点心思提醒网民哦。

53、厕所绘画推广法:这种方法慎用,已经有得不偿失的先例。不推荐使用。

54、搞活动推广法:各种线下活动,各种聚会等。

55、广场效应推广法:在身上衣服上画上网址,去人多的地方引人瞩目。最好是在记者出没的地方,容易产生新闻效应。因为记者整天没事干,最喜欢这类八卦事情。

56、贺卡推广法:当别人送贺卡的时候,就顺便推广了你的网站。

57、事件连锁反应推广法:炒作。具体就是挑战人们的心理承受底线,锻炼人们的心理承受能力。

59、网络网站推广法:去网上的网络全书添加内容。

60、RSS推广法:有很多rss聚合类网站,可以制作自己网站的rss,提交到这些网站。

61、网吧推广法:如果有一些网吧资源,可以让网吧的老板帮忙把网吧的机子主页设为自己的网站。

62、站长交流推广法:多和其他站长交流,探讨推广方法。说不定什么时候就有意外惊喜。在和别人的经验交流中也往往会有灵感的火花跳跃。不要吝啬你自己的经验,在告诉别人的时候,也是对自己经验的一次系统化、条理化、理性化提纯。

63、网页病毒推广法:利用其他网站的dns漏洞、服务器漏洞,程序漏洞等,直接挂上自己的网站,迅速提高网站普及率。这是最强悍的另类推广方法。属于被清理的方法之列。

64、过路费推广法:如果你有电信等方面的资源,掌握了网页的传输通道,可以将每个网页都进行完善,加进你想加入的内容。

65、域名推广法:人是会犯错的动物。研究高流量网站的域名,分析其错误拼写的各种可能,注册相应域名,也可以从中得到不少流量。如果应用在网站内容建设上,则可以以热门内容的错误拼写文字来建设和优化内容。

66、分类信息推广法:去各类分类信息站发布网站信息。

67、免费域名推广法:给其他站提供二极域名,或者去申请其他站的免费域名指到自己的站,都可以。

68、聊天室推广法:其实和QQ群推广差不多,就是在在各种聊天室去和大家聊天,搞好相互关系,适当的时候发一些网站的链接推广。注意给出一个必须发链接的理由。

69、演讲推广法:举办各种讲座,演讲,不知不觉地给网站吸引来新访客。

70、特殊资源推广法:比如高考查询,英语四六级查询等资源,是利益相关者不得不访问的。

71、模仿推广法:处处留心皆学问。学习其他网站的推广方法,看看其他网站的链接都出现在了什么地方,想办法依葫芦画瓢。模仿是创新的基础,创新是模仿的升华。创新=模仿+经验积累+批量化+自动化。

72、被动推广法:提高网站质量,做一个对网民有独特帮助的网站,让网民喜欢你的网站,让网民自发地传播你的网站,是效果最好的推广方法。

73、化整为零推广法:在各大商务网站上,建立网站的副版本。借用其他网站的平台,推广自己的东西。

74、预告推广法:也叫系列法。不要将宝贵的内容一次性全部提供,每天提供一点点,连续几个星期、几个月,让网民不断重复地访问网站。类似电视台播放电视剧和报纸的小说连载等等模式。比如赤壁,拦腰劈成两半,就能卖两倍价钱,赚双倍票房。搞网站也要学会这种留一手的做法。

75、创建品牌推广法:其实品牌建设并不难,非常简单。网上信息浩如烟海,陈旧信息充斥在各个网站,价值极其微小。站长们可以持续搜集某个主题信息,根据最新条件和情况,不断对原先的旧内容维护、补充和更新,按照日期顺序有规律地发布到其他网站,提高网站影响力。当人们需要该方面信息的时候,唯一的去处就是此类信息发源地了,建立品牌就是这么容易。有了品牌知名度,网站自然而然有了流量,顺便也能带活整个网站。例如中关村在线的电脑配件报价,网络的搜索排行榜,雪缘园足球即时比分。

76、多语言版本推广法:利用一些网站提供的免费翻译功能,建设不同语言版本的网站,比如繁体版,英文版等等,扩大网站的适用人群。

77、免费建站程序推广法:开发一套网站程序,免费提供给别人使用。网站程序里少不了带上开发者的版权链接。目前流行非流行的博客程序、论坛程序等开发者网站,流量大的吓人。有点能力的站长朋友何不学习一下呢。即使开发不了完整版,搞个二次开发,推出美化版、各类主题版,发布到各类源码站。

78、网站模板推广法:这个容易理解,用网页建筑师html、网页美容师css、网页魔术师javascript给流行的网站程序设计新界面,发布到对应网站,在发布的时候,可以留下网站的模板地址的,例如提供上述模板等等,这样可以获得很高的曝光率。模板其实很容易制作的,改下颜色,改下字体,变变页面元素位置即可。只要用心,没有做不到的。关键是学会思路,凡事心中有谱。

79、讲故事出书推广法:书籍可以被长久反复阅读,对人们的影响是非常大的,网站也能给人留下不可磨灭的印象。

80、创造新概念推广法:让新概念成为网站的代名词。当人们使用这个概念的时候,自然就宣传了你的网站。给人们先入为主的信息,融入人们的生活之中,这样的宣传效果,具有不可动摇的地位。概念的名称可以固定,概念的内容却可以常变常新,满足人们持久而不断变化的需要。

81、改名推广法:将城市名称、公司名称、道路、人名、昵称、建筑物名称或者社区名称等等实体的名字,修改设置为网站地址。这样做的话,网址的曝光率和使用频率会非常高,网站也会非常自然地出现在各种名单中,比如地图上,新闻报道里,人们的日常交往中。总之,传播效率和传播有效性都会非常高。

82、月历墙纸推广法:制作各种精美独特风格多样的月历图片,提供给人们做电脑的桌面墙纸壁纸使用。只要网民一打开电脑,你的网址就跃然pc上。一年300多天,天天都在提醒网民,你的网站对其有用。

83、征婚推广法:在各类报刊杂志网络上以整版的方式征婚,联系方式就仅仅留下网址。不仅可以吸引应征者,也可以吸引无数喜欢猎奇的闲极无聊的大量人群。具体做法可以参考以往的“征婚门”事件。

84、公交车站推广法:在都市的热门地段设置一个车站,乘车的人必然能够留意到,绕都绕不过去。此方法最适合公交公司。

85、地图推广法:让网站总部出现在地图上。地图传播面广,受众大,使用频率高。此法适合财大气粗有特殊关系者。研究研究你所在地方的地图,看看有什么公司的名字出现在上面,想想人家是怎么出现在上面的,模仿一下吧。如果做不到,那么求人不如求己,让自己的网站成为一张地图,一个平台。

86、吹捧推广法:要让网站成为网民心中的唯一,只有抬高身价,自吹自擂,让网民相信,你是最好的,你是最棒的,你就是名牌。让网民访问贵站,成为一种身份的象征,成为显耀自身价值的标志,极大地满足人们的虚荣心。这个可以通过设置访问限制来达到。人们天生对打破限制有一种狂热的喜好。本来平淡无奇的东西,一旦设置了限制,身价就高了。人们始终不明白一个道理:世界上最有价值的东西是免费的。

87、出入口推广法:在茫茫人海中,每个人都在各个入口和出口里进进出出,徘徊奔波,寻找活着的乐趣和存在的意义。它们找到了吗你也许可以为之做点什么。

88、招聘推广法:如今科技和社会发展,机器工具代替人们劳作的趋势越来越明显,没事可干就成了一种普遍的社会现象,工作岗位成了一种稀缺资源,“为人民服务”的口号成为争权夺利的代名词,为人民服务不再光荣,主动放弃自己不能胜任的岗位才是光荣的,可是,有谁乐意放弃呢可以预见的是,在不久的将来,自动化工具完全代替人类的重复性劳动,所有人都将没事可干,人人要靠社会保障生存,可是,如今普遍的社会生存保障在哪里呢既然获取为人民服务的资格如此艰苦,那么以招聘的名义,去招聘会上宣传网站,效果想来一定差不到什么地方。

89、立碑推广法:石头是疯狂的,疯狂的石头,是可以让无数东西千古流芳的。石头的寿命远远超过人的寿命和数字化存储载体的生命周期。古往今来,能够流传下来的,都是以石头为载体的。人脑太不可靠,只有石头值得信赖。在繁华地带或者名山大川立个碑,其宣传的效果是非常久远的。甚至可以被史后时期的人看到。但是,到那个时候,你的网站还能访问吗

90、故事推广法:人是感性的动物。人们不喜欢理性的说教,但是这不代表人们不喜欢经过故事包装或伪装的说教。尽管明眼人一眼就知道怎么回事,但是在100万个人中,你能找到一个明眼人吗这是比大海捞针的难度系数还高上千倍万倍的极限任务。买椟还珠的故事在人们的消费行为中时时刻刻上演,所以,请不要忽视包装的效果。如果有可能,就把你的推广行为用故事润色一下,给人们口碑相传贵站一个足够分量的理由。只要一个理由,一切都可以风生水起,面朝大海,春暖花开。让网站的名称,成为整个故事的线索,成为故事走向完美结局的核心要素,成为不可磨灭的一部分。人们就算把整个故事情节都忘记了,也会依稀记得你的网站在其中的独特作用。动人的故事,动人的网站,动人的宣传推广效果,动人的提醒暗示功能。

91、信仰推广法:刺激人们有几个手段、途径和层次,“立,礼,理、利、力”,越往后越低级,越接近兽|性。“立”就是树立信仰,创造理想和心愿,从根本上变化人的思维模式和行为模式。“礼”就是让事情充满趣味性,人是喜欢测验自己思维能力的家伙,把简单的事情人为地搞复杂是人经常玩的智力游戏,它们宁愿柳暗花明地瞎折腾也不喜欢一路顺风。“理”就是讲事实摆道理,用美好的“活着、活好和活得长久”的对错价值观和消除破坏性增强建设性的逻辑达成共识。“利”就是用彼方面的利益来弥补此方面利益的缺失。这是一种亏处有补的让步和交换行为模式。“力”就是以强制力为后盾的兽|性行为方式。把“力”关到笼子里,才是人性的做法。人性是以创造和分享为手段,以人人自由如意为目标的公益事物。而兽|性是以争抢和独占为手段,以无穷的欲望满足为企图的破坏性事物。值得注意的是,人是兽|性和人性并存的事物。判断一个人成熟程度的标志,就是以其行为上的人性程度来衡量的。任何一个人,对任何刺激,都同时存在兽|性和人性两种情绪和想法,没有人可以例外,这是人为无法控制的。人可以控制的是自己的最终选择。“听话听内容,看人看行动”,思想什么都不是,重要的是看这个人(群体)在行动上的反应情况。行为的人性化程度,才体现了一个人(群体)的素质和价值。

92、赞助推广法:对于有价值的公益事情,要积极地参与,这种在客观上酷似AA制的打包推广手段,可以节省不少开支。与其把广告费交给私有群体,不如拿来改善人类的生存处境,既达到了原先的宣传效果,又在客观上做了好事,一举两得一石二鸟一箭双雕一语双关,既有利益又有意义,何乐而不为

93、公共元素推广法:研究各类网站,观察和思考一下这些网站有什么公共的雷同的东西。开发工具和系统,给这些网站提供统一的服务,免除这些网站的重复性的劳动。比如统计服务、留言服务、客服系统、日历系统、聚合服务、搜索服务、友情链接服务、图片服务、帐户服务、支付系统其实,没有什么是不可以分拆的,需要解决的问题是信任。

94、线下实物推广法:赠送免费的纸质日历给人们。举一反三融会贯通敲山震虎打草惊蛇地推而广之,赠送免费手机、免费午餐、免费住宿、免费资格、免费门票、免费春联、免费杀毒软件、免费代码、免费服装、免费书籍、免费玩具、免费电话等等等等。自己想去吧。一切收费的都可以免费提供,只要间接收获的投入产出比性价比合算划算。提醒一下,你要让人们看到你自己的利益所在,否则人们会因害怕和难以置信而不敢接受。这是免费爱心东西在金钱时代遭遇的一个信任危机,也是金钱的负面效应的作用结果。

95、免费算命推广法:命运是固定的,算不算都一个样,正所谓“命运天注定,半点不由人”。“我是谁”这个问题的标准答案是,“我不是我,我是规律的傀儡”。既然人们有这个需要,给算一下也无妨。给人免费算命,建议人们把名字改为你的网站地址,如果成功,你就多了一个忠实的终身义务宣传员。这样的人走到哪里,你的网站就亮到哪里。实在没人改,就改你自己的名字吧。

96、与朋友分享独门秘籍推广法:为了防止好方法失传,强烈建议您公开出来。事物只使用才有价值。价值在使用的过程中才能激发出来。

97、卖站推广法:就说我现在的网站有一万个流量,现三百块低价出售,贴出网址,这样大家都过来看。

98、人工扛牌推广法:穿个有公司独特印记的T恤,找个美女,性感的

C. 浏览器请求语言(zh-cn、zh-tw等),与国家代码对照表

浏览器请求语言字段与国家代码对照表揭示了访问者语言设置与所属国家之间的关系。关键字段为req.headers["accept-language"],此字段包含访问者浏览器首选语言信息。

例如,'zh-cn'代表中文简体,常用于中国大陆;而'tw'则与台湾地区关联,可能与繁体中文相关。这一对照表是理解访问者语言背景与国家属性的重要工具。

通过对req.headers["accept-language"]的分析,开发者能够精准地判断访客的首选语言,进而提供相应的本地化内容。这不仅优化了用户体验,更体现了个性化服务的价值。

理解这一字段与国家代码的对应关系,有助于网站和应用实现更精细的国际化策略。例如,网站可以自动切换到访客的本地语言版本,提供更符合当地文化的用户体验。

此外,这一功能对于内容创作和翻译服务尤其重要。基于访问者来源的分析,内容提供者可以生成多语言版本,满足不同国家访客的需求。同时,翻译服务也能更加精准地捕捉语言风格和文化背景,提升翻译质量。

综上所述,浏览器请求语言字段与国家代码对照表是实现跨文化沟通和本地化服务的关键工具。它不仅帮助开发者和内容创作者理解访客背景,还能通过提供个性化体验,提升用户满意度和忠诚度。

D. META是什么意思

META是指元素可提供相关页面的元信息,比如针对搜索引擎和更新频度的描述和关键词。

meta共有两个属性,它们分别是http-equiv属性和name属性:

1、http-equiv属性:

HTTP协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。

HTTP首部字段是构成HTTP报文最重要的元素之一。在客户端与服务端之前进行信息传递的时候请求和响应都会使用首部字段,会传递一些重要的元信息。首部字段是以键值对的形式存在的。包含报文的主体大小、语言、认证信息等。

2、name属性:

name 属性规定 input 元素的名称。用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据。

但是,只有设置了 name 属性的表单元素才能在提交表单时传递它们的值。主流的浏览器几乎都支持 name 属性。


(4)码语访问者扩展阅读:

META属性主要用于描述网页,对应于content(网页内容)

1、<meta name="Generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等;

2、<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词;

3、<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容;

4、<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者;

5、<meta name="Robots" contect= "all|none|index|noindex|follow|nofollow">

其中的属性说明如下:

1、设定为all:文件将被检索,且页面上的链接可以被查询;

2、设定为none:文件将不被检索,且页面上的链接不可以被查询;

3、设定为index:文件将被检索;

4、设定为follow:页面上的链接可以被查询;

5、设定为noindex:文件将不被检索,但页面上的链接可以被查询;

6、设定为nofollow:文件将不被检索,页面上的链接可以被查询。

参考资料来源:网络——META标签

E. 在组合模式中实现访问者(Visitor)模式

本文从一个给定的实现了组合(Composite)模式的例子开始 说明怎么在这个数据结构上实现业务逻辑代码 依次介绍了非面向对象的方式 在组合结构中加入方法 使用访问者(Visitor)模式以及用改进后的访问者(Visitor)模式来实现相同的业务逻辑代码 并且对于每种实现分别给出了优缺点

读者定位于具有Java程序开发和设计模式经验的开发人员

读者通过本文可以学到如何在组合(Composite)模式中实现各种不同的业务方法及其优缺点

组合(Composite)模式

组合模式是结构型模式中的一种 GOF的《设计模式》一书中对使用组合模式的意图描述如下 将对象组合成树形结构以表示 部分 整体 的层次结构 Composite使得用户对单个对象和组合对象的使用具有一致性

组合模式应用广泛 根据GOF中对组合模式的定义 Composite模式一般由Component接口 Leaf类和Composite类组成 现在需要对一个软件产品管理系统的实体建模 某公司开发了一系列软件集(SofareSet) 包含了多橘正种品牌(Brand)的软件产品 就象IBM提供了Lotus WebsPhere等品牌 每个品牌下面又有各种产品(Proct) 如IBM的Lotus下面有Domino Server/Client产品等 建模后的类图如下(代码可以参见随本文带的附件中 包 test entity下所有的源文件)

如图所示

( )接口SofareComponent就是对应于组合模式中的Component接口 它定义了所有类共有接口的缺省行为

( )AbsSofareComposite类对应于Composite类 并且是抽象类 所有可以包含子节点的类都扩展这个类 这个类的主要功能是用来存储子部件 实现了接口中的方法 部分可以重用的代码写在此类中

( )SofareSet类继承于AbsSofareComposite类 对应于软件集 软件集下直接可以包含品牌(Brand) 也可以直接包含不属于任何品牌的产品(Proct)

( )Brand类继承于AbsSofareComposite类 对应于品牌 包含了品牌名属性 并且用来存储Proct类的实例

( )Proct类就是对应的Leaf类 表示叶子节点 叶子节点没有子节点

用不同的方法实现业务逻辑

数据结构建立好之后 需要在这个数据结构上添加方法实现圆氏悔业务逻辑 比如现在的这个例子中 有这样的需求 给定一些用户选择好的产品 需要计算出这些选中后软件的总价格 下面开始介绍如何使用各种不同的方法来实现这个业务逻辑

非面向对象的编程方式

这种方式下 编程思路最简单 遍历SofareSet实例中的所有节点 如果遍历到的当前对象是Proct的话就累加 否则继续遍历下一层直到全部遍历完毕 代码片断如下

    /** *取得某个SofareComponent对象下面所有Proct的价格 *@parambrand *@return */ public double getTotalPrice(){ SofareComponenttemp=sofareComponent; double totalPrice= ; //如果传入的实例是SofareSet的类型 if (temp instanceof SofareSet){ Iteratorit=((SofareSet)sofareComponent) getChilds() &erator(); while (it hasNext())核山{ //遍历 temp=(SofareComponent)it next(); //如果子对象是Proct类型的 直接累加 if (temp instanceof Proct){ Proctproct=(Proct)temp; totalPrice+=proct getPrice(); } else if (temp instanceof Brand){ //如果子对象是Brand类型的 则遍历Brand下面所有的产品并累加 Brandbrand=(Brand)temp; totalPrice+=getBrandPrice(brand); } } } else if (temp instanceof Brand){ //如果传入的实例是SofareSet的类型 则遍历Brand下面所有的产品并累加 totalPrice+=getBrandPrice((Brand)temp); } else if (temp instanceof Proct){ //如果子对象是Proct类型的 直接返回价格 return ((Proct)temp) getPrice(); } return totalPrice; } /** *取得某个Brand对象下面所有Proct的价格 *@parambrand *@return */ private double getBrandPrice(Brandbrand){ IteratorbrandIt=brand getChilds(erator(); double totalPrice= ; while (brandIt hasNext()){ Proctproct=(Proct)brandIt next(); totalPrice+=proct getPrice(); } return totalPrice; }

这段代码的好处是实现业务逻辑的时候无需对前面已经定好的数据结构做改动 并且效率比较高 缺点是代码凌乱而且频繁使用了instanceof判断类型和强制类型转换 代码的可读性不强 如果层次多了代码就更加混乱

面向对象的编程方式(将计算价格的方法加入数据结构中)

下面我们采用面向对象的方式 可以这么做 在接口SoftWareComponent中加入一个方法 名叫getTotalPrice 方法的声明如下

    /** *返回该节点中所有子节点对象的价格之和 *@return */ public double getTotalPrice();
由于类Brand和SofareSet都继承了AbsSofareComposite 我们只需在类AbsSofareComposite中实现该方法getTotalPrice方法即可 如下
    public double getTotalPrice(){ Iteratorit=erator(); double price= ; while (it hasNext()){ =(SofareComponent)it next(); //自动递归调用各个对象的getTotalPrice方法并累加 price+=sofareComponent getTotalPrice(); } return price; }
在Proct类中实现如下
    public double getTotalPrice(){ return price; }
在外面需要取得某个对象的总价格的时候只需这样写(在本文的例子 test business SofareManager中可以找到这段代码)
    //getMockData()方法返回数据 SofareComponentdata=getMockData(); //只需直接调用data对象的getTotalPrice方法就可以返回该对象下所有proct对象的价格 double price=data getTotalPrice(); //找到某个对象后直接调用其getTotalPrice方法也可以返回总价格 price=data findSofareComponentByID( id ) getTotalPrice();

现在把业务逻辑的实现都放在了数据结构中(组合模式的结构中) 好处很明显 每个类只管理自己相关的业务代码的实现 跟前面举的面向过程方式的实现方式相比 没有了instanceof和强制类型转换 但是不好的地方是如果需要增加新的业务方法的话就很麻烦 必须在接口SoftWareComponent中首先声明该方法 然后在各个子类中实现并且重新编译

使用访问者模式

使用访问者模式就能解决上面提到的问题 如果要经常增加或者删除业务功能方法的话 需要频繁地对程序进行重新实现和编译 根据面向对象设计原则之一的SRP(单一职责原则)原则 如果一个类承担了多于一个的职责 那么引起该类变化的原因就会有多个 就会导致脆弱的设计 在发生变化时 原有的设计可能会遭到意想不到的破坏 下面我们引入了一个叫做Visitor的接口 该接口中定义了针对各个子类的访问方法 如下所示

    public interface Visitor{ public void visitBrand(Brandbrand); public void visitSofareSet(SofareSetsofareSet); public void visitProct(Proctproct); }
visitBrand方法是访问Brand对象节点的时候用的 剩下的方法依次类推 并在接口SofareComponent中增加一个方法
    public void accept(Visitorvisitor);
在SofareSet中实现接口中的accept方法 首先直接调用Visitor接口中的visitSofareSet方法 传入的参数是本身对象 然后递归调用子对象的accept方法
    public void accept(Visitorvisitor){ visitor visitSofareSet( this ); Iteratorit=erator(); while (it hasNext()){ SofareComponentponent=(SofareComponent)it next(); ponent accept(visitor); } }
在Brand中实现接口中的accept方法 首先直接调用Visitor接口中的visitBrand方法 传入的参数是本身对象 然后递归调用子对象的accept方法
    public void accept(Visitorvisitor){ visitor visitBrand( this ); Iteratorit=erator(); while (it hasNext()){ SofareComponentponent=(SofareComponent)it next(); ponent accept(visitor); } }
其实在上面的两个类的实现中可以将遍历子节点并调用其accept方法的代码写到父类AbsSofareComposite中的某个方法中 然后直接调用父类中的这个方法即可 这里为了解释方便分别写在了两个子类中 在Proct中实现接口中的accept方法 直接调用Visitor接口的visitProct方法即可
    public void accept(Visitorvisitor){ visitor visitProct( this ); }
下面需要实现Visitor接口 类名是CaculateTotalPriceVisitor 实现了计算总价格的业务逻辑 实现代码如下所示
    public class CaculateTotalPriceVisitor implements Visitor{ private double totalPrice; public void visitBrand(Brandbrand){ } public void visitSofareSet(SofareSetsofareSet){ } public void visitProct(Proctproct){ //每次在组合的结构中碰到Proct对象节点的时候 就会调用此方法 totalPrice+=proct getPrice(); } public double getTotalPrice(){ return totalPrice; } }
上面那段代码中 首先在类内定义一个总价格的属性 由于Brand和SofareSet都没有价格 因此在实现中 只需在visitProct方法中累加totalPrice即可 在外面如果需要计算总价格的话这样写(在本文的例子 test business SofareManager中可以找到这段代码)
    //建立一个新的Visitor对象 = new CaculateTotalPriceVisitor(); //将该visitor对象传到结构中 data accept(visitor); //调用visitor对象的getTotalPrice()方法就返回了总价格 double price=visitor getTotalPrice();

下面是它的时序图 在类SofareManager中的main方法中 调用软件集对象(data)的accept方法 并将生成的visitor对象传给它 accept方法开始递归调用各个子对象的accept方法 如果当前的对象是SofareSet的实例 则调用visitor对象visitSofareSet方法 在visitor对象中对该节点的数据进行一些处理 然后返回 依次类推 遍历到Brand对象和Proct对象也与此类似 当前的逻辑是计算软件产品的总价格 因此当遍历到Proct对象的时候 取出产品的价格并且累加 最后当结构遍历完毕后 调用visitor对象的getTotalPrice方法返回给定软件集对象的(data)的总的价格 如果需要加入一个新的计算逻辑 只实现Visitor接口 并且将该类的实例传给data对象的accept方法就可以实现不同的逻辑方法了

点击小图看大图

我们可以看到通过访问者模式很好地解决了如何加入新的业务代码而无需重新改动 编译既有代码 但是该模式也不是没有缺点 如果在组合模式中结构加入新的子类的话会导致接口Visitor也跟着改动 导致所有Visitor的子类都需要实现新增的方法 因此这种访问者模式适合于结构不经常变动的情况

改进访问者模式

前面我们说到了如何使用Visitor模式及使用该模式后的优缺点 下面举具体的例子说明 假设现在客户提出了一个产品集(ProctSet)的概念 随着公司软件版本的增多 需要将同一个版本的产品(Proct)都放到产品集(ProctSet)中 而一个品牌包含有多个产品集 因为现在组合结构中增加了一个节点 所以在Visitor接口中也必须随之增加一个叫做visitProctSet的方法 并且会导致原有系统中所有已经实现了Visitor接口的类都需要重新实现并编译 用Java的反射机制可以解决这个问题

使用Java的Method Reflection机制实现访问者模式

首先我们需要改变一下Visitor接口 接口名叫做ReflectionVisitor 如下所示

    public interface ReflectionVisitor{ /** *定义了一个访问节点的方法 *@paramsofareComposite */ public void visitSofareComposite( Object sofareComposite); }

在现在的接口的方法里 能接受任意的对象(参数是Object)

下面实现接口ReflectionVisitor 名叫ReflectionVisitorImpl 代码如下所示

    public class ReflectionVisitorImpl implements ReflectionVisitor{ public void visitSofareComposite( Object sofareComposite){ //判断是否是null if (sofareComposite== null ){ throw new NullPointerException ( Thevisitnodeshouldnotbenull! ); } //组装class数组 即调用动态方法的时候参数的类型 Class []classes= new Class []{sofareComposite getClass()}; //组装与class数组相对应的值 Object []objects= new Object []{sofareComposite}; try { //查找visit方法 Methodm=getClass() getMethod( visit classes); //调用该方法 m invoke( this objects); } catch ( NoSuchMethodException e){ //没有找到相应的方法 System out println( : +sofareComposite getClass()); } catch ( Exception e){ //发生了别的异常 System out println( ); e printStackTrace(); } } }

这段代码首先判断传入的对象是否是空指针 然后创建class数组和object数组 然后用getMethod方法取得方法名是 visit 方法的参数是 对象sofareComposite对应的类 的方法 最后调用该方法 调用该方法的时候可能会发生NoSuchMethodException异常 发生这个异常就表明它的子类或者当前类中没有与参数中传入相对应的visit方法

下面再来写新版本Visitor类 扩展刚写好的那个ReflectionVisitorImpl类 名叫 如下所示

    public class extends ReflectionVisitorImpl{ private double totalPrice; public void visit(Proctproct){ totalPrice+=proct getPrice(); } public void visit(SofareSetsofareSet){ System out println( Nopriceforsofareset ); } public double getTotalPrice(){ return totalPrice; } }
代码中声明了两个visit方法(因为在类ReflectionVisitorImpl中 查找名为visit 参数与传进去的对象匹配的的方法) 一个是给Proct的 另外一个是给SofareSet的 在这里SofareSet中并没有价格 只需当前的对象是类Proct的实例的时候将价格累加即可 如果在组合模式的结构中增加了新的类 只需要在ReflectionVisitorImpl的扩展类中声明一个visit方法 该方法的参数是新增加的类 对于文中的例子 只需增加下面的一个方法
    public void visit(ProctSetproctSet){ //实现的代码 }

在组合结构的接口SofareComponent中改一下accept方法 参数是修改后的Visitor接口 如下所示

public void accept(ReflectionVisitor visitor);

由于在类SofareSet Brand和ProctSet中实现上面accept方法的代码都一样 因此把代码抽象到上层共有的抽象类AbsSofareComposite中 如下所示

    public void accept(ReflectionVisitorvisitor){ visitor visitSofareComposite( this ); Iteratorit=erator(); while (it hasNext()){ SofareComponentponent=(SofareComponent)it next(); //递归调用子对象的accept方法 ponent accept(visitor); } }
现在如果想在外面要调用的话 代码如下所示(在本文的例子 test business SofareManager中可以找到这段代码)
    //建立一个新的Visitor对象 reflectionVisitor = new (); //将该visitor对象传到结构中 data accept(reflectionVisitor); //调用visitor对象的getTotalPrice()方法就返回了总价格 double price=reflectionVisitor getTotalPrice();

另外由于没有实现Brand类的visit方法 在组合结构遍历到Brand的节点的时候会抛出NoSuchMethodException异常 就是没有关于该节点方法的实现 在当前的程序中会打印出一句话

You did not implement the visit method for class:class test entity Brand

如果运行程序时发生了别的异常 请参见相应的Java API文档

在现在的改进后的访问者模式中 如果在组合的结构中新增或删除节点并不会对已经实现了的Visitor产生任何影响 如果新增了业务方法 只需扩展类ReflectionVisitorImpl就可以了 因此很好地解决了访问者模式的问题

改进访问者模式实现与既有代码对接

到现在为止 改进后的访问者模式好像已经很好地解决了所有出现的问题 但是考虑到有下面的这种情况 现在需要写一个JSP的标签库(TagLib) 这个标签库还必须具有Visitor的功能(就是需要有遍历节点的功能) 可以将节点的内容根据需要打印到HTML页面中 由于标签本身需要继承相应的类(如TagSupport) 如果继续使用上面提供的方法将无法实现 因为Java不允许多重继承 不过我们可以将原有ReflectionVisitorImpl的代码再改进一下以解决这种情况 新的Visitor的实现类叫NewReflectionVisitorImpl 代码如下所示

    public class NewReflectionVisitorImpl implements ReflectionVisitor{ //实现visit方法的类 private Object targetObject; //构造方法 传入实现了visit方法的类 public NewReflectionVisitorImpl( Object targetObject){ if (targetObject== null ) throw new NullPointerException ( ! ); this targetObject=targetObject; } public void visitSofareComposite( Object sofareComposite){ //……与上个例子相同 try { //从目标的对象中查找visit方法 Methodm=targetObject getClass() getMethod( visit classes); //调用该方法 m invoke(targetObject objects); } catch ( NoSuchMethodException e){ //……与上个例子相同 } catch ( Exception e){ //……与上个例子相同 } } }
该类的实现与上面的实现差不多 多了一个构造函数 在该构造函数的参数中传入实现了visit方法的类 并且维护了指向该类的一个引用 另外最重要的地方是下面的两行代码
    //从目标的对象中查找visit方法 Methodm=targetObject getClass() getMethod( visit classes); //调用该方法 m invoke(targetObject objects);

本来的代码中从本身的类及其子类中查找visit方法 而现在是从维护的目标类中查找visit方法

现在需要写Tag类 这个类扩展了TagSupport类 如下所示(为说明的方便 随本文的例子提供了一个模拟的TagSupport类)

    public class MyTag extends TagSupport{ = null ; private double totalPrice= ; public int doEngTag(){ //创建一个visitor对象 并且将本身传入visitor对象中 ReflectionVisitorvisitor= new NewReflectionVisitorImpl( this ); //遍历结构 sofareComponent accept(visitor); //打印出价格 out println(totalPrice); return ; } //实现了针对Proct的visit方法 public void visit(Proctproct){ totalPrice+=proct getPrice(); } public void visit(Brandbrand){ out println(brand getId()+brand getDescription()); } //别的代码请参见随本文带的源程序 …… }
如果想测试上面写的那段代码 (在本文的例子 test business SofareManager中可以找到这段代码))如下所示
    //getMockData()方法返回数据 SofareComponentdata=getMockData(); MyTagmyTag= new MyTag(); myTag setSofareComponent(data); //计算总价格 并打印出来 myTag doEngTag();

可以看到通过Java的反射机制很好地解决了多重继承的问题 使该访问者模式能够更好地应用于你的应用中 另外可以看到 那些visit方法所在的类已经不是实现了接口ReflectionVisitor 可以说是访问者模式在Java语言的支持下的一种特殊实现

如果担心引入类反射机制后带来的效率问题 你可以将Method对象通过某种方式缓冲起来 这样不会每次从传入的对象中找visit方法 可以部分地提高效率

结论

lishixin/Article/program/Java/gj/201311/11152

热点内容
python中cmp 发布:2025-08-16 23:47:44 浏览:598
java静态单例 发布:2025-08-16 23:34:52 浏览:329
平板拷贝如何缓存 发布:2025-08-16 23:19:05 浏览:601
缤越混动有哪些配置 发布:2025-08-16 23:17:57 浏览:249
删除linux文件后 发布:2025-08-16 23:09:04 浏览:649
采访时的采访问题 发布:2025-08-16 23:07:27 浏览:110
电脑客户端登录服务器怎么清除 发布:2025-08-16 22:55:46 浏览:527
压缩小木条 发布:2025-08-16 22:55:41 浏览:22
存款利率算法 发布:2025-08-16 22:48:44 浏览:588
php开发api接口 发布:2025-08-16 22:47:48 浏览:839