Web
记录一些关于Web开发和应用方面的一些信息。
ANT自动化压缩合并JS/CSS和更改版本号
Jul 20th
最近做到了前端优化的一些工作,涉及到了自动化部署的问题。前端优化无非是雅虎的优化法则,不过如果想把优化法则加到自动化部署中去的话,下面的几种方法可以帮助你。
1、JS/CSS压缩脚本
<!-- 压缩JS,CSS -->
<target name="compress">
<apply executable="java" parallel="false" failonerror="true">
<fileset dir="${html-js}" includes="**/*.js" />
<arg line="-jar" />
<arg path="${yui-compressor}" />
<arg line="--charset utf-8" />
<srcfile />
<arg line="-o" />
<mapper type="glob" from="*.js" to="${webhtml-js}/*-min.js" />
<targetfile />
</apply>
<apply executable="java" parallel="false" failonerror="true">
<fileset dir="${html-css}" includes="**/*.css" />
<arg line="-jar" />
<arg path="${yui-compressor}" />
<arg line="--charset utf-8" />
<srcfile />
<arg line="-o" />
<mapper type="glob" from="*.css" to="${webhtml-css}/*-min.css" />
<targetfile />
</apply>
</target>
2、更新JSS/CSS版本号
<!-- 更新静态文件的版本号 -->
<target name="version">
<tstamp>
<format property="TIMESTAMP" pattern="yyyyMMddHHmmss" locale="en" />
</tstamp>
<loadfile property="svn.version" srcFile="./.svn/entries">
<filterchain>
<headfilter lines="1" skip="3" />
<deletecharacters chars="\n" />
</filterchain>
</loadfile>
<delete file="${webinf-ftl}/config.ftl"/>
<copy file="${ftl-app}/config.ftl" tofile="${webinf-ftl}/config.ftl" />
<replace file="${webinf-ftl}/config.ftl" token="$version$" value="${svn.version}" />
</target>
接下来就是合并JS/CSS文件
<!-- 合并静态文件 -->
<target name="js-concat">
<concat destfile="${webhtml-js}/jquery.js" encoding="utf-8" append="false">
<path path="${webhtml-js}/jquery.core-min.js" />
<path path="${webhtml-js}/jquery.cookie-min.js" />
<path path="${webhtml-js}/jquery.timeago-min.js" />
<path path="${webhtml-js}/jquery.utils-min.js" />
<path path="${webhtml-js}/jquery.watermarkinput-min.js" />
</concat>
</target>
HTTP 错误
May 28th
HTTP 400 – 请求无效
HTTP 401 – 未授权
HTTP 403 – 禁止访问
HTTP 404 – 无法找到文件
HTTP 405 – 资源被禁止
HTTP 406 – 无法接受
HTTP 407 – 要求代理身份验证
HTTP 410 – 永远不可用
HTTP 412 – 先决条件失败
HTTP 414 – 请求 – URI 太长
HTTP 500 – 内部服务器错误
HTTP 501 – 未实现
HTTP 502 – 网关错误
当负载过高时重启Apache
Nov 23rd
最近半年碰到了几次,由于“蜘蛛”导致机器挂掉了,所以想出了这个方法,等系统负载过高的情况下,直接重启Apache。这就是Twitter提倡的那样,等进程杀死你之前,你先杀死他(原话不记得了)。其实这种方法早就在业界使用了。
来吧,看看我写的脚本。
checkload.sh
#!/bin/sh
TOP_SYS_LOAD_NUM=5
SYS_LOAD_NUM=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`
echo $(date +"%y-%m-%d") `uptime`
if [ `echo "$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ]
then
echo "##" $(date +"%y-%m-%d %H:%M:%S") "pkill httpd" `ps -ef | grep httpd | wc -l`
pkill httpd
sleep 10
for i in 1 2 3
do
if [ `pgrep httpd | wc -l` -le 0 ]
then
/home/app/httpd/bin/apachectl start
sleep 30
echo "##" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l`
fi
done
else
if [ `pgrep httpd | wc -l` -le 0 ]
then
/home/app/httpd/bin/apachectl start
sleep 30
echo "##" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l`
fi
fi
然后在crontab里增加定时执行的命令
*/2 * * * * (/root/checkload.sh >>/root/checkload.log)
每两分钟检查一次系统负载。
使用Google的Ajax库API
Aug 12th
使用这个的一个好处是使用了Google的CDN,这对于贫穷的站长来说,实在是太好了。
<script src="http://www.google.com/jsapi"></script>
<script>
google.load("jquery", "1.3.1");
google.load("jqueryui", "1.5.3");
</script>
同时在介绍一下Google的代码园地很不错的一个东西,有很多的Google开发的API可以使用。
让你的用户感受特别
Aug 10th
原文:Web Directions UX: Making Your Users Feel Special
http://www.sitepoint.com/blogs/2008/05/16/web-directions-ux-making-your-users-feel-special/
1. First impressions count
2. Attention to detail gets noticed
3. Personalisation and customisation matters
4. Dripfeed your information
5. Take care of the mundane
6. Make it fun
7. Feedback is important
8. Recommendations are powerful
9. Users love competitions
马斯洛的需求层次”web”体系
马斯洛的需求层次体系当每一层次需求得到满足时,人们便会移至上一层次
1. functional 功能
2. reliable 可靠
3. usable 可用
4. convenient 便捷
5. pleasurable 愉悦
6. meaningful 意义
参考文献:
http://blog.youmila.com/?p=349【Web方向用户体验之”让你的用户感受特别”】
Eclipse中高亮
Aug 7th
不知道为什么,Eclipse的编辑器的高亮不见了,很不方便啊。最后搜索找到一篇文章,介绍了怎么重新启动高亮。
其恢复方式如下:
选择:windows-> preferences->java->Editor->Mark Occurences
我是碰到过两次了,这次写个日志记录下吧。
参考文章:
http://blog.csdn.net/ccsuliuxing/archive/2007/04/16/1566583.aspx
Windows环境下的项目环境搭建(Tomcat+Apache+Memcached+ActiveMQ+MySQL)
Jul 26th
首先到 http://labs.xiaonei.com/apache-mirror/ 下载相关的软件。
http://labs.xiaonei.com/apache-mirror/activemq/apache-activemq/5.2.0/apache-activemq-5.2.0-bin.zip 这个软件现在不用,不过以
后会用的。
http://labs.xiaonei.com/apache-mirror/httpd/binaries/win32/apache_2.2.11-win32-x86-no_ssl.msi
http://labs.xiaonei.com/apache-mirror/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.exe
http://labs.xiaonei.com/apache-mirror/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28/mod_jk-1.2.28-httpd-2.2.3.so
http://www.splinedancer.com/memcached-win32/memcached-1.2.4-Win32-Preview-20080309_bin.zip 这个软件以后也会用
现在这几个软件被安装在以下目录
D:\Program Files\Apache Software Foundation\Tomcat 6.0
D:\Program Files\Apache Software Foundation\Apache2.2
D:\Program Files\Apache Software Foundation\apache-activemq-5.2.0
首先把mod_jk-1.2.28-httpd-2.2.3.so文件复制到
D:\Program Files\Apache Software Foundation\Apache2.2\modules
改名为mod_jk.so
再在
D:\Program Files\Apache Software Foundation\Apache2.2\conf
创建文件
workers.properties
内容为
workers.tomcat_home=D:\Program Files\Apache Software Foundation\Tomcat 6.0
workers.java_home=D:\Program Files\Java\jdk
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
然后在文件D:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf 找到
LoadModule rewrite_module modules/mod_rewrite.so
去掉前面的#号
再添加
LoadModule jk_module modules/mod_jk.so
在文件的最后添加
JkWorkersFile “D:\Program Files\Apache Software Foundation\Apache2.2\conf\workers.properties”
JkLogFile “D:\Program Files\Apache Software Foundation\Apache2.2\logs\mod_jk2.log”
JkLogLevel inf
<VirtualHost *:80> DocumentRoot "D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\iguoer" ServerName www.iguoer.com DirectoryIndex index.html index.htm index.jsp ErrorLog logs/shsc-error_log.txt CustomLog logs/shsc-access_log.txt common JkMount /dwr/* ajp13 JkMount /*.jsp ajp13 JkMount /*.do ajp13 </VirtualHost>
现在去配置Tomcat
找到文件
D:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\server.xml
如果你安装的Tomcat和我的版本是一样的话,在文件的最后面应该可以找到
<Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </Engine>
我修改为
<Engine name="Catalina" defaultHost="www.iguoer.com"> <Host name="www.iguoer.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="iguoer" reloadable="true" /> </Host> </Engine>
修改这段后,此时Tomcat的根目录为
D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\iguoer
这样用Eclipse的插件,就能启动项目为根目录启动了。
当然还可以配置不同域名访问不同目录
<Engine name="Catalina" defaultHost="www.iguoer.com"> <Host name="www.iguoer.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="iguoer" reloadable="true" /> </Host> <Host name="img.iguoer.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="D:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\iguoer" reloadable="true" /> </Host> </Engine>
当然不要忘记修改你的C:\Windows\System32\drivers\etc\hosts
127.0.0.1 www.iguoer.com
127.0.0.1 img.iguoer.com
127.0.0.1 memcached.iguoer.com
127.0.0.1 mysql.iguoer.com
127.0.0.1 mq.igueor.com
抛弃在Hibernate的二级缓存使用Memcached
Jul 19th
根据Spring注释确定包命名规则
Jul 19th
包的命名规则很多,说法也很多,但再怎么变也脱离不了三层架构这一说法,至少目前可以这么说。
在说新的规则之前,先说下我熟悉的老的命名规则。
表现层命名为:com.iguoer.web
如果使用Struts的话,会命名为:com.iguoer.web.action
如果使用Spring MVC的话,会命名为:com.iguoer.web.controller
业务层一般命名有两种
com.iguoer.service 和 com.iguoer.business
数据层一般命名为:com.iguoer.dao
使用hibernate的话,就有com.iguoer.dao.hibernate
根据有些解释三层架构的图上说,穿越三层的是一个叫domain域的东西,所以就有了
com.iguoer.domain
实体被称为持久化对象
所以有了com.iguoer.domain.po
组装后给页面有值对象,所以有了com.iguoer.domain.vo
一般工具类被放在com.iguoer.util中
应用程序放在com.iguoer.app中
我现在根据Spring的注释,重新写一个包的命名,当然这首先建立在你对三层架构的熟悉上。
com.iguoer.app 应用程序
com.iguoer.combo 组合对象,传给页面,相当于com.iguoer.domain.vo
com.iguoer.controller MVC中的控制,Spring的注释@controller
com.iguoer.controller.admin 管理员表现层
com.iguoer.controller.filter 表现层的过滤器
com.iguoer.entity 实体,相当于com.iguoer.domain.po Spring的注释@entity
com.iguoer.repository 储藏室,相当于数据层,类似com.iguoer.dao Spring的注释@repository
com.iguoer.security 保密包,说明这里的东西尤为重要
com.iguoer.service 业务层,服务层,相当于com.iguoer.business Spring的注释@service
com.iguoer.util 工具类
注:上面所说的表现层,其实指的只是MVC设计模式中的控制
项目开发部署
Jul 18th
1、下载开发工具
1> Eclipse
下载开发工具eclipse-jee-ganymede(
http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/SR2/eclipse-jee-ganymede-SR2-win32.zip)解压到 D:\Program Files\eclipse-ganymede
http://download.actuatechina.com/eclipse/technology/epp/downloads/release/ganymede/SR2/eclipse-jee-ganymede-SR2-win32.zip
选择workspace目录为D:\workspace
2> Resin
http://www.caucho.com/download/
http://www.caucho.com/download/resin-3.1.8.zip
3> nginx
http://nginx.net/
http://sysoev.ru/nginx/nginx-0.7.61.zip
4> mysql
Windows MSI Installer (x86)
http://www.mysql.com/
http://dev.mysql.com/downloads/mysql/5.0.html#win32
http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.0/mysql-5.0.83-win32.zip
http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQLGUITools/mysql-gui-tools-5.0-r17-win32.msi
5>memcached for win32
http://www.splinedancer.com/memcached-win32/
2、Eclipse插件下载地址
1> Hibernate Tools
#http://download.jboss.org/jbosstools/updates/development
http://download.jboss.org/jbosstools/updates/stable/
选择安装
#Tools Development Release和Hibernate Tools
FreeMarker IDE
Hibernate Tools
2> Spring IDE
http://springide.org/updatesite
3> SVN
http://subclipse.tigris.org/update_1.6.x
4> Javascript
http://download.macromedia.com/pub/labs/jseclipse/autoinstall/
以下是项目辅助的插件
5> checkstyle
http://eclipse-cs.sourceforge.net/update
6> findbug
http://findbugs.cs.umd.edu/eclipse