以买一根hdmi的的数据线为例,我去市场上采集到的数据:
1. 通州八里桥市场乐天玛特超市,二层东北角,电子器材附件区,只有一种,hdmi的数据线,68元/2M;
2. 乐天玛超市二层西头,一家知名品牌电器城,在卖电视的地方,hdmi数据线,有多种,最便宜的99元/1.5M
3. jd.com, suming.com电商,品种多样,低至 29元/2M.
以买一根hdmi的的数据线为例,我去市场上采集到的数据:
1. 通州八里桥市场乐天玛特超市,二层东北角,电子器材附件区,只有一种,hdmi的数据线,68元/2M;
2. 乐天玛超市二层西头,一家知名品牌电器城,在卖电视的地方,hdmi数据线,有多种,最便宜的99元/1.5M
3. jd.com, suming.com电商,品种多样,低至 29元/2M.
(养成中午写blog的习惯)
一直以来注意代码风格。
最早的时候使用Visual Basic时,没有花括号{},也不需要;,靠换行和缩进来控制逻辑,遇到复杂的事情时候很着急,及至后来开始深入到C, Java, Perl等语言时,才觉得还是有; 和{}更看着舒服些。
if( a == b)
{
c = d;
}
else
{
c = e;
}
或者, 即便在if后面只有一个选择时,也用{}把它兜住。
if(a == b){ c=e;}
后来,有阵子在SINA,读了一些PHP代码,发现它的风格大多是这样:
if(a == b){
c = d;
}else{
c = e;
}
非常紧凑,也清晰,但读起来觉得有些不舒服。
最近在梳理GWA2的代码时,发现如果将两者融合一下或者更好,折中的做法是
if(a == b){
c = d;
}
else{
e = f;
}
这样,看起来不至于太拥挤,也不至于太稀疏,貌似达到中庸之道了。
—-
于是也明白自己为何迟迟不用Python来写一些东西了。靠缩进和换行来控制逻辑的Visual Basic实在有阴影。
apache本身对虚拟主机支持较好。
resin对虚拟主机支持也较好。
ssl本身也支持基于虚拟主机的配置。
但如果将三者结合起来,困难或者问题要比想象中的多。
比如要实现 https://bizsft.com/a.jsp 寄宿在其他主机服务上,要做的改动分别是:
1. 在 apache的 vhost地方配置, conf/extra/httpd-vhosts.conf 里
<VirtualHost *:80>
ServerAdmin wadelau@ufqi.com
DocumentRoot “/www/bizsft”
ServerName bizsft.com
ServerAlias www.bizsft.com
</VirtualHost>
这样完成在Apache层面的vhost支持。
apache服务器需重启才能够生效,在restart之前最好使用
./apachectl configtest
来验证配置的正确性。
2. 在 resin的vhost里做相应的配置,以便于在bizsft.com下的jsp文件能够转交给resin做相应的处理,在resin的 conf/resin.xml 里,resin <cluster>标签下,配置
<host id=”bizsft.com” root-directory=”.”>
<web-app id=”/” root-directory=”/www/bizsft”/>
</host>
这样就完成了,bizsft.com/a.html 由apache解析,bizsft.com/a.jsp 又resin来负责解析。
resin.xml 被修改保存后,它的watchdog会侦测到文件尺寸的变动,进而触发resin本身重启以使得其生效。
3. 继续来配置基于bizsft.com的安全链接ssl,在 apache相应的ssl模块里,conf/extra/httpd-ssl.conf 里,在原来的基础上增配
NameVirtualHost *:443 # 这句如果已经有了不需再写
<VirtualHost _default_:443>
DocumentRoot “/www/bizsft”
ServerName bizsft.com:443
ServerAdmin wadelau@ufqi.com
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile “/www/conf/server-bizsft.crt”
SSLCertificateKeyFile “/www/conf/server-bizsft.key”
</VirtualHost>
同样需要重启apache才能够使得改动生效。这样就完成了对
https://bizsft.com/a.jsp
访问的支持,如果配上正确的ssl 证书,则在地址栏内会有绿色锁标记。
也可以自行生成一个ssl证书用于测试,主要步骤如下:
创建私钥,shell> openssl genrsa -out server.key 1024
生成公钥,shell> openssl req -new -key server.key -out server.csr
生成证书,shell> openssl x509 -days 3650 -req -in server.csr -signkey server.key -out server.crt
然后按上述配置到 conf/extra/httpd-ssl.conf 文件中去,详细参考:
http://blog.51yip.com/apachenginx/958.html
4. 综上,在虚拟主机中支持 .jsp 不常见,也即通常说的java虚拟主机不多,在虚拟主机中配置对ssl的支持的做法更是少有,但通过上述配置,可以完成这些任务。
所需要的是在三个地方都需要做相应的配置。
问题被描述为,在Apache httpd与resin集成的环境中,在rensin下的虚拟主机里,各种配置完好,可以访问.jsp文件,但却无法访问servlet文件,如userAction 或者 userAction.do 这样标记的路径。
通常情况下,在单主机的情况下,servlet-mapping既有全局性的在 resin 全局conf文件里,如 app-default.xml 或者 cluster-default.xml里,也有基于应用的在webapp/WEB-INF/web.xml里的。
在多虚拟主机的情况下,往往在 webapp/web.xml里的设置不起作用,如果是这样,就需要在resin的全局conf文件里做这样的配置。
其原因,导致能够解析.jsp文件,无法访问 servlet文件,是因为与Apache等前置服务器集成,直接访问 /aaBB 或者 /aaBB.do 等文件,直接被Apapche接收处理而没有转交到Resin,这样Resin也就无法获悉。
这就需要类似:
<servlet-mapping url-pattern=”*.do”
servlet-name=”resin-jsp”
default=”true”/>
这样的配置在resin的全局conf里,或者在项目的 webapp/WEB-INF/web.xml:
<servlet-mapping>
<servlet-name>resin-jsp</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
的设置。
搜狗浏览器算是比较良心的,提供了允许用户增加自定义搜索引擎的功能。
下面就截图介绍一下用户如何在搜狗浏览器中增加对NatureDNS的支持,如果是搜狗浏览器的开发人员看到,请参考开发人员版的“在浏览器中启用自然域名(NatureDNS)的方法[1]”。
修改设置的路径是:
工具 à 搜狗浏览器选项 à 搜索栏 à 添加
然后点击“添加”自定义的搜索引擎,然后选择“自定义项”,
在 显示名称 里 填入 NatureDNS 或者 NatDNS
在 搜索串 中填入 http://ufqi.com/naturedns/search?q=%s&c=gbk
点击保存后,回到前一个对话框,在 地址栏搜索 中选择下拉框中的 NatureDNS 或者 NatDNS,如下图
然后点 应用 , 确定, 保存退出。
然后就成了! 在地址栏内输入 -ufqi 试试吧!