<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>吾忆吧-Alpha&#039;s Blog</title>
	<atom:link href="http://www.5e8.org/feed" rel="self" type="application/rss+xml" />
	<link>http://www.5e8.org</link>
	<description>宠辱不惊，看庭前花开花落；去留无意，望天空云卷云舒</description>
	<lastBuildDate>Thu, 11 Aug 2011 07:50:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
	
<!-- Start Of Script Generated By WP-PostViews Plus -->
<script type='text/javascript' src='http://www.5e8.org/wp-includes/js/jquery/jquery.js?ver=1.6.1'></script>
<script type="text/javascript">
/* <![CDATA[ */
/* ]]> */
</script>
<!-- End Of Script Generated By WP-PostViews Plus -->
	<item>
		<title>struts2采用convention-plugin实现零配置</title>
		<link>http://www.5e8.org/archives/189</link>
		<comments>http://www.5e8.org/archives/189#comments</comments>
		<pubDate>Thu, 11 Aug 2011 07:31:56 +0000</pubDate>
		<dc:creator>吴 导</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[编程技术]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[JSP]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[Struts]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=189</guid>
		<description><![CDATA[最近开始关注struts2的新特性，从这个版本开始，Struts开始使用convention-plugin代替codebehind-plugin来实现struts的零配置。 配置文件精简了，的确是简便了开发过程，但是，我们熟悉的配置突然disappear了，真是一下很不适应。跟着潮流走吧，看看该怎样来搞定convention-plugin。 使用Convention插件，你需要将其JAR文件放到你应用的WEB-INF/lib目录中，你也可以在你Maven项目的POM文件中添加下面包依赖 &#60;dependency&#62;   &#60;groupId&#62;org.apache.struts&#60;/groupId&#62;   &#60;artifactId&#62;struts2-convention-plugin&#60;/artifactId&#62;   &#60;version&#62;2.1.6&#60;/version&#62; &#60;/dependency&#62; 零配置并不是没有配置，而是通过约定大于配置的方式，大量通过约定来调度页面的跳转而使得配置大大减少。所以，首先应该了解下convention-plugin的约定： 1. 默认所有的结果页面都存储在WEB-INF/content下，你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。如： &#60;constant name=”struts.convention.result.path” value=”/WEB-INF/page” /&#62; 则将路径配置到了WEB-INF/page 下。 2. 默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。你可以通过设置struts.convention.package.locators属性来修改这个配置。如： &#60;constant name=”struts.convention.package.locators” value=”web,action” /&#62; 则定义了在项目中，包路径包含web和action的将被视为Action存在的路径来进行搜索。 Com.ustb.web.*/com.ustb.action.*都将被视为含有Action的包路径而被搜索。 3. 接着，Convention从前一步找到的package以及其子package中寻找 com.opensymphony.xwork2.Action 的实现以及以Action结尾的类： com.example.actions.MainAction com.example.actions.products.Display (implements com.opensymphony.xwork2.Action) com.example.struts.company.details.ShowCompanyDetailsAction 4. 命名空间。从定义的.package.locators标示开始到包结束的部分，就是命名空间。举个例子： Com.ustb.web.user.userAction的命名空间是：”/user”。Com.ustb.web.user.detail.UserAction的命名空间是：”/user/detail” 5. Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将将每个分部的首字母转为小写，用’-’分割，你可以设置struts.convention.action.name.separator 如 &#60;constant name=”struts.convention.action.name.separator” value=”-” /&#62; 还是举个例子： UserAction-&#62;user  UserDetailAction -&#62;user-detail。结合上面的。对于com.ustb.web.user.detail.UserDetailAction，映射的url就是/WEB-INF/content/user/detail/user-detail.jsp 6. struts支持.jsp .html .htm [...]]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/189/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx+tomcat负载均衡session问题解决</title>
		<link>http://www.5e8.org/archives/179</link>
		<comments>http://www.5e8.org/archives/179#comments</comments>
		<pubDate>Wed, 27 Apr 2011 03:06:16 +0000</pubDate>
		<dc:creator>吴 导</dc:creator>
				<category><![CDATA[新闻旧事]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=179</guid>
		<description><![CDATA[测试环境： server1 服务器上安装了 nginx + tomcat01 server2 服务器上只安装了 tomcat02 server1 IP 地址： 192.168.2.88 server2 IP 地址： 192.168.2.89 安装步骤： 1. 在server1 上安装配置 nginx + nginx_upstream_jvm_route shell $> wget -c http://sysoev.ru/nginx/nginx-0.7.61.tar.gz shell $> svn checkout http://nginx-upstream-jvm-route.googlecode.com/svn/trunk/ nginx-upstream-jvm-route-read-only shell $> tar zxvf nginx-0.7.61 shell $> cd nginx-0.7.61 shell $> patch -p0 < ../nginx-upstream-jvm-route-read-only/jvm_route.patch shell $> useradd www shell [...]]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/179/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginx+tomcat集群负载均衡(实现session复制)</title>
		<link>http://www.5e8.org/archives/177</link>
		<comments>http://www.5e8.org/archives/177#comments</comments>
		<pubDate>Wed, 27 Apr 2011 03:05:05 +0000</pubDate>
		<dc:creator>吴 导</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[系统管理]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=177</guid>
		<description><![CDATA[            Nginx+tomcat 做负载均衡 架构描述 前端一台nginx服务器做负载均衡器，后端放N台tomcat组成集群处理服务，通过nginx转发到后面（注：没做动静分离，静态动态全部都转给tomcat） 优点：实现了可弹性化的架构，在压力增大的时候可以临时添加tomcat服务器添加到这个架构里面去 一，配置nginx 1，  下载包 Wget http://sysoev.ru/nginx/nginx-0.6.32.tar.gz ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 2,  安装nginx包     a.安装pcre     tar zxvf pcre-7.2.tar.gz     cd pcre  ./configure  &#8211;prefix = /pcre  Make;make install b,安装nginx tar zxvf nginx-0.6.32.tar.gz cd nginx-0.6.32 ./configure  &#8211;prefix=/nginx –with-pcre=/pcre  &#8211;with-http_rewrite_module Make;make install 3, 修改配置文件 Vi /nginx/conf/nginx.conf #用户组 user nobody nobody;                  #cpu个数，可以按照实际服务器来计算 worker_processes  8;                 worker_rlimit_nofile 51200;          [...]]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/177/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下搭建SVN服务器完全手册&#8211;很强大的牛人写的</title>
		<link>http://www.5e8.org/archives/175</link>
		<comments>http://www.5e8.org/archives/175#comments</comments>
		<pubDate>Thu, 20 Jan 2011 01:46:00 +0000</pubDate>
		<dc:creator>吴 导</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[系统管理]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=175</guid>
		<description><![CDATA[很详细，很好，很强大，好喜欢，绝对不是我原创，转载自：http://blog.chinaunix.net/u3/94705/showart_2260521.html 系统环境 RHEL5.4最小化安装(关iptables,关selinux) + ssh + yum 一，安装必须的软件包. yum install subversion (SVN服务器) mysql-server (用于codestriker) httpd mod_dav_svn mod_perl (用于支持WEB方式管理SVN服务器) sendmail (用于配置用户提交代码后发邮件提醒) wget gcc-c++ make unzip perl* (必备软件包) ntsysv vim-enhanced (可选) 二，基本的SVN服务器配置 1，新建一个目录用于存储SVN所有文件 # mkdir /home/svn 2，新建一个版本仓库 # svnadmin create /home/svn/project 3，初始化版本仓库中的目录 # mkdir project project/server project/client project/test (建立临时目录) # svn import project/ file:///home/svn/project -m “初始化SVN目录” # [...]]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring中Quartz的配置</title>
		<link>http://www.5e8.org/archives/172</link>
		<comments>http://www.5e8.org/archives/172#comments</comments>
		<pubDate>Thu, 13 Jan 2011 02:58:32 +0000</pubDate>
		<dc:creator>吴 导</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring+Hibernate]]></category>
		<category><![CDATA[编程技术]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=172</guid>
		<description><![CDATA[jar包:       quartz.1.6.0.jar       jta.jar       commons-collection-3.2.jar       spring3.0的系列jar包 Quartz是一个强大的企业级任务调度框架，Spring中继承并简化了Quartz，下面就看看在Spring中怎样配置Quartz： 首先我们来写一个被调度的类： package com.kay.quartz; public class QuartzJob {     public void work()     {     System.out.println(“Quartz的任务调度！！！”);     } } Spring的配置文件： &#60;?xml version=”1.0&#8243; encoding=”UTF-8&#8243;?&#62; &#60;!DOCTYPE beans PUBLIC ”-//SPRING//DTD BEAN//EN” ”http://www.springframework.org/dtd/spring-beans.dtd”&#62; &#60;beans&#62;             &#60;!&#8211; 要调用的工作类 &#8211;&#62;         &#60;bean id=”quartzJob” class=”com.kay.quartz.QuartzJob”&#62;&#60;/bean&#62;         &#60;!&#8211; 定义调用对象和调用对象的方法 &#8211;&#62;         &#60;bean id=”jobtask” class=”org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean”&#62;             &#60;!&#8211; 调用的类 &#8211;&#62;             &#60;property name=”targetObject”&#62;                 &#60;ref bean=”quartzJob”/&#62;             &#60;/property&#62;             &#60;!&#8211; 调用类中的方法 &#8211;&#62;             &#60;property name=”targetMethod”&#62;                 &#60;value&#62;work&#60;/value&#62;             &#60;/property&#62;         &#60;/bean&#62;         &#60;!&#8211; 定义触发时间 &#8211;&#62;         &#60;bean id=”doTime” class=”org.springframework.scheduling.quartz.CronTriggerBean”&#62;             &#60;property name=”jobDetail”&#62;                 &#60;ref bean=”jobtask”/&#62;             &#60;/property&#62;             &#60;!&#8211; cron表达式 &#8211;&#62;             &#60;property name=”cronExpression”&#62;                 &#60;value&#62;10,15,20,25,30,35,40,45,50,55 * * * * ?&#60;/value&#62;             &#60;/property&#62;         &#60;/bean&#62;         &#60;!&#8211; 总管理类 如果将lazy-init=&#8217;false&#8217;那么容器启动就会执行调度程序  &#8211;&#62;         &#60;bean id=”startQuertz” lazy-init=”false” autowire=”no” class=”org.springframework.scheduling.quartz.SchedulerFactoryBean”&#62;             &#60;property name=”triggers”&#62;                 &#60;list&#62;                     &#60;ref bean=”doTime”/&#62;                 &#60;/list&#62;             &#60;/property&#62;         &#60;/bean&#62;      [...]]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/172/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>二级域名的java实现</title>
		<link>http://www.5e8.org/archives/168</link>
		<comments>http://www.5e8.org/archives/168#comments</comments>
		<pubDate>Thu, 13 Jan 2011 02:56:55 +0000</pubDate>
		<dc:creator>吴 导</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[编程技术]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=168</guid>
		<description><![CDATA[涉及到为用户提供一个二级域名功能，实现方法如下： (1)首先要在域名服务商端做一个泛域名解析. 我用的是godaddy.com,就新建一个A记录(host=*,point to指向我的服务器的ip),这样所有二级域名都会转到我的服务器来了 (2)接着在web.xml配一个自已写的域名过滤器, &#60;filter&#62; &#60;filter-name&#62;URLFilter&#60;/filter-name&#62; &#60;filter-class&#62;com.yowob.commons.URLFilter&#60;/filter-class&#62; &#60;/filter&#62; &#60;filter-mapping&#62; &#60;filter-name&#62;URLFilter&#60;/filter-name&#62; &#60;url-pattern&#62;/*&#60;/url-pattern&#62; &#60;/filter-mapping&#62; 过滤器的代码如下。这里先将二级域名和全球域名和用户ID的映射,保存在一个数据表里, 然后访问进来时对地址做一个判断, 再取出对应的用户ID. 再转一下就行了. 我的静态文件都在static目录，所以还加了一个static的判断。 比如: http://time.you.com/board/21 用time对应用户ID为6,则访问效果有 http://www.you.com/6/board/21相同, 不过地址栏还是显示http://time.you.com/board/21。 再比如：htttp://www.userdomain.com/board/21，这个是用户ID为6的全球域名，访问效果也和上面一样。 package com.yowob.commons; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.logging.Log; import [...]]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/168/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]百万级访问网站前期的技术准备</title>
		<link>http://www.5e8.org/archives/165</link>
		<comments>http://www.5e8.org/archives/165#comments</comments>
		<pubDate>Thu, 13 Jan 2011 02:31:05 +0000</pubDate>
		<dc:creator>吴 导</dc:creator>
				<category><![CDATA[系统管理]]></category>
		<category><![CDATA[编程技术]]></category>
		<category><![CDATA[项目管理]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=165</guid>
		<description><![CDATA[对互联网有了解的人都有自己的想法，有人就把想法付诸实现，做个网站然后开始运营。其实从纯网站技术上来说，因为开源模式的发展，现在建一个小网站 已经很简单也很便宜。当访问量到达一定数量级的时候成本就开始飙升了，问题也开始显现了。因为带宽的增加、硬件的扩展、人员的扩张所带来的成本提高是显而 易见的，而还有相当大的一部分成本是因为代码重构、架构重构，甚至底层开发语言更换引起的，最惨的就是数据丢失，辛辛苦苦好几年，一夜回到创业前。]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/165/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>提高程序执行效率，Web开发技巧30条</title>
		<link>http://www.5e8.org/archives/147</link>
		<comments>http://www.5e8.org/archives/147#comments</comments>
		<pubDate>Thu, 05 Aug 2010 02:17:50 +0000</pubDate>
		<dc:creator>吴 导</dc:creator>
				<category><![CDATA[WEB前端]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[效率]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=147</guid>
		<description><![CDATA[目前的Web应用程序都趋于复杂化，从用户的角度而言，如何提高用户操作的响应速度，加快程序的执行效率，是Web开发人员应考虑的问题。 　　目前的Web应用程序愈发的复杂化，包括拥有富客户端以及大量的JavaScript编码等等，从用户角度而言，让页面加载得更快、对用户的操作响应得更及时，能够给用户提供更为友好的体验，这就需要开发人员应提高应用程序的执行效率，以下是关于提高程序执行效率的小技巧。 　　1.尽量避免使用DOM。当需要反复使用DOM时，先把对DOM的引用存到JavaScript本地变量里再使用。使用设置innerHTML的方法来替换 document.createElement/appendChild()方 法。 　　2.eval()有问题，new Fuction()构造函数也是，尽量避免使用它们。 　　3.拒绝使用with语句。 它会导致当你引用这个变量时去额外的搜索这样的一个命名空间，with里的代码在编译时期是完全未知的。 　　4.使用 for()循环替代for…in循 环。因为for…in循环在开始循环之前需要Script引擎创建一个含有所有可循环属性的 List，需要多检查一次。 　　5.把try-catch语句放在循环外面，不要放在循环里面，因为异常是很少发生的，放在外面避免每次都要执行它们。 　　6.甚至圣经里都提到过这个 – 不要全局的。全局变量的生命周期贯穿整个脚本的生命周期，而本地变量的存在范围随着本地命名空间的销毁而消失。当在函数或其它地方引用一个全局变量时，脚 本引擎需要搜索整个全局命名空间。 　　7.fullName += &#8216;John&#8217;; fullName += &#8216;Holdings&#8217;;执行速度快于fullName += &#8216;John&#8217; + &#8216;Holdings&#8217;; 　　8.如果你需要把多个字符串连接起来，最好是把他们做成一个数组，然后调用join()方法实现这个操作。这种方式在生成HTML片段时尤其有效。 　　9.对于简单的任务，最好使用基本操作方式来实现，而不是使用函数调用实现。例如val1 &#60; val2 ? val1 : val2;执行速度快于Math.min(val1, val2);，类似的，myArr.push(newEle);慢于myArr[myArr.length] = newEle; 　　 10.将函数的引用作为参数传递到setTimeout()和setInterval()里优于将函数名作为字符串参数传递(硬编码)。例如，setTimeout(”someFunc()”, 1000)执行效率慢于setTimeout(someFunc, 1000) 　　11.当进行遍历操作时避免使用DOM操作。通过像getElementsByTagName()这 种方法得到的DOM元素队列都是动态的;有可能在你还没有对它遍历完成时，它已经被改变。这有可能导致死循环。 　　12.当你对对象的成员 (属性或方法)进行反复操作时，先存储对它们的引用。例如var getTags = document.getElementsByTagName; getTags(’div’); 　　13.在任何的代码段里，在局部变量范围外存放一个这个局部变量的引用。例如 function foo(arr) {   var a = ’something’; [...]]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/147/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux和Mysql常用命令</title>
		<link>http://www.5e8.org/archives/143</link>
		<comments>http://www.5e8.org/archives/143#comments</comments>
		<pubDate>Fri, 16 Apr 2010 08:19:21 +0000</pubDate>
		<dc:creator>Alpha</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[常用命令]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=143</guid>
		<description><![CDATA[本人经常用到的命令，在这里做下记录。   .tar.bz2 解压：tar jxvf FileName.tar.bz2 压缩：tar jcvf FileName.tar.bz2 DirName .gz 解压1：gunzip FileName.gz   解压2：gzip -d FileName.gz 压缩：gzip FileName .tar.gz 和 .tgz 解压：tar zxvf FileName.tar.gz 压缩：tar zcvf FileName.tar.gz DirName .rpm 解包：rpm2cpio FileName.rpm &#124; cpio -div .deb 解包：ar p FileName.deb data.tar.gz &#124; tar zxf - 从远程scp到本地： scp root@192.168.2.100:/opt/test/* /opt/test ，输入远程机器密码后完成 scp -P 3588  root@192.168.2.100:/opt/test/* /opt/test 走特殊端口号 从本地scp到远程： scp /opt/test/*  root@192.168.2.100:/opt/test ，输入远程机器密码后完成 [...]]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/143/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache tomcat 日志分析</title>
		<link>http://www.5e8.org/archives/141</link>
		<comments>http://www.5e8.org/archives/141#comments</comments>
		<pubDate>Fri, 16 Apr 2010 08:18:25 +0000</pubDate>
		<dc:creator>Alpha</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[系统管理]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[日志]]></category>

		<guid isPermaLink="false">http://www.5e8.org/?p=141</guid>
		<description><![CDATA[最近在寻找这方面的资料: 1,查看apache进程: ps aux &#124; grep httpd &#124; grep -v grep &#124; wc -l 2,查看80端口的tcp连接: netstat -tan &#124; grep “ESTABLISHED” &#124; grep “:80&#8243; &#124; wc -l 3,通过日志查看当天ip连接数，过滤重复: cat access_log &#124; grep “24/Jul/2007&#8243; &#124; awk &#8216;{print $2}&#8217; &#124; sort &#124; uniq -c &#124; sort -nr 4,当天ip连接数最高的ip都在干些什么(原来是蜘蛛): cat access_log &#124; grep “24/Jul/2007:00&#8243; &#124; grep “61.135.166.230&#8243; &#124; awk [...]]]></description>
		<wfw:commentRss>http://www.5e8.org/archives/141/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

