??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久久久影视,欧美日韩一区在线播放,国产精品久久久久久久久图文区http://www.aygfsteel.com/samyang/<br> <B>QQ:418148757</B><br> <B>Name:yangchuan</B><br> <b></b>zh-cnSat, 17 May 2025 00:05:48 GMTSat, 17 May 2025 00:05:48 GMT60Hander与HanderThreadQLooper以及MessageQueue和Message之间的关p?http://www.aygfsteel.com/samyang/archive/2012/07/19/383520.htmlsam.chuan.yangsam.chuan.yangThu, 19 Jul 2012 08:59:00 GMThttp://www.aygfsteel.com/samyang/archive/2012/07/19/383520.htmlhttp://www.aygfsteel.com/samyang/comments/383520.htmlhttp://www.aygfsteel.com/samyang/archive/2012/07/19/383520.html#Feedback0http://www.aygfsteel.com/samyang/comments/commentRss/383520.htmlhttp://www.aygfsteel.com/samyang/services/trackbacks/383520.htmlHander与HanderThreadQLooper以及MessageQueue和Message之间的关p?

以上q几个东西的目的是设计来解决位于ȝE中的某些操作比较耗时Q比如httpclienthQ,影响界面响应Q而导

致主E序无法处理其他监听事g。致使程序卡ȝ问题。(界面提示Q无响应关闭Q?/p>

1QHandler对象 中有两个属性,一个是来自于当前线E(或者拥有Looper对象的线E)的threadlocal变量中的Looper

对象和该looper对象中的messagequeue属性?br />有这两个属性的目的主要是往当前U程的looper对象的messagequeue队列中加入message对象?br />2QMessage对象Q也有两个重要的属性,一个是Hander对象Q这个handler对象是把该message加入队列的那

个handler对象Q另一个对象就是bundle对象Q这个对象的目的是用来存储数据Q相当于一个hashmap对象?/p>

3QLooper对象Q有一个重要的属性就是MessageQueue对象QLooper的loopҎQ会不断的从该队列中dmessage?/p>

象,q调用messgae对象中的Hander属性对象的dispatherMessageQmsgQ方法,该方法,是会调

用handler的handleMessageҎQ?也就是我们重写的那个Ҏ)?/p>


4QMessageQueue对象Q管理message的队列对象,它有一个属性就是Message对象QMessageQueue中始l只有一

个message对象Q因为message对象是一个链式结构的对象Q它的prv和next属性记录了他之前和之后的message对象Q所

以,我们调用MessageQueue的nextҎp回的需要的message对象?/p>


从hander与Looper以及MessageQueue和Message的关pM我们可以看出来,执行程如下Q?br />  1Q有人创建hander对象Qƈ取得对应的Looper对象赋给该handerQ通过Hander的sendmessage或postҎhandler

包装到message对象中, 再将该message对象加入到消息队列中。(消息队列是Looper对象中消息队列属性)
  2Q线E(理Looper对象的线E)不断的调用Looper对象中的loopҎQloopҎ又从messageQueue队列中获

取Message对象Q然后调用该对象里的hander属性对象的dispatherMessageQmsgQ方法,从而,依次执行我们加入

的handlerd?/p>


q就是hander的处理流E。那么HandlerThread是做什么的Q他是一个管理Looper对象的线E类。我们的Looper一般来?/p>

于两个地方,一个地方就是主U程的Looper对象Q另一个就是我们另外开启一个线E来创徏和管理Looper?/p>

象。android提供已经l我们提供了一U这L一个类Q那是HandlerThread对象?/p>


 



sam.chuan.yang 2012-07-19 16:59 发表评论
]]>
山寨版struts2 http://www.aygfsteel.com/samyang/archive/2012/05/02/377205.htmlsam.chuan.yangsam.chuan.yangWed, 02 May 2012 09:36:00 GMThttp://www.aygfsteel.com/samyang/archive/2012/05/02/377205.htmlhttp://www.aygfsteel.com/samyang/comments/377205.htmlhttp://www.aygfsteel.com/samyang/archive/2012/05/02/377205.html#Feedback0http://www.aygfsteel.com/samyang/comments/commentRss/377205.htmlhttp://www.aygfsteel.com/samyang/services/trackbacks/377205.html本框架有以下几个功能Q?/span>
1Q把h数据装为参ClactionҎQ包括文件的上传?/span>
2Q拦截器的配|和功能与struts2一模一栗?/span>
3Q默认主持几U视图方式:jsonQvelocity。stream?/span>
4Q容易扩展,可以Ҏ需要扩展页面渲染器?/span>
5Q请求地址可灵z配|?/span>
6Q同struts2一样可以选择配置spring做bean容器。当然也可以不用?/span>
7Q默认集成了一个小的定时Q务和数据库处理器源代码和demo下蝲地址Q欢q大家拍?a >
http://sourceforge.net/projects/xsshweb/files/




sam.chuan.yang 2012-05-02 17:36 发表评论
]]>
struts2的小bughttp://www.aygfsteel.com/samyang/archive/2012/04/10/373747.htmlsam.chuan.yangsam.chuan.yangTue, 10 Apr 2012 15:13:00 GMThttp://www.aygfsteel.com/samyang/archive/2012/04/10/373747.htmlhttp://www.aygfsteel.com/samyang/comments/373747.htmlhttp://www.aygfsteel.com/samyang/archive/2012/04/10/373747.html#Feedback1http://www.aygfsteel.com/samyang/comments/commentRss/373747.htmlhttp://www.aygfsteel.com/samyang/services/trackbacks/373747.htmlstruts2.1.6的时候,有编码问题,主要是因Z把设|编码的那行代码没放在最前面?br />struts2.2.1的时候,又出来一个低UbugQ那是一直以来模板的加蝲都是先查找web.xml中查抄templatePath的配||然后才从web应用目录查找Q最后才是从class和jar中查找。结果在2.2.1中就犯了一个低UbugQ那是永远找不到web应用目录?代码在:org.apache.struts2.views.freemarker.FreemarkerManager.class?br />    
public void init(ServletContext servletContext) throws TemplateException {
    this.config = createConfiguration(servletContext);

    this.config.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
    this.contentType = "text/html";

    this.wrapper = createObjectWrapper(servletContext);
    if (LOG.isDebugEnabled())
      LOG.debug("Using object wrapper of class " + this.wrapper.getClass().getName(), new String[0]);

    this.config.setObjectWrapper(this.wrapper);

    this.templatePath = servletContext.getInitParameter("TemplatePath");
    if (this.templatePath == null)
      this.templatePath = servletContext.getInitParameter("templatePath");

    if (this.templatePath == null)
      this.templatePath = "class://";
    this.config.setTemplateLoader(createTemplateLoader(servletContext, this.templatePath));

    loadSettings(servletContext);
  }
    
protected TemplateLoader createTemplateLoader(ServletContext servletContext, String templatePath)
  {
    TemplateLoader templatePathLoader = null;
    try
    {
      if (templatePath.startsWith("class://"))
      {
        templatePathLoader = new ClassTemplateLoader(super.getClass(), templatePath.substring(7));
      } else if (templatePath.startsWith("file://"))
        templatePathLoader = new FileTemplateLoader(new File(templatePath));
    }
    catch (IOException e) {
      LOG.error("Invalid template path specified: " + e.getMessage(), e, new String[0]);
    }

    if (templatePathLoader != null);
    return new MultiTemplateLoader(new TemplateLoader[] { new WebappTemplateLoader(servletContext), new StrutsClassTemplateLoader() });
  }

不过Q这个问题已l在2.3的版本中修复q来了?/p>

sam.chuan.yang 2012-04-10 23:13 发表评论
]]>
关于|站pȝ优化的疑问,D{?/title><link>http://www.aygfsteel.com/samyang/archive/2011/12/22/367040.html</link><dc:creator>sam.chuan.yang</dc:creator><author>sam.chuan.yang</author><pubDate>Thu, 22 Dec 2011 13:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/samyang/archive/2011/12/22/367040.html</guid><wfw:comment>http://www.aygfsteel.com/samyang/comments/367040.html</wfw:comment><comments>http://www.aygfsteel.com/samyang/archive/2011/12/22/367040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/samyang/comments/commentRss/367040.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/samyang/services/trackbacks/367040.html</trackback:ping><description><![CDATA[<p>背景Q网站中几类变化很小的数据分为几c:W一c,博客文章Q新闻,Q百培网站中的课E信息,分校信息Q地图数据等Q?br />   W二c:学校各种门户Q聚集页面。比如网站的首页Q?br />其中W一c:变化最,一旦生,变化的可能性就很小?br />W二U:讉K机率很大Q时常变化,主要q辑h员手动维护?/p> <p>ҎQ:提供两台memcached服务器Q主从关p,保证数据E_Q,访问这两类数据的方法缓存。在数据变更以后更新~存卛_<br />主要目的是隔频J的数据的访问?br />ҎQ:这两类数据都生成静态html文Ӟ通过nginx指定前台缓存访问。缺Ҏ更新数据后要生成新的文gQ担心时间久?br />以后有磁盘碎片。另外多ơ读取文Ӟ可能有磁盘io影响。如果缓存到前台Q后台数据变更了Q前台可能很隑־到新的版?br />ҎQ:第一cȝ成静态文ӞW二c通过Ҏ~存hQ看上去好,但是我觉得实现v来比较困难?br />实际上方案2Q3都有一个实C比较ȝ的地方,那就是所有的面头部有一个用Ld信息。如果缓存成文gq样我目前所?br />头部的数据只能通过ajax来得MQ这样不但多了一ơ网lioQ也不允讔R面可以后退?/p> <p>另外Q我做这个方案有两个目的Q一U就是提高访问速度Q另外就是想从缓存的基础上做数据库读写分,以便某些l计数据可以白天<br />及时的做</p><img src ="http://www.aygfsteel.com/samyang/aggbug/367040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/samyang/" target="_blank">sam.chuan.yang</a> 2011-12-22 21:49 <a href="http://www.aygfsteel.com/samyang/archive/2011/12/22/367040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iframe自适应高度http://www.aygfsteel.com/samyang/archive/2010/10/21/335763.htmlsam.chuan.yangsam.chuan.yangThu, 21 Oct 2010 01:56:00 GMThttp://www.aygfsteel.com/samyang/archive/2010/10/21/335763.htmlhttp://www.aygfsteel.com/samyang/comments/335763.htmlhttp://www.aygfsteel.com/samyang/archive/2010/10/21/335763.html#Feedback0http://www.aygfsteel.com/samyang/comments/commentRss/335763.htmlhttp://www.aygfsteel.com/samyang/services/trackbacks/335763.htmlExt.onReady(function() {

 function reinitIframe(){
  var iframe = document.getElementById("frame_content");
  try{
   var bHeight = iframe.contentWindow.document.body.scrollHeight;
  }catch (ex){
     var bHeight = 0;
  } 
  try{
   var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
  }catch (ex){
      var dHeight = 0;
  }
  if(dHeight!=0 && bHeight!=0){
   var height = Math.min(bHeight, dHeight);
  }else{
   var height = Math.max(bHeight, dHeight);
  }
  if(Ext.isGecko){
   height = height+30;
  }
  iframe.style.height =  height+"px";
 }
 window.setInterval(function(){
  reinitIframe()
 }, 200);
});



sam.chuan.yang 2010-10-21 09:56 发表评论
]]>
Ext下类函数定义http://www.aygfsteel.com/samyang/archive/2010/06/29/324724.htmlsam.chuan.yangsam.chuan.yangMon, 28 Jun 2010 23:07:00 GMThttp://www.aygfsteel.com/samyang/archive/2010/06/29/324724.htmlhttp://www.aygfsteel.com/samyang/comments/324724.htmlhttp://www.aygfsteel.com/samyang/archive/2010/06/29/324724.html#Feedback0http://www.aygfsteel.com/samyang/comments/commentRss/324724.htmlhttp://www.aygfsteel.com/samyang/services/trackbacks/324724.html

一QExt下类函数定义
extcore通过QExt.extendҎ来创建类Q构造函敎ͼQ这个类以下用sb代替?br /> q个cd数默认会有这些属性(cd性)?br /> superclassQ父c,也就是第一个或W二个参数的prototype属性对象。(具体Ҏ传入的参数类型决定)
superclass(): 父类Q?sb.propertype? q是一个函敎ͼ该函数返回父cȝpropertype对象
supr():同上
constructor()Q构造函敎ͼQsb函数的propertype对象下)实际上引用的是sb函数自己?br /> override(o)Q重写方法,Qsb函数下)Q调用的?Ext.override(sb, o);也就是将o中的属性复制到sb的propertype下?br /> override(o)Q重写方法,Qsb.propertype下)也就是将o的属性复制到sb的propertype下?br /> extend(o):(sb函数?,该函数调用的是Ext.extend(sb.o);

Ext.extend(sb, sp, overrides)Ҏ有三个参敎ͼq三个参数有一定的cd要求Q?br /> sb 一般情况下是一个类函数?br /> spQ有两种情况Q一U是cd敎ͼ另一U是Q一个Object对象?br /> overridesQObject对象Q通过Ext.override(sb, overrides);Ҏ覆盖cd象的属性?/p>

通过代码分析Q可以看出Ext.extendҎ有两个应用:
W一Q?br /> 因ؓjs没有重构语法Q所以我们没办法定义jsҎ的重构,而上边这个extendҎQ可以说是一U重构的实现。因为,我们通过代码的分析,我们可以ȝ出extendҎ的参C

递方式?用面向对象语a来表C的话,如下l构)
1:extend(Calss sb,Object sp);
2:extend(Calss sb,Class sp);
3:extend(Calss sb,Class sp,Object overrides);
W一U方式目的是定义一个类函数Q这个类函数的父cMؓsbcd敎ͼ属性方法的定义在sp对象中完成?br /> 比如Q?var Student = Ext.extend(Person,{
    constructor:function(old){
  this.age=old;
 },
   name:'sam'}
})
其实通过
  if(Ext.isObject(sp)){
                    overrides = sp;
                    sp = sb;
                    sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
                }

我们可以看出Ext.extend

只有在sp.constructor==Object.prototype.constructor的时候,才创建ƈq回一个函敎ͼ该函数就一句话Q?/p>

是调用sbQ即父类构造函敎ͼ

如果sp.constructor==Object.prototype.constructor

那么sp应该是这P是一个对象直接量Q或者new Object方式创徏的对象,且它们都没有昄定义

constructorҎ?/p>

以下q几U情况都不会有sp.constructor==Object.prototype.constructor?/p>

1Qvar obj = new Object(); 

obj.constructor=function(){...};

Ext.extend(sb,obj) //extend q回的类是constructor函数

2: var obj = {

constructor:function(){...}

};

Ext.extend(sb,obj) //extend q回的类是constructor函数

3: var obj = new function(){...}();  

Ext.extend(sb,obj) //extendq回的类是q个匿名函数

4: var obj = new function(){

this.constructor=function(){...} 

}();

Ext.extend(sb,obj) //extend q回的类是constructor函数?/p>


ȝ Q其实很?Ext.extendq么做的目的是要_定义一个类Q构造函数就是constructorҎQ如果没昄定义q个ҎQ那么类׃用父cdC为新cȝ构造函数?/p>


var A=function(){
   alert("this is a");
}
var B=function(){
   alert("this is b");
}

var SubA = Ext.extend(A,new B());
var subA = new SubA();//q里׃弹出 this is  a 的提C?
W二U方式:修改现有cȝcȝ?br /> 2:extend(Calss sb,Class sp);
q个Ҏ的目的其实之一U包装,是将sbl承于sp下,不管sb是不是ext框架下的c,在这个方法执行后sb成了ext框架
下的cȝ构了
3:extend(Calss sb,Class sp,Object overrides);
除了有第二种Ҏ的功能外Q还额外的给sbd或覆盖新的方法或属?br /> Ext.extend(Person,DongWu);
Ext.extend(Person,DongWuQ{sex:'man'});



sam.chuan.yang 2010-06-29 07:07 发表评论
]]>
struts2验证p|后返回inputQselect中list数据丢失问题http://www.aygfsteel.com/samyang/archive/2010/05/15/321019.htmlsam.chuan.yangsam.chuan.yangSat, 15 May 2010 01:35:00 GMThttp://www.aygfsteel.com/samyang/archive/2010/05/15/321019.htmlhttp://www.aygfsteel.com/samyang/comments/321019.htmlhttp://www.aygfsteel.com/samyang/archive/2010/05/15/321019.html#Feedback2http://www.aygfsteel.com/samyang/comments/commentRss/321019.htmlhttp://www.aygfsteel.com/samyang/services/trackbacks/321019.html很多人都在问Qstruts2验证p|后select中list数据丢失的问?/p> could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name}?br /> 其实q个问题很简单,大多ChQ是通过action跌{到数据编辑页面的Q这样做的目的是方便把数据库里的数据Q反昑ֈ面。同时也可以通过该action select中的列表数据从数据库中取出,传递给面。但是,q里出现一个问题,那就是在struts2验证p|后返回input的时候,面不是通过该action的该Ҏ传递回ȝQ实际上是通过DefaultWorkflowInterceptor拦截器拦截回ȝQ,所以这个时候页面就找不到sleect的数据集合,从而报错。有的h也许会问Q修改input的type为redirectQ直接掉转到那个action上去Q呵呵,q种Ҏ虽然可以保证得到select的数据集合,因ؓredirect的性质Q我们丢׃之前验证的错误信息。所以还是不能解决问题,那么有的人可能说了,那么改用chain可以了吧,如果改用chainQ我们知道,chain是action铄掉{Q执行actionq是要经q拦截器Q所以因Z带有验证错误信息Q你q是会被DefaultWorkflowInterceptor拦截器拦截,q是会报错,而且是chainN?br />     其实Q可以反一U思\Q既然走跌{不成功,我们可不可以在页面上下功夫呢。其实我们的select的list能不能不l过action而直接得到数据呢Q是可以的,我们的ognl可以讉K某个对象的某个方法,也可以访问某个静态类的静态属性,静态方法。所以我们可以将q些数据通过对象Ҏ讉KQ也可以通过静态类的静态方法去讉KQ具体怎么做,Ҏ需要写可以了。代码就不在q里写了Q因为非常简单?

sam.chuan.yang 2010-05-15 09:35 发表评论
]]>
jcreator+tomcat环境配置http://www.aygfsteel.com/samyang/archive/2010/04/07/317639.htmlsam.chuan.yangsam.chuan.yangWed, 07 Apr 2010 06:40:00 GMThttp://www.aygfsteel.com/samyang/archive/2010/04/07/317639.htmlhttp://www.aygfsteel.com/samyang/comments/317639.htmlhttp://www.aygfsteel.com/samyang/archive/2010/04/07/317639.html#Feedback0http://www.aygfsteel.com/samyang/comments/commentRss/317639.htmlhttp://www.aygfsteel.com/samyang/services/trackbacks/317639.html有的时候因为机器硬件原因,在用eclipse的时候明显表CI其实Q仔l想惻I我们做web开发的时候,java斚w也就是一些非guicȝ开发,比如QactionQserviceQdao{等。这L事情Q其实我们用jcreator来做的话Q够了。而jcreatorq行h也就50多mQ我想现在再差的g环境应该也跑得v来了。那么写E序最重要的是debugQ我们怎么来配|debug呢。其实这里用tomcat的远E调试就可以了,我们只需要在tomcat的catalina.bat文g中找到set DEBUG_OPTSQƈ修改Z边的内容Q?br />      set DEBUG_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8019
然后你点击jcreator的run菜单下的attach by socket,在弹出的H口中的address栏输入tomcat服务器,比如127.0.0.1Q然后再其后边的一个输入框输入刚才的端?019.Q注Qtomcat用的?.018解压版,jcreator用的?.5版)然后点击okQ前提是tomcat已经启动了哈Q这个时候jreactorp入了debug模式Q你可以调试程序了?/p>

sam.chuan.yang 2010-04-07 14:40 发表评论
]]>
DIY mvc框架http://www.aygfsteel.com/samyang/archive/2009/03/15/259814.htmlsam.chuan.yangsam.chuan.yangSun, 15 Mar 2009 03:32:00 GMThttp://www.aygfsteel.com/samyang/archive/2009/03/15/259814.htmlhttp://www.aygfsteel.com/samyang/comments/259814.htmlhttp://www.aygfsteel.com/samyang/archive/2009/03/15/259814.html#Feedback0http://www.aygfsteel.com/samyang/comments/commentRss/259814.htmlhttp://www.aygfsteel.com/samyang/services/trackbacks/259814.html         起因Q?8q?月有q外包到了H公司在L市的bi目l,更有q的是,我做了我喜欢的前台编码工作。可是,{我开始正式工作的时候,我才发现我接下来的工作的痛苦。这是一个老系l,利用的是struts+spring+hibernatel典框架Q应该说q个东西q是很不错的。就是太ȝ了,我们每次修改一个功能或d一个功能,臛_都要接触??个配|文Ӟ其中业务层的bean需要spring配置两个Qؓ本模块加一bean配置Q然后又要将q个配置文g的信息包含到一个ȝ配置文g里。orm持久层的配置Q实体bean需要一个配|,Q该pȝ是利用配|文件读取实体bean的配|文件的Q,所以也要将q个配置文g包含到另一个文仉。mvc配置文gQ该模块需要一个配|文Ӟ当然q需要在web.xml里包含这个配|文件?br />       另外q有一点,是struts1有个~点是一个actionc配|一个actionFormQ要不就是用动态的Q要不就是承它的actionform。这样其实很ȝQ比如我有一个增删查改的面Q我放C个actionc里d理,其实在这个类里,我有不同的表单,比如Q查询表单,实体表单。针对不同的ҎQ传入不同的表单对象。还有就是对于以单的增加删除Q很希望Q不多做M事情Q直接从面表单一步就到数据库了。struts1倒是能解册个问题,但是始终是要多写一个actionformc,q要去配|他。总觉得麻烦?br />
      lg所qͼ其实我想解决配置文g多和J琐的问题,另外是希望mvc框架提供同一个action可以传入不同的表单实体,同一个actionҎ可以接受多个不同的表单实体?br />       我的愚思: 我是q么想的Q我觉得Q解决配|文件的问题Q完全可以利用注解来配置Q我们的业务层,持久层完全可以利用注解来解决Q甚x们的mvc其实也可以利用注解来解决。业务层Q持久层׃说了Qspring+hibernate早就q么q了。至于mvcQ其实流行框架也q么q了Q不q我是想DIY一把,利用spring强大的bean理能力Qmvc的action直接放在spring里了Q通过分析h地址得到bean的名Uͼ从而知道调用哪一个actionQ分析请求中的特定参敎ͼ来确定访问action bean里对应的Ҏ?br />      详细Q?整个框架因ؓ,所以仅需要一个filter可以了Q所有的h都通过q个filterQ在它里面我的主要工作就是分析请求地址Q取出它里面含有.do的字串作为action bean的nameQ然后通过springq回该action对象。通过取出action参数|做ؓ此次h需要调用的action Ҏ?br /> 在调用实际的action之前我们q需要做一个事情,那就是将提交上来的表单,分门别类的装入到不同的javabean里(实体beanQ或查询beanQ,通过注解讉K上边扑ֈ的actionҎQ找到该Ҏ对应的@actionForm注解Q提取该Ҏ需要的javabeanQP代出每一个bean的属性名Uͼ以及属性类型,q用propertyManager所理的不同类型的属性编辑器表单里对应的数据{化ؓ属性值存入到javabean里。(当然q里需要将表单里的html元素名称与javabean里的属性名UC_。最后一步,关于actionҎ的返回,我做了一个处理器。将q回的数据存入到map中,Ҏ需要做不同的返回?br /> Z方便处理ajaxq回Q我也DIY了一个json处理器,所有对象{化成json字串Q供前台面调用?br />
      个h体会Q?q个框架有几个好处,action c,不用l承Mc,看上d是一个简单的javac,Ҏ不再依赖requestQresponse对象Q方便做单元试。同一个方法可以传入不同的javabean对象Q可直接持久层对象与表单数据绑定,不用多写额外的actionForm对象。加上spring的注解功?br /> 基本减少?0%的配|信息,而且不容易因为配|失误而出错。方便做权限理Q通过hQ控制actionQ控制方法,只要分析hQ就可用权限\业务?br />       我的一个案列:后来利用q个框架为客户做了一个考核pȝ。整体代码应该说好是非常z的。比如我的一个简单存储。就如下单:
          

@Component("/targetAction")
public class TargetAction {

 @Autowired()
 @Qualifier("targetService")
 private ItargetService itargetService;

 @ActionForm(TblBsTargetInfo.class)
 public Object add(Object form, HttpServletRequest request,
   HttpServletResponse response) {
  
      itargetService.saveTarget((TblBsTargetInfo) formQ?
     return new JsonResultHandler(“ok”);
 }

 








sam.chuan.yang 2009-03-15 11:32 发表评论
]]>
james邮g服务器的配置http://www.aygfsteel.com/samyang/archive/2008/11/26/242778.htmlsam.chuan.yangsam.chuan.yangWed, 26 Nov 2008 05:24:00 GMThttp://www.aygfsteel.com/samyang/archive/2008/11/26/242778.htmlhttp://www.aygfsteel.com/samyang/comments/242778.htmlhttp://www.aygfsteel.com/samyang/archive/2008/11/26/242778.html#Feedback1http://www.aygfsteel.com/samyang/comments/commentRss/242778.htmlhttp://www.aygfsteel.com/samyang/services/trackbacks/242778.html恩,本来工具性东西没有什么可以说的,都比较简单,但是昨天实很郁P|上很多讲james2.1版本的服务器Q对于最新版?.3.1的配|很有人提及,l果配出来的服务器老是不能通过局域往外部发邮Ӟ一直报530的错误。后来没有办法,M一下config的配|文仉面的注释才搞明白?br /> 其实james2.3.1的配|只需要三个步骤?br />     1Q配|?lt;postmaster>Postmaster@localhost</postmaster>
<servernames autodetect="true" autodetectIP="true">
<!-- CONFIRM? -->
         <servername>localhost</servername>
      </servernames>
localhost配置?92.168.1.101Q也是你自己局域网的ipQ当然你也可以是你的机器名)目的是让局域网中的机器扑ֈ你这台服务器
2Q?lt;dnsserver>
      <servers>
         <!--Enter ip address of your DNS server, one IP address per server -->
         <!-- element. -->
         <!--
          <server>127.0.0.1</server>
         -->
         <server>221.7.34.10</server>  q是兰州电信的dns
         <server>192.168.1.101</server>
      </servers>
</dnsserver>
配置你服务器的dns Q可以在你这台服务器上ipconfig查看一下?br /> 3Q网上的2.1配置没有讲到的一点就是,修改 <authorizedAddresses>127.0.0.0/8</authorizedAddresses>Z局域网q播地址Q比?92.168.1.0。目的是Z允许那个|段内的机器可以讉Kq个邮g服务?br /> 否则你在局域网内其他机器是不能发外|邮件的。它会报530的错误?br />
最后一点,是注释掉下边这?br /> <mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">
            <processor> relay-denied </processor>
            <notice>550 - Requested action not taken: relaying denied</notice>
         </mailet>

其实Q不用到|上查资料。直接看q个config。xml里边的说明,已l够了?/p>

sam.chuan.yang 2008-11-26 13:24 发表评论
]]>
վ֩ģ壺 | | | | | | «Ϫ| | ν| ѷ| | ϰˮ| ½| | | | ²| Ϫ| | ٹ| | | Ϻ| ¤| | | ͳ| | | ƽ| ̽| | Զ| ˰| ˳| Ժ| ʯɽ| ʯ| Ȫ| μ| ۰|