??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-cnFri, 16 May 2025 23:37:19 GMTFri, 16 May 2025 23:37:19 GMT60Hander与HanderThreadQLooper以及(qing)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以及(qing)MessageQueue和Message之间的关p?

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

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

1QHandler对象 中有两个属性,一个是来自于当前线E(或者拥有Looper对象的线E)(j)的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Ҏ(gu)Q会(x)不断的从该队列中dmessage?/p>

象,q调用messgae对象中的Hander属性对象的dispatherMessageQmsgQ方法,该方法,是?x)?/p>

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


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

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

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


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

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

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

的handlerd?/p>


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

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

象。android提供已经l我们提供了(jin)一U这L(fng)一个类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Ҏ(gu)Q包括文件的上传?/span>
2Q拦截器的配|和功能与struts2一模一栗?/span>
3Q默认主持几U视图方式:(x)jsonQvelocity。stream?/span>
4Q容易扩展,可以Ҏ(gu)需要扩展页面渲染器?/span>
5Q请求地址可灵z配|?/span>
6Q同struts2一样可以选择配置spring做bean容器。当然也可以不用?/span>
7Q默认集成了(jin)一个小的定时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中就犯了(jin)一个低UbugQ那是永远找不到web应用目录?代码在:(x)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来?jin)?/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:(x)W一c,博客文章Q新闻,Q百培网站中的课E信息,分校信息Q地图数据等Q?br />   W二c:(x)学校各种门户Q聚集页面。比如网站的首页Q?br />其中W一c:(x)变化最,一旦生,变化的可能性就很小?br />W二U:(x)讉K机率很大Q时常变化,主要q辑h员手动维护?/p> <p>Ҏ(gu)Q:(x)提供两台memcached服务器Q主从关p,保证数据E_Q,访问这两类数据的方法缓存。在数据变更以后更新~存卛_<br />主要目的是隔频J的数据的访问?br />Ҏ(gu)Q:(x)这两类数据都生成静(rn)态html文Ӟ通过nginx指定前台缓存访问。缺Ҏ(gu)更新数据后要生成新的文gQ担?j)时间久?br />以后有磁盘碎片。另外多ơ读取文Ӟ可能有磁盘io影响。如果缓存到前台Q后台数据变更了(jin)Q前台可能很隑־到新的版?br />Ҏ(gu)Q:(x)第一cȝ成静(rn)态文ӞW二c通过Ҏ(gu)~存hQ看上去好,但是我觉得实现v来比较困难?br />实际上方案2Q3都有一个实C比较ȝ(ch)的地方,那就是所有的面头部有一个用L(fng)d信息。如果缓存成文gq样我目前所?br />头部的数据只能通过ajax来得M(jin)Q这样不但多?jin)一ơ网lioQ也不允?dng)R面可以后退?/p> <p>另外Q我做这个方案有两个目的Q一U就是提高访问速度Q另外就是想从缓存的基础上做数据库读写分,以便某些l计数据可以白天<br />?qing)时的?/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Ҏ(gu)来创建类Q构造函敎ͼ(j)Q这个类以下用sb代替?br /> q个cd数默认会(x)有这些属性(cd性)(j)?br /> superclassQ父c,也就是第一个或W二个参数的prototype属性对象。(具体Ҏ(gu)传入的参数类型决定)(j)
superclass(): 父类Q?sb.propertype? q是一个函敎ͼ该函数返回父cȝpropertype对象
supr():同上
constructor()Q构造函敎ͼQsb函数的propertype对象下)(j)实际上引用的是sb函数自己?br /> override(o)Q重写方法,Qsb函数下)(j)Q调用的?Ext.override(sb, o);也就是将o中的属性复制到sb的propertype下?br /> override(o)Q重写方法,Qsb.propertype下)(j)也就是将o的属性复制到sb的propertype下?br /> extend(o):(sb函数?,该函数调用的是Ext.extend(sb.o);

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

通过代码分析Q可以看出Ext.extendҎ(gu)有两个应用:(x)
W一Q?br /> 因ؓ(f)js没有重构语法Q所以我们没办法定义jsҎ(gu)的重构,而上边这个extendҎ(gu)Q可以说是一U重构的实现。因为,我们通过代码的分析,我们可以ȝ出extendҎ(gu)的参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ؓ(f)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即父类构造函敎ͼ(j)

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

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

constructorҎ(gu)?/p>

以下q几U情况都不会(x)有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么做的目的是要_(d)定义一个类Q构造函数就是constructorҎ(gu)Q如果没昄定义q个Ҏ(gu)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里׃(x)弹出 this is  a 的提C?
W二U方式:(x)修改现有cȝcȝ?br /> 2:extend(Calss sb,Class sp);
q个Ҏ(gu)的目的其实之一U包装,是将sbl承于sp下,不管sb是不是ext框架下的c,在这个方法执行后sb成?jin)ext框架
下的cȝ构了(jin)
3:extend(Calss sb,Class sp,Object overrides);
除了(jin)有第二种Ҏ(gu)的功能外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的该Ҏ(gu)传递回ȝQ实际上是通过DefaultWorkflowInterceptor拦截器拦截回ȝQ,所以这个时候页面就找不到sleect的数据集合,从而报错。有的h也许?x)问Q修改input的type为redirectQ直接掉转到那个action上去Q呵呵,q种Ҏ(gu)虽然可以保证得到select的数据集合,因ؓ(f)redirect的性质Q我们丢׃(jin)之前验证的错误信息。所以还是不能解决问题,那么有的人可能说?jin),那么改用chain可以了(jin)吧,如果改用chainQ我们知道,chain是action铄掉{Q执行actionq是要经q拦截器Q所以因Z带有验证错误信息Q你q是?x)被DefaultWorkflowInterceptor拦截器拦截,q是?x)报错,而且是chainN?br />     其实Q可以反一U思\Q既然走跌{不成功,我们可不可以在页面上下功夫呢。其实我们的select的list能不能不l过action而直接得到数据呢Q是可以的,我们的ognl可以讉K某个对象的某个方法,也可以访问某个静(rn)态类的静(rn)态属性,?rn)态方法。所以我们可以将q些数据通过对象Ҏ(gu)讉KQ也可以通过?rn)态类的静(rn)态方法去讉KQ具体怎么做,Ҏ(gu)需要写可以了(jin)。代码就不在q里写了(jin)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(fng)事情Q其实我们用jcreator来做的话Q够了(jin)。而jcreatorq行h也就50多mQ我想现在再差的g环境应该也跑得v来了(jin)。那么写E序最重要的是debugQ我们怎么来配|debug呢。其实这里用tomcat的远E调试就可以?jin),我们只需要在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版)(j)然后点击okQ前提是tomcat已经启动?jin)哈Q这个时候jreactorp入了(jin)debug模式Q你可以调试程序了(jin)?/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外包到?jin)H公司在L?jng)的bi目l,更有q的是,我做?jin)我喜欢的前台编码工作。可是,{我开始正式工作的时候,我才发现我接下来的工作的痛苦。这是一个老系l,利用的是struts+spring+hibernatel典框架Q应该说q个东西q是很不错的。就是太ȝ(ch)?jin),我们每次修改一个功能或d一个功能,臛_都要接触??个配|文Ӟ其中业务层的bean需要spring配置两个Qؓ(f)本模块加一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。这样其实很ȝ(ch)Q比如我有一个增删查改的面Q我放C个actionc里d理,其实在这个类里,我有不同的表单,比如Q查询表单,实体表单。针对不同的Ҏ(gu)Q传入不同的表单对象。还有就是对于以单的增加删除Q很希望Q不多做M事情Q直接从面表单一步就到数据库?jin)。struts1倒是能解册个问题,但是始终是要多写一个actionformc,q要去配|他。总觉得麻?ch)?br />
      lg所qͼ(x)其实我想解决配置文g多和J琐的问题,另外是希望mvc框架提供同一个action可以传入不同的表单实体,同一个actionҎ(gu)可以接受多个不同的表单实体?br />       我的愚思:(x) 我是q么想的Q我觉得Q解决配|文件的问题Q完全可以利用注解来配置Q我们的业务层,持久层完全可以利用注解来解决Q甚x们的mvc其实也可以利用注解来解决。业务层Q持久层׃说了(jin)Qspring+hibernate早就q么q了(jin)。至于mvcQ其实流行框架也q么q了(jin)Q不q我是想DIY一把,利用spring强大的bean理能力Qmvc的action直接放在spring里了(jin)Q通过分析h地址得到bean的名Uͼ从而知道调用哪一个actionQ分析请求中的特定参敎ͼ来确定访问a(chn)ction bean里对应的Ҏ(gu)?br />      详细Q?整个框架因ؓ(f),所以仅需要一个filter可以了(jin)Q所有的h都通过q个filterQ在它里面我的主要工作就是分析请求地址Q取出它里面含有.do的字串作为action bean的nameQ然后通过springq回该action对象。通过取出action参数|做ؓ(f)此次h需要调用的action Ҏ(gu)?br /> 在调用实际的action之前我们q需要做一个事情,那就是将提交上来的表单,分门别类的装入到不同的javabean里(实体beanQ或查询beanQ,通过注解讉K上边扑ֈ的actionҎ(gu)Q找到该Ҏ(gu)对应的@actionForm注解Q提取该Ҏ(gu)需要的javabeanQP代出每一个bean的属性名Uͼ以及(qing)属性类型,q用propertyManager所理的不同类型的属性编辑器表单里对应的数据{化ؓ(f)属性值存入到javabean里。(当然q里需要将表单里的html元素名称与javabean里的属性名UC_(d)(j)。最后一步,关于actionҎ(gu)的返回,我做?jin)一个处理器。将q回的数据存入到map中,Ҏ(gu)需要做不同的返回?br /> Z(jin)方便处理ajaxq回Q我也DIY?jin)一个json处理器,所有对象{化成json字串Q供前台面调用?br />
      个h体会(x)Q?q个框架有几个好处,action c,不用l承Mc,看上d是一个简单的javac,Ҏ(gu)不再依赖requestQresponse对象Q方便做单元试。同一个方法可以传入不同的javabean对象Q可直接持久层对象与表单数据绑定,不用多写额外的actionForm对象。加上spring的注解功?br /> 基本减少?0%的配|信息,而且不容易因为配|失误而出错。方便做权限理Q通过hQ控制actionQ控制方法,只要分析hQ就可用权限\业务?br />       我的一个案列:(x)后来利用q个框架为客户做?jin)一个考核pȝ。整体代码应该说好是非常z的。比如我的一个简单存储。就如下单:(x)
          

@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的配|很有人提?qing),l果配出来的服务器老是不能通过局域往外部发邮Ӟ一直报530的错误。后来没有办法,M(jin)一下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当然你也可以是你的机器名)(j)目的是让局域网中的机器扑ֈ你这台服务器
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是兰州?sh)信的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(jin)允许那个|段内的机器可以讉Kq个邮g服务?br /> 否则你在局域网内其他机器是不能发外|邮件的。它?x)?30的错误?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够了(jin)?/p>

sam.chuan.yang 2008-11-26 13:24 发表评论
]]>
վ֩ģ壺 | | | | ߷| | | ³ľ| | ʯ| | | | ʷ| | | | | ɽ| | ƽ| | ½| | ɽ| | β| | | ƽ| Ͷ| | ɽ| | | ǭ| Ҷ| ɽ| Զ| | ų|