摘要: 文件上传的整个流程:第一阶段: 构造struts2中针对请求字节流而构造的封闭类MultiPartRequestWrapper1.FilterDispatcher在doFilter方法中调用了prepareDispatcherAndWrapRequest方法,为了包装出Struts2自己的request对象,在prepareDispatcherAndWrapRequest方法中调用Dispatcher类的wrapRequest方法,在这个方法里,会根据请求内容的类型(提交的是文本的,还是multipart/form-data格式),决定是使用tomcat的HttpServletRequestW 阅读全文
posted @ 2011-06-08 17:37 highriver 阅读(6630) 评论(1) 推荐(0) 编辑
摘要: 默认的equal实现:Object类里定义的equal只是引用的判断,如果二个实例的引用不一样,就认为逻辑上也不一样。equal定制实现:但是实际存在二个实例不一样,但是逻辑上是一样的。比如一些值对象的类Date,还比如oauth2里面取回的用户,只要这些用户对象的uid是一样的就认为逻辑相等。关键 阅读全文
posted @ 2011-06-06 22:59 highriver 阅读(1110) 评论(0) 推荐(0) 编辑
摘要: 引自http://emavaj.blog.163.com/blog/static/133280557201011945440749/Struts2里面想定义个拦截器是非常简单的只需要集成Struts2的抽象类AbstractInterceptor然后重写intercept方法,就可以完成拦截器最后在struts.xml中配置上:这样就可以在action中使用interceptor-ref来引用拦截器了在此过程中,有一些问题是特别需要注意的1) 拦截器的工作原理invocation.invoke();这一句就是拦截器的核心,调用下一个拦截器,最后执行Action 中的方法invoke返回的Str 阅读全文
posted @ 2011-06-01 18:05 highriver 阅读(596) 评论(0) 推荐(0) 编辑
摘要: --struts2中文件上传的二个限制,一个是struts.multipart.maxSize,如果不设置,struts2 的核心包下的default.properties文件里有默认的大小设置struts.multipart.maxSize=2097152,即2M. 这是struts2文件上传的第一道关.第二道关是inteceptor中的maximumSize. 当真实的文件大小能通过第一道关时.针对不同的action中配置的inteceptor,maximumSize才能发挥相应的拦截作用.比如struts.multipart.maxSize=50M. actionA中inteceptor 阅读全文
posted @ 2011-06-01 17:38 highriver 阅读(16829) 评论(1) 推荐(0) 编辑
摘要: 这不是一篇技术文章,也不是绕口令,请不要头晕,本文是介绍Google广告(AdSense)上是通过什么方式赚到钱的,我们知道Google公司的收入几乎全部来源于它旗下的一款叫做“AdWords”的产品,尽管Google公司一直在寻求其他收入方式,但未能如愿,而站长要想利用AdSense赚钱,了解AdWords是很有必要的。AdSense与AdWords的关系我们看到大多数中小网站上的广告都写有“Google提供的广告”,这就是AdSense广告。既然我们中小站长主要盈利模式来源于AdSense,那AdWords是个什么东西呢?可实际上这些广告的发布者(也叫广告主)并不是Google公司,而是来 阅读全文
posted @ 2011-05-30 20:00 highriver 阅读(697) 评论(0) 推荐(0) 编辑
摘要: 转自http://setting.iteye.com/blog/1064017ING-专业要饭(xxx) 22:43:32现在好多项目数据库的表ID都是用UUID哦,这是为什么?ING-专业要饭(xxx) 22:43:37ashier.htm?orderId=879b2c046adf664e40bd6b7b7e1f6d6f&ING-专业要饭(xxx) 22:43:46这是支付宝的。境由心造(xxx) 22:46:59安全?kimmking(xxx) 22:47:16最重要的原因是 全局唯一性ING-专业要饭(xxx) 22:47:30还有捏?境由心造(xxx) 22:47:51UUID 阅读全文
posted @ 2011-05-30 18:58 highriver 阅读(3375) 评论(0) 推荐(0) 编辑
摘要: 有些时候,如果要判断某个表中是否存在满足条件的记录很简单,select count(1)返回值不为0即可.对于二张结构类似的表,我最初考虑使用exist或in,后来发现exist或in是用来过滤数据的.相当于做与操作,而union或union all是用来做或操作的,做加法的.所以转而选择union all去判断. 选择union all而不是union是因为union all并不会做distinct操作,而union会distinct,distinct会根据索引合并重复记录. 因为我只需要判断是否有值,不需要操作返回的数据,所以,只需使用union all+count(*)做简单的判断.SE 阅读全文
posted @ 2011-05-30 17:25 highriver 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确的。in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询 阅读全文
posted @ 2011-05-30 17:18 highriver 阅读(24230) 评论(3) 推荐(7) 编辑
摘要: 小结:1.主干在建立分支之后与分支同时修改了某个类文件.合并的步骤是:主干->分支->主干,有人可能认为将主干->分支就可以将分支做为主干. 一般上线的都是主干.而不会是分支, 从分支->主干如果在主干->分支做完之后,merge应该没什么障碍了.2.分支的日志包含了主干在拆成分支之前的日志, 可以也可以通过命令显示仅在拆出之后,分支的日志部分.3.在冲突的时候,diff版本用来显示,直接编辑冲突文件消除冲突即可.4.版本号是针对整个工程累加计算的.工程包括trunk,branch,tag.------------------------------------- 阅读全文
posted @ 2011-05-30 14:27 highriver 阅读(17381) 评论(2) 推荐(0) 编辑
摘要: 执行计划并不一定保证是最新的.比如下面很简单的sqlSELECT A.CPCIDEAID FROM CPCIDEA AWHERE A.CPCGRPID = 2001;总是提示全表扫,重新编译cpcgrpid这个索引之后,就OK了. 阅读全文
posted @ 2011-05-23 14:40 highriver 阅读(318) 评论(0) 推荐(0) 编辑