冰河

正式启用新域名binghe.org

Posted by 冰河 at 22:59 10 Responses » 14,727 Views
122010

其实一直想使用binghe的域名,无奈binghe.com、net、org和cn都被人注册了。后来想注册icehe域名,可是icehe.com和net同样被人注册了。于是注册了icyhe.com。今天无意查询whois,发现binghe.org未被注册,于是在Godaddy没有优惠的情况下,花了7.67$注册了这个域名。

接下来就是更换域名了。

首先按照原来域名的设置对新域名进行解析。因为两个域名绑定在同一空间,所以没有转移任何博客文件,只是修改了博客设置,然后用如下SQL语句将数据库中的链接进行了替换:

//把emlog_blog表里content,即全文的字段内容为icyhe.com的全部改为binghe.org。

update emlog_blog set content=REPLACE(content,’icyhe.com’,'binghe.org’)

//把emlog_blog表里excerpt,即摘要的字段内容为icyhe.com的全部改为binghe.org。

update emlog_blog set excerpt=REPLACE(excerpt,’icyhe.com’,'binghe.org’)

然后根据Google管理员工具的提示,对原有的域名进行301重定向。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^icyhe.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.icyhe.com$
RewriteRule ^(.*)$ http://www.binghe.org/$1 [R=301,L]

最后就是通知友情博客更新友情链接了,这是一个繁琐的苦力活。

最后不免唠叨几句:好域名都让猪拱了。上面几个被人占的域名,不是在域名投资商手里,就是个人闲置着。好像只有icehe.net在用。

122010

在http://blankcn.com/life/google-pen-test.html看到的,据说是Google2011校招笔试题。题目是这样的:

现在北京有一套房子,价格200万,假设房价每年上涨10%,一个软件工程师每年固定能赚40万。如果他想买这套房子,不贷款,不涨工资,没有其他收入,每年不吃不喝不消费,那么他需要几年才能攒够钱买这套房子?
A, 5年
B, 7年
C, 8年
D, 9年
E, 永远买不起

Continue reading »

首先说下Struts中的<html:reset>标签,对应于html中的<input type=”button” />。虽然都是重置按钮,但是它们的功能是不一样的,更确切的说是效果是不一样的。html中的重置按钮很简单,就是将form中的文本框、选择框中的内容清空,当然你也可以自己定义点击事件。

Struts中的<html:reset>标签是将form中的元素重置为当前值。什么是当前值?这里就要用到面向对象的思想了。每个jsp中的form是对应于后台的一个form类(应该是该类的一个对象),这在Struts的配置文件中已经写明了。如果用对象的观点去理解当前值,就很容易了。比如User类的对象myuser有name属性,当前赋值是“张三”,你想把它修改成“李四”,输入“李四“之后你点击了reset而不是submit,那么jsp表单中对应显示会变成”张三“。form被重置为当前值,而不是默认值,即类实例化为对象时的值,说白了就是代码中的默认值。所以具体用那个重置按钮应该根据实际情况决定。

再说下Struts中的<html:>标签捕获问题。一般我们使用Struts的html标签时只有property和value属性,这里的property属性即对应于普通html中的name属性,可以使用document.getElementsByName()获得。但是这个方法返回的是数组,如果想使用document.getElementById(),就必须给Struts中的<html:>标签天添加styleId属性,例如:

<html:password styleId=”password” property=”password”  />

这样我们就可以使用document.getElementById(“password”)获得这个元素,然后对value进行赋值。

《卡拉狄加》观后感

Posted by 冰河 at 14:15 2 Responses » 25,793 Views
302010

最近从六维上下了置顶的美国科幻剧《太空堡垒卡拉狄加》,看了迷你剧之后觉得很符合我的口味,打算把全四季看完终于看完了。2集迷你剧是先导剧,介绍了全四季的故事背景,后面的每集40多分钟,比以前看的《老友记》和《生活大爆炸》都要长。说实话这部美剧吸引我的地方除了跌宕起伏的故事情节,科幻+战争题材外,就是卡拉狄加里个性鲜明的角色。

以下是我对几个重要角色的看法,顺序有点乱,也不全:

比尔·阿达玛(老头子):战舰卡拉狄加的指挥官。我最喜欢的角色。个人感觉他思想觉悟很高,具有敏锐的洞察力,做事英明果断。他做了许多艰难的抉 择,但是不会后悔。另外他懂得安定人心,维护舰队的团结,因此也很有威望。

劳拉·罗斯林:原来的教育部长,后来宣誓成为总统。她的聪明才智就不用说了,但是我觉得她最突出的莫过于其政治手腕。里面有句话说的很准确:她20多年来都在研究政治。

李·阿玛达(阿波罗):阿达玛的儿子,空军指挥官,空战能力很突出。而且很有思想,有好几次公开反抗老头子。我觉得他最大的弱点莫过于坚持做对的事情,正如罗斯林说的,right不一定是smart。星巴儿是他哥哥(弟弟?)的老婆,可是和他关系理不清。阿波罗的老婆是Dee

卡拉・瑟瑞丝(星巴儿):空军飞行员,空战能力突出,脾气火爆,有点暴力。突出特定是想法独特,因此经常出其不意,出色完成任务。最后她的战机坠毁在地球上,她死而复生,谁知道她到底是什么。。。

索尔(泰上校):大副,脾气火爆,思想有点简单,他老婆艾伦绝对是扫把星。最后结果他和艾伦居然都是The Final Five!在新卡布里卡他是反抗军的领袖。

盖尤斯・波塔尔:副总统,后来在新卡布里卡当了一阵傀儡总统。天才科学家,感觉有些懦弱,老是被别人利用。然后就是自私,欲望太强了。阿波罗说的很对,他一生所作的所有事都是为了自己的欲望,当然除了最后一件事:选择和阿玛达一起去解救Hera。

莎伦(布玛):赛隆人,朝老头子开了2枪。被打死后一直在基地之星上呆着,后来她站在了卡维尔一边,但最后她做出了自己的抉择。

莎伦(雅典娜):之所以把莎伦的两个躯体分开,是因为他们扮演着重要但截然不同的角色。她没有像其他赛隆人一样被处死,但是也够受罪的。到现在我也不知道她活着到底是是为了什么?爱情?孩子?还是像阿达玛说的“人类和赛隆人共同的特点—求生的欲望”?我觉得最后应该不是最后第三种理由,因为她死了思想会被下载到新的躯体里,得到重生。我很喜欢她,毕竟是个韩裔,符合我的审美。雅典娜选择了自己的路,她宣誓成为一名officer,得到了阿玛达的信任,当然也不负众望。

卡尔·阿格森(西洛):绝对的主角。他的角色后往后越重要。第一次出场是他用自己替换波塔尔,让他上了猛禽离开了卡布里卡。这样人很有原则和信念。 对爱情坚持不懈,也因此打动了雅典娜。他和雅典娜的结合是赛隆人和人类从没有接触,完全对抗到最后合作的一个转折。

格伦・泰罗尔(军士长):和布玛有一腿,老头子对他一直很信任。后来和凯莉好了。在新卡布里卡是反抗军的领袖之一。

拉姆金:盖尤斯被审判时的辩护律师,戏份不多,很专业的律师和政客。

凯恩:帕加索斯指挥官。从她出现我就觉得是个威胁。还好意外死了。

汤姆・查莱克:以前是恐怖分子,追求所谓的民主,当过副总统,后来和波塔尔发动了政变。最后看来他骨子里一直就是恐怖分子。

菲里克斯·盖塔:很优秀的舰队成员,可惜最后发动了政变,让卡拉狄加号损失惨重,感觉他被查莱克利用了。最后被阿达玛处决。

比利:总统助手,我觉得他最有可能成为未来的总统。剧情里似乎也有暗示,可惜在一次解救行动中为了Dualla死了。

凯莉:一直不喜欢他,最后怀的还不是军士长的孩子。

医生科特尔,星芭儿的男友安德斯,盖尤斯喜欢的那个女的我忘记叫什么了卡布里卡6号还有李奥本·科诺,还有其他的一些人,就暂时不写了,等想起来再补上吧

终于把卡拉狄加看完了,有种如释重负的感觉。这部美剧对人性的揭露可以说是很彻底。

参考链接:http://bbs.flyine.net/viewthread.php?tid=31791

关于如何在Struts下使用jsp图片验证码,请参考另外一篇文章《jsp图片验证码》。其原理就是随机生成4位验证码,将其写入Session,同时生成图片显示出来。这样就出问题了。如果同时打开多个带验证码页面,那么只有最后的页面验证码会通过验证,其他的均提示验证码错误。

其实这个问题当初添加验证码功能的时候就知道会有,但是一直没改,因为很少有人打开多个登录页面,就算是出错了刷新一次就能解决。最近负责项目的师兄盯住这个问题了,所以不得不改改。

这个错误的关键代码在于:

request.getSession().setAttribute(“checkcode”,sRand);

也就是说每次生成验证码都存在Session的checkcode变量里。这样每次生成的验证码都会覆盖上次的值。

网上有许多解决方案,其中一种是给验证码加时间戳。

在将验证码存入Session时使用以下代码:

String timestamp=(String) request.getQueryString();//我这里就一个参数
request.getSession().setAttribute(“checkcode”+timestamp,sRand);

其实原理很简单,就是加入时间戳,把存入Session的变量区别开来。

使用的时候在表单里加入:

<input id=”timestamp” type=”hidden” name=”timestamp” value=”">

同时写一个图片的刷新脚本

function loadimage(){
var timestamp=(new Date()).valueOf(); //timestamp.
document.getElementById(“randImage”).src = “<%=request.getContextPath()%>/image.jsp?”+timestamp;
document.getElementById(“timestamp”).value = timestamp;
}

服务器端直接在form的validate()里使用如下代码取出checkcode即可。

String checkcode= (String) request.getSession().getAttribute(“checkcode”+timestamp);

用完记得顺手清理session:

request.getSession().removeAttribute(“checkcode”+timestamp);

参考链接:http://blog.kongxz.com/2010/01/solution-to-verifying-code-in-multiple-instances/

今天同学发来一道题,是关于信息检索方向的。仔细一问是他师兄参加搜狐网站的远程笔试题的一道大题。题目如下:

1. 背景:搜索引擎会根据用户搜索的关键字提供对应的广告,一般是通过统计学习实现(不限方法)。
2. 要求:附件中的文本文件已经分好类了,请从每个类别中随机挑选90%文件做为训练集,然后将剩余文件分类并输出分类的正确率。

Continue reading »

Struts的LOGIC标签库

Posted by 冰河 at 19:37 3 Responses » 24,988 Views
122010

1.  logic:empty

该标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:

1)当Java对象为null时;

2)当String对象为”"时;

3)当java.util.Collection对象中的isEmpty()返回true时;

4)当java.util.Map对象中的isEmpty()返回true时。
eg.
<logic:empty   name=”userList”>

</logic:empty>
该句等同于:
if   (userList.isEmpty())   {

}

2.  logic:notEmpty
该标签的应用正好和logic:empty标签相反,略。
3. logic:equal
该标签为等于比较符。
eg1. 比较用户的状态属性是否1,若为1,输出”启用”;
<logic:equal   name=”user”   property=”state”   value=”1″>
启用
</logic:equal>
eg2. 如果上例中的value值是动态获得的,例如需要通过bean:write输出,因struts不支持标签嵌套,可采用EL来解决该问题。
<logic:equal   name=”charge”   property=”num”   value=”${business.num}”>
……
</logic:equal>

4. logic:notEqual
该标签意义 与logic:equal相反,使用方法类似,略。
5. logic:forward
该标签用于实现页面导向,查找配置文件的全局forward。
eg. <logic:forward name=”index”/>
6. logic:greaterEqual
为大于等于比较符。
eg. 当某学生的成绩大于等于90时,输出“优秀”:
<logic:greaterEqual name=”student” property=”score” value=”90″>
优 秀
</logic:greaterEqual>
7. logic:greaterThan
此为大于比较符,使用方法同logic:greaterEqual,略;
8. logic:lessEqual
此为小于等于比较符,使用方法同logic:greaterEqual,略;
9. logic:lessThan
此为小于比较符,使用方法同 logic:greaterEqual,略;
10. logic:match
此 标签比较对象是否相等;
eg1. 检查在request范围内的name属性是否包含”amigo”串:
<logic:match name=”name” scope=”request” value=”amigo”>
<bean:write name=”name”/>中有一个“amigo”串。
</logic:match>
eg2. 检查在request范围内的name属性是否已“amigo”作为起始字符串:
<logic:match name=”name” scope=”request” value=”amigo” location=”start”>
<bean:write name=”name”/>以“amigo”作为起始字符串。
</logic:match>
eg3.
<logic:match header=”user-agent” value=”Windows”>
你运行的是Windows系统
</logic:match>
11.  logic:notMatch

此标签用于比较对象是否不相同,与logic:match意义相反,使用方法类似,略。
12. logic:messagePresent
该标签用于判断ActionMessages/ActionErrors对象是否存在;
eg. 如果存在error信息,将其全部输出:
<logic:messagePresent property=”error”>
<html:messages property=”error” id=”errMsg” >
<bean:write name=”errMsg”/>
</html:messages>
</logic:messagePresent >
13. logic:messagesNotPresent
该标签用于判断ActionMessages/ActionErrors对象是否不存在,使用方法与logic:messagePresent类似,略
14. logic:present
此标签用于判断request对象传递参数是否存在。
eg1. user对象和它的name属性在request中都存在时,输出相应字符串:
<logic:present name=”user” property=”name”>
user对象和该对象的name属性都 存在
</logic:present>
eg2. 若有一个名字为“user”的JavaBean,输出对应字符串:
<logic:present name=”user” >
有一个名字为“user”的JavaBean。
</logic:present>
eg3.
<logic:present header=”user-agent”>
we got a user-agent header.
</logic:present>
15. logic:notPresent
此标签用于判断request对象传递参数是否不存在,意义与了logic:present相反,使用方法类似,略。
16. logic:redirect
该标签用于实现页面转向,可传递参数。
eg1. <logic:redirect href=”http://www.abc.com”/>

17. logic:iterator
用于显示列表为collection的值(List ,ArrayList,HashMap等)。
eg1. 逐一输出用户列表(userlList)中用户的姓名:
<logic:iterate  id=”user” name=”userList”>
<bean:write name=”user” property=”name”/><br>
</logic:iterate>
eg2. 从用户列表中输出从1开始的两个用户的姓名
<logic:iterate  id=”user” name=”userList” indexId=”index”  offset=”1″ length=”2″>
<bean:write name=”index”/>.<bean:write name=”user” property=”name”/><br>
</logic:iterate>
eg3. logic:iterator标签的嵌套举例
<logic:iterate id=”user” indexId=”index” name=”userList”>
<bean:write name=”index”/>. <bean:write name=”user” property=”name”/><br>
<logic:iterate id=”address” name=”user” property=”addressList” length=”3″ offset=”1″>
<bean:write name=”address”/><br>
</logic:iterate>
</logic:iterate>

082010

博客从从国外搬到了国内。优点是速度快了,缺点原来主机带的ssh不能继续用了。原来是用的myentunel+ssh提供socket5代理,现在只好用免费的GAppProxy了。GAppProxy提供的是http代理,那具体这两个代理有什么不同呢?

http代理服务器sock5代理服务器是代理服务器的两种类型,采 用不同的网络协议,是代理服务器的两种基本形式。
以下为http代理服务器和sock5代理服务器的区别与定义:
SOCK5代理服务器 :
被代理端与代理服务器通过“SOCK4/5代理协议”进行通迅(具体协 议内容可查看RFC文档)。SOCK4代理协议可以说是对HTTP代理协议的加强,它不仅是对HTTP协议进行代理,而是对所有向外 的连接进行代理,是没有协议限制的。也就是说,只要你向外连接,它就给你代理,并不管你用的是什么协议,极大的弥补了HTTP代理协议的不足, 使得很多在HTTP代理情况下无法使用的网络软件都可以使用了。(例如:OICQ、MSN等软件 )SOCK5代理协议又对前一版进 行了修改,增加了支持UDP代理及身份验证的功能。它不是“协议代理”,所以它会对所有的连接进行代理,而不管用的是什么协议。
采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器。Socks是个电路级的底层网关,是 DavidKoblas在1990年开发的,此后就一直作为Internet RFC标准的开放标准。Socks 不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks 代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层代理要快得多。它通常绑 定在代理服务器的1080端口上。如果您在企业网或校园网上,需要透过防火墙或通过代理服务器访问 Internet就可能需要使用SOCKS。一般情况下,对于拨号上网用户都不需要使用它。注意,浏览网页时常用的代理服务器通常是专门的http代理, 它和SOCKS是不同的。因此,您能浏览网页不等于 您一定可以通过SOCKS访问Internet。常用的防火墙,或代理软件都支持SOCKS,但需要其管理员打开这一功能。如果您不确信您是否需要 SOCKS或是否有SOCKS可用,请与您的网络管理员联系。为了使用socks,您需要了解一下内容:
① SOCKS服务器的IP地址
② SOCKS服务所在的端口
③ 这个SOCKS服务是否需要用户认证?如果需要,您要向您的网络管理员申请一个用户和口令
知道了上述信息,您就可以把这些信息填入“网络配置”中,或者在第一次登记时填入,您就可以使用socks代理了。
在实际应用中 SOCKS代理可以用作为:电子邮件、新闻组软件、网络传呼ICQ、网络聊天MIRC和使用代理服务器上联众打游戏等等各种游戏应用软件当中。

HTTP 代理服务器:
同上利用HTTP协议通讯的方式,HTTP协议即超文本传输协议,是Internet上进行信息传输时使用 最为广泛的一种非常简单的通信协议。部分局域网对协议进行了限制,只允许用户通过HTTP协议访问外部网站

www对于每一个上网的人都再熟悉不过了,www连接请求就是采用的http协议,所以我们在浏览网页,下载数据(也可采用ftp协议)是就是 用http代理。它通常绑定在代理服务器的80、3128、8080等端口上。
除http代理服务器和sock5代理服务器之外,别的类型的代理服务器还有:sock4,ftp等。
总体来说,socket5代理服务器比http代理强大的多。
052010

最近找了个兼职,是维护一个团购网站。老板想抓取其他团购网站的的团购内容。因为许多团购网站本身提供api,所以我只要解析出api返回的xml就行了。下面的php下一种简单的xml处理方法。

1 SimpleXML 简介
要处理XML 文件,有两种传统的处理思路:SAX 和DOM。SAX 基于事件触发机制,
对XML 文件进行一次扫描,完成要进行的处理;DOM 则将整个XML 文件构造为一棵DOM
树,通过对DOM 树的遍历完成处理。这两种方法各有优缺点,SAX 的处理思路相对抽象,
DOM 的处理过程相对烦琐,都不很适合新手的入门。
PHP5 推出了一套新的XML 处理函数,即SimpleXML。名如其实,SimpleXML 本身小
巧精干,只提供了少量的几个方法函数,但用它处理起XML 文件功能却非常强大,操作也
非常的简单。
首先,它提供有简单的函数可以从XML 文档、字符串、或DOM 对象上直接构造出
SimpleXMLElement 对象;其次,SimpleXMLElement 提供有简单的方法可以进行属性、子节
点、和XPath 的操作;然而,SimpleXML 最简单的地方是,它提供有使用标准对象的属性和
对象迭代器进行节点操作的方法,这一处理思路使得用PHP 对XML 文档的处理得到了极大
的简化。
2 SimpleXML 入门示例
下面我们通过一些小的代码片段,稍微了解一下SimpleXML 的强大和简洁。为举例方便,
我们使用一个Messages.xml 文件,里面包含这样一段XML 代码:
Messages.xml

<?xml version=’1.0′ standalone=’yes’?>
<Messages>
<msg id=’1′>
<title>This is Title</title>
<content>Here is Content</content>
<time>2008-03-20 21:50:23</time>
<reply id=’11′>reply 1</reply>
<reply id=’12′>reply 2</reply>
</msg>
</Messages>
这是一篇保存有留言信息的XML 文档,每条信息包括属性id,子节点title、content、time
以及若干条对于它的回复信息,每条回复包括属性id 及回复的内容。
用SimpleXML 处理并输出此XML 文档内容的过程以及方法如下。
(1) 构造SimpleXMLElement 对象
代码片断
$xml = simplexml_load_file(‘Messages.xml’);
如果这段xml 已经被读入到一个字符串$messages 中,则可以使用如下语句:
代码片断
$xml = simplexml_load_string(‘Messages.xml’);
(2)输出留言1 的标题
代码片断
//可以使用属性的方式访问子节点,通过节点的标签名可直接得到节点的内容
echo $xml->msg->title;
(3)输出留言1 的第一条回复信息
代码片断
//同级别的多个同名节点自动成为数组,可以通过索引下标访问其内容
echo $xml->msg->reply[0];
(4)输出留言的id
代码片断
//节点的属性与值被封装成为关联数组的键与值
echo $xml->msg['id'];
(5)输出第二条回复的id
代码片断
//成为二维数组,第一维表示节点,第二维表示属性
echo $xml->msg->reply[1][ 'id'];
(6)依次输出所有回复的id
代码片断
//使用 foreach 对同名节点进行遍历
foreach ($xml->msg->reply as $reply){
echo $reply['id'];
}
(7)使用XPath 检索所有的回复信息
代码片断
//xpath 方法直接检索定位(//表示任意深度)
foreach ($xml->xpath(‘//reply’) as $reply){
echo $reply.’<br>’;
}
(8)遍历留言1 所有的子节点
代码片断
//children 方法得到所有子节点
foreach ($xml->msg->children() as $field){
echo $field.’<br>’;
}
(9)重新设置留言1 的发布时间
代码片断
//直接设置属性
$xml->msg->time = ’2008-03-21 00:53:12′;
(10)设置回复2 的id 属性
代码片断
//设置管理数组的值
$xml->msg->reply[1]['id'] = ’222′;
(11)新增一个描述消息作者的字段
代码片断
//直接设置属性
$xml->msg->author = ‘zhangsan’;
(12)将消息的作者保存为属性
代码片断
//设置关联数组的key
$xml->msg['author'] = ‘zhangsan’;
(13)重新保存对象到文件
代码片断
//保存
$xml->asXML(‘MessagesNew.xml’);

附录:

PHP SimpleXML 函数

PHP:指示支持该函数的最早的 PHP 版本。

函数 描述 PHP
__construct() 创建一个新的 SimpleXMLElement 对象。 5
addAttribute() 给 SimpleXML 元素添加一个属性。 5
addChild() 给 SimpleXML 元素添加一个子元素。 5
asXML() 从 SimpleXML 元素获取 XML 字符串。 5
attributes() 获取 SimpleXML 元素的属性。 5
children() 获取指定节点的子。 5
getDocNamespaces() 获取 XML 文档的命名空间。 5
getName() 获取 SimpleXML 元素的名称。 5
getNamespaces() 从 XML 数据获取命名空间。 5
registerXPathNamespace() 为下一次 XPath 查询创建命名空间语境。 5
simplexml_import_dom() 从 DOM 节点获取 SimpleXMLElement 对象。 5
simplexml_load_file() 从 XML 文档获取 SimpleXMLElement 对象。 5
simplexml_load_string() 从 XML 字符串获取 SimpleXMLElement 对象。 5
xpath() 对 XML 数据运行 XPath 查询。 5
312010

这个方法比上一篇《用.htaccess解决Google Apps的ghs.google.com无可用IP》更通用,因为不需要.htaccess支持,但是我个人感觉比较麻烦,不好管理。

因为ghs.google.com基本是不可用的,所以mail.xxx.com、docs.xxx.com、calendar.xxx.com等 也是基本不能用的。以前写过一篇《用.htaccess解决Google Apps的ghs.google.com无可用IP》来解决这个问题,但 不是每个空间都支持.htaceess,所以这个方法不能通用。今天突然想到用HTML转跳,经测试效果很好,实现起来也很简单,现在我就用HTML转跳 实现访问mail.todaym.com、calendar.todaym.com、contacts.todaym.com、 docs.todaym.com,你可以试试输入这几个地址,是不是成功转跳到Google Apps了?下面是实现方法。

1、在你的域名管理处添加想要的二级域名,并指向你空间的IP。

2、你可能还需要在空间管理处添加二级域名,并指定二级域名的路径。如:添加了mail.todaym.com这个二级域名,指定的路径可以是 /www/mail/。

3、在二级域名指定文件夹里新建一个HTML文件,命名为index.html。

4、编辑index.html,里面内容为:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>Gmail</title>
</head>
<meta http-equiv=”refresh” content=”0; url=http://mail.google.com/a/todaym.com/”>
<body>
</body>
</html>

其中title处和url处根据自己的情况修改。

个人觉得这个方法比以前写的那个方法简单,关键是用HTML转跳这个方法是通用的。

© 2009 - 2024 冰河的博客