??xml version="1.0" encoding="utf-8" standalone="yes"?>在线亚洲精品,精品产品国产在线不卡,97精品视频在线http://www.aygfsteel.com/ktoo/category/24712.htmlzh-cnSun, 17 Feb 2008 20:00:44 GMTSun, 17 Feb 2008 20:00:44 GMT60Struts2+Hibernate中关闭Session的filter问题http://www.aygfsteel.com/ktoo/archive/2008/02/17/180226.htmlKTOOKTOOSat, 16 Feb 2008 17:37:00 GMThttp://www.aygfsteel.com/ktoo/archive/2008/02/17/180226.htmlhttp://www.aygfsteel.com/ktoo/comments/180226.htmlhttp://www.aygfsteel.com/ktoo/archive/2008/02/17/180226.html#Feedback0http://www.aygfsteel.com/ktoo/comments/commentRss/180226.htmlhttp://www.aygfsteel.com/ktoo/services/trackbacks/180226.html用Struts2+Hibernate开发WebE序
发现|站老是一动不?在DAO中用  Statistics stats = HibernateUtil.getSessionFactory().getStatistics();
查看?jin)统计结?发现打开50个Session只有20个关闭了(jin).
看结构也没有什么问?我用两个ThreadLocal 存放Session 和Transaction,再用一个Filterd?各个配置表面上也是没有问?可是做测试的时候才发现关闭Session的FilterҎ(gu)是没有q行,或是有时q行,有时不运?
仔细想了(jin)?调整?jin)一下sessionclosefilter和Struts2的filter的顺序如?l于可以关闭?/p>

 <filter>
        <filter-name>HibernateSessionCloseFiler</filter-name>
        <filter-class>com.hitecin.struts2.filter.HibernateSessionClose</filter-class>
    </filter>
    <filter>
        <filter-name>struts-cleanup</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
    </filter>
      <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>

      <filter-mapping>
        <filter-name>HibernateSessionCloseFiler</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
     <filter-mapping>
         <filter-name>struts-cleanup</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>



KTOO 2008-02-17 01:37 发表评论
]]>
Struts2中出?/title><link>http://www.aygfsteel.com/ktoo/archive/2008/02/03/179175.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Sun, 03 Feb 2008 07:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/ktoo/archive/2008/02/03/179175.html</guid><wfw:comment>http://www.aygfsteel.com/ktoo/comments/179175.html</wfw:comment><comments>http://www.aygfsteel.com/ktoo/archive/2008/02/03/179175.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ktoo/comments/commentRss/179175.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ktoo/services/trackbacks/179175.html</trackback:ping><description><![CDATA[2008-02-02 14:32:22,109 WARN - OgnlUtil.internalSetProperty(369) | Caught OgnlException while setting property 'firmCode' on type 'com.test.ProductViewBean'.<br /> java.lang.IllegalArgumentException<br />  at sun.reflect.GeneratedMethodAccessor196.invoke(Unknown Source)<br />  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />  at java.lang.reflect.Method.invoke(Method.java:585)<br />  at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:517)<br />  at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:812)<br />  at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:964)<br />  at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:75)<br />  at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:131)<br />  at com.opensymphony.xwork2.util.OgnlValueStack$ObjectAccessor.setProperty(OgnlValueStack.java:68)<br />  at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:1656)<br />  at ognl.ASTProperty.setValueBody(ASTProperty.java:101)<br />  at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:177)<br />  at ognl.SimpleNode.setValue(SimpleNode.java:246)<br />  at ognl.Ognl.setValue(Ognl.java:476)<br />  at com.opensymphony.xwork2.util.OgnlUtil.setValue(OgnlUtil.java:186)<br />  at com.opensymphony.xwork2.util.OgnlUtil.internalSetProperty(OgnlUtil.java:360)<br />  at com.opensymphony.xwork2.util.OgnlUtil.setProperty(OgnlUtil.java:135)<br />  at com.opensymphony.xwork2.util.OgnlUtil.setProperty(OgnlUtil.java:116)<br />  at org.apache.struts2.components.Bean.addParameter(Bean.java:147)<br />  at org.apache.struts2.components.Param.end(Param.java:114)<br />  at org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSupport.java:43)<br />  at _jsp._product._productcatagorysecondlist__jsp._jspService(_productcatagorysecondlist__jsp.java:105)<br />  at com.caucho.jsp.JavaPage.service(JavaPage.java:60)<br />  at com.caucho.jsp.Page.pageservice(Page.java:570)<br />  at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179)<br />  at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)<br />  at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)<br />  at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:277)<br />  at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:106)<br />  at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:139)<br />  at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:343)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)<br />  at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:213)<br />  at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)<br />  at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)<br />  at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:161)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:115)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />  at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />  at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />  at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />  at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)<br />  at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507)<br />  at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)<br />  at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)<br />  at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)<br />  at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)<br />  at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)<br />  at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)<br />  at com.caucho.server.hmux.HmuxRequest.handleRequest(HmuxRequest.java:420)<br />  at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514)<br />  at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)<br />  at com.caucho.util.ThreadPool.run(ThreadPool.java:442)<br />  at java.lang.Thread.run(Thread.java:595)<br /> <br /> <br /> <br /> q个错误有时出现Q有时没有,又仔l看?jin)一下源码,发现'firmCode'q个属性的cd是int,把它改ؓ(f)Integer...<br /> 应该没问题(sh)(jin)Q这是Struts2中类型{换的问题 <img src ="http://www.aygfsteel.com/ktoo/aggbug/179175.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ktoo/" target="_blank">KTOO</a> 2008-02-03 15:18 <a href="http://www.aygfsteel.com/ktoo/archive/2008/02/03/179175.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2在Resin3.0X中运行的配置http://www.aygfsteel.com/ktoo/archive/2007/12/17/168239.htmlKTOOKTOOMon, 17 Dec 2007 07:30:00 GMThttp://www.aygfsteel.com/ktoo/archive/2007/12/17/168239.htmlhttp://www.aygfsteel.com/ktoo/comments/168239.htmlhttp://www.aygfsteel.com/ktoo/archive/2007/12/17/168239.html#Feedback0http://www.aygfsteel.com/ktoo/comments/commentRss/168239.htmlhttp://www.aygfsteel.com/ktoo/services/trackbacks/168239.html 从网上搜?jin)一下,解决Ҏ(gu)如下Q?br /> 因Resin的mod_caucho插g一般情况下仅对Servlet,JSP服务Q不?x)对Struts2中的Filter方式提供|址服务Q?br /> 因此可以使用"Special servlet-mapping"?br /> 在WEB—INF目录下再新徏resin-web.xml,作如下配|?br />
<web-app xmlns="http://caucho.com/ns/resin">
 <servlet-mapping url-pattern='/struts/*' servlet-name='plugin_match'/>
 <servlet-mapping url-pattern='/other/*' servlet-name='plugin_match'/>
 <servlet-mapping url-pattern='*.action' servlet-name='plugin_match'/>
 <servlet-mapping url-pattern='*.html' servlet-name='plugin_match'/>
 <servlet-mapping url-pattern='*.do' servlet-name='plugin_match'/>
 <servlet-mapping url-pattern='/dwr/*' servlet-name='plugin_match'/>             
</web-app>
Q问题解决了(jin)

KTOO 2007-12-17 15:30 发表评论
]]>
FilterDispatcherhttp://www.aygfsteel.com/ktoo/archive/2007/08/28/140631.htmlKTOOKTOOTue, 28 Aug 2007 10:56:00 GMThttp://www.aygfsteel.com/ktoo/archive/2007/08/28/140631.htmlhttp://www.aygfsteel.com/ktoo/comments/140631.htmlhttp://www.aygfsteel.com/ktoo/archive/2007/08/28/140631.html#Feedback0http://www.aygfsteel.com/ktoo/comments/commentRss/140631.htmlhttp://www.aygfsteel.com/ktoo/services/trackbacks/140631.html它的作用如下!
  1. 用来装蝲配置和设|静(rn)态资源的package
      public void init(FilterConfig filterConfig) throws ServletException {        
            init();       
            String param 
    = filterConfig.getInitParameter("packages");
            String packages 
    = "org.apache.struts2.static template org.apache.struts2.interceptor.debugging";
            
    if (param != null) {
                packages 
    = param + " " + packages;
            }
            
    this.pathPrefixes = parse(packages);
        }
     
      
    public void init() {

            
    if (configurationManager == null) {
                configurationManager 
    = new ConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME);//用来初始化ConfigurationManager
            }

            init_DefaultProperties(); 
    // org.apache.struts2.default.properties配置的provider初始?/span>
            init_TraditionalXmlConfigurations(); // struts-default.xml,struts-plugin.xml,struts.xml配置的provider初始?/span>
            init_LegacyStrutsProperties(); //
            init_ZeroConfiguration(); //
            init_CustomConfigurationProviders(); //
            init_MethodConfigurationProvider();
            init_FilterInitParameters() ; 
    //
            init_AliasStandardObjects() ; //

            Container container 
    = init_PreloadConfiguration();
            init_CheckConfigurationReloading(container);
            init_CheckWebLogicWorkaround(container);

        }
  2. 包装转换h
     1     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
     2 
     3         
     4         HttpServletRequest request = (HttpServletRequest) req;
     5         HttpServletResponse response = (HttpServletResponse) res;
     6         ServletContext servletContext = getServletContext();
     7 ………………………………
     8             request = prepareDispatcherAndWrapRequest(request, response);//作些~码准备和ؓ(f)?jin)上传文件作包?br> 9             ActionMapping mapping= actionMapper.getMapping(request, getConfigurationManager()); // 把请求和配置文g挂勾            
    10 
    11          
    12 ……………………………………
    13          serviceAction(request, response, servletContext, mapping);//创徏Action上下文,Ҏ(gu)l定的mapping装蝲ActionProxy,然后指定的ActionҎ(gu)被执行,输出q入response
    14 
    15           ActionContextCleanUp.cleanUp(req);//
    16      ………………
    17     }
    18 


KTOO 2007-08-28 18:56 发表评论
]]>
Struts2的执行流E?/title><link>http://www.aygfsteel.com/ktoo/archive/2007/08/20/138229.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Mon, 20 Aug 2007 13:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/ktoo/archive/2007/08/20/138229.html</guid><wfw:comment>http://www.aygfsteel.com/ktoo/comments/138229.html</wfw:comment><comments>http://www.aygfsteel.com/ktoo/archive/2007/08/20/138229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ktoo/comments/commentRss/138229.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ktoo/services/trackbacks/138229.html</trackback:ping><description><![CDATA[<br> <div style="text-align: left;">Struts2的体pȝ构如下图所C?<br> <div style="text-align: center;">  <img style="width: 561px; height: 607px;" alt="" src="http://www.aygfsteel.com/images/blogjava_net/ktoo/Struts2-Architecture.png"><br> <div style="text-align: left;">   一个HttpServletRequesth一个Actionl历如下程!<br> <ol> <li>当用了(jin)SiteMesh Plugin{技术,首先调用ActionContextCleanUp filter和其它需要的filter或你写的filter?/li> <li>接下来FilterDispacher被调用,q是核心(j)的filter,q个filter?x)从ActionMapper中去找有没有与请求相对应的Action,如果没找到就?x)报?</li> <li>在ActionMapper中找到要执行的Action后,控制权{到ActionProxy,ActionProxy参考struts.xml文gQ创建ActionInvocationc?</li> <li>ActionInvocation负责Action执行前Interceptor的调用和Action执行的的控制!Action执行完毕q回ӞActionInvocation又把执行l果和struts.xml中配|的l果兌q来!(感觉ActionInvocation像Action的父Ԍ把Actionq个孩子的一切都安排?_-)</li> <li>然后是配置中对应结果Template的绘制了(jin)!</li> <li>l制Template 后,ActionInvocation可以再去调用Interceptor</li> <li>最后,在向hq回l果Ӟweb.xml中配|的filterq可以对它处理一?<br></li> </ol> </div> </div> </div> 相关c说?<br> <ul> <li><span style="font-weight: bold;">ObjectFactory </span>此类负责创徏框架核心(j)c,上面体系中所有类都是由它创徏?Action,Results,Interceptors{?!我们可以l承它以控制核心(j)cȝ实例!</li>   <li><span style="font-weight: bold;">FilterDispatcher</span>: 主要有四个作?<br></li> </ul> <ol> <li>执行Action,</li> <li>自动清理ActionContext,防止内存泄漏Q?/li> <li>为静(rn)态内Ҏ(gu)?如javaScript文g,CSS 文g!像很多AJAX UI标签都需要很多javaScript文gQ它们就在org.apache.struts2.static.package下面Q而框架会(x)自动Lorg.apache.struts2.static和template文g?</li> <li>把XWork中的interceptor链从h生命周期中清?<br></li> </ol> <ul> <li><span style="font-weight: bold;">ActionContextCleanUp</span>:  q是个filterQ可以用来同FilterDispatcher协作Q得框架更Ҏ(gu)与SiteMesh集成!使得FilterDispatcher不清理ActionContextQ而是L理这个filter;</li> <li><br></li> </ul>          <br><img src ="http://www.aygfsteel.com/ktoo/aggbug/138229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ktoo/" target="_blank">KTOO</a> 2007-08-20 21:40 <a href="http://www.aygfsteel.com/ktoo/archive/2007/08/20/138229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 Ajax学习(fn)http://www.aygfsteel.com/ktoo/archive/2007/08/15/136838.htmlKTOOKTOOWed, 15 Aug 2007 02:38:00 GMThttp://www.aygfsteel.com/ktoo/archive/2007/08/15/136838.htmlhttp://www.aygfsteel.com/ktoo/comments/136838.htmlhttp://www.aygfsteel.com/ktoo/archive/2007/08/15/136838.html#Feedback0http://www.aygfsteel.com/ktoo/comments/commentRss/136838.htmlhttp://www.aygfsteel.com/ktoo/services/trackbacks/136838.htmlstruts发行时已l定?jin)dojo ajaxcd,q提供了(jin)一?ajax tag,从简单的学v,先看ajax tag!

一.ajax Tag

   ajax tag

    Ajax Tag 说明
    与普通div不同的是,它可以通过ajaxh
    使用ajax更新另外一个元素或提交form
    使用ajax更新目标元素
    一个可以加入动态和?rn)?s:div> 的panel
    使用ajax在现有数据的的基上更新另外一个元?/td>
ajax tag公有属?
    属?/td> 赋D?/td>
    href 用来发送请求的url
    listenTopics ?x)引发目标tag重新载入内容或发生动?指定多个topics 时用逗号隔开
    notifyTopics tag公开的一个标?指定多个topics时用逗号隔开
    showErrorTransportText 讄错误信息是否昄
    indicator 在requestq行时显C的东东

关于Tag的详l说明可以看APIQ要在struts2中用ajax tag只要加上<s:head theme="ajax"/>

然后在用的ajax tag中加上theme="ajax"可以了(jin)!


二,事g
  • 直接使用url或给Action属?
     <s:url id="ajaxTest" value="/AjaxTest1.action"/>
     
    <s:submit type="submit"  theme="ajax" value="SUBMIT" targets="t1" href="%{ajaxTest}" align="left" tooltip="Hello"/>
  • 使用topics注册事g
     1 
     2   <script type="text/javascript">//topics注册
     3  …………
     4 …………      dojo.event.topic.subscribe("/after",function(data,type,e)
     5       {
     6           alert("inside a topic event type="+type);
     7           dojo.byId("t2").innerHTML="SUBSCRIBE"+e.toString()+data.toString();
     8 //其中data表示q回的结果数据,
     9  //type表示q回的类型before,after,load之一
    10 //e表示XMLHttpRequest对象
    11       }  );
    12   </script>
    13 
    14   <s:submit type="submit" theme="ajax" value="提交" targets="t1" href="%{ajaxTest}" align="left" notifyTopics="/after"/>
    15 //targets表示攄果值的地方
  •  使用Handler
     
     
    <script type="text/javascript">
          function handler(widget,node)
          {
              alert(
    "I will handle this");
              dojo.byId(
    "t2").innerHTML="I Have Done";
          }      
      
    </script>
    <s:div handler="handler" id="t2" theme="ajax" cssStyle="border:1px solid yellow">Inital Coment</s:div>
    //此div?x)在面W一ơ加载的时候调用这个handler



KTOO 2007-08-15 10:38 发表评论
]]>
struts2出错http://www.aygfsteel.com/ktoo/archive/2007/08/13/136510.htmlKTOOKTOOMon, 13 Aug 2007 13:42:00 GMThttp://www.aygfsteel.com/ktoo/archive/2007/08/13/136510.htmlhttp://www.aygfsteel.com/ktoo/comments/136510.htmlhttp://www.aygfsteel.com/ktoo/archive/2007/08/13/136510.html#Feedback0http://www.aygfsteel.com/ktoo/comments/commentRss/136510.htmlhttp://www.aygfsteel.com/ktoo/services/trackbacks/136510.html用Tomat5.5.20struts2+IntelliJ IDEA开?刚开始一切正?今天L要出C面的出错消息,
让我十分恼火,于是上网?查Document,用了(jin)NU方法还是无?br>Unable to load bean: type:c
.......
Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContextAware
.....
后来惌v昨天的调试LOG,
gIDEA启动Tomat的时候还?sh)(x)去加蝲Tomat中的Web工程,我昨天下午才把struts2的两个war例子Deploy上去,而且q两个例子运行正怸惛_q?马上把这两个例子全删?
  没想到IDEA调试不出错了(jin)!嘿嘿!

 
 看来com.opensymphony.xwork2.ObjectFactory只能加蝲一?br>不过后面那句Casued by....是什么意思呢?

忘(sh)(jin)一个关键的问题,我部|的时候用的是Tomcat的Manager去部|war包的Ҏ(gu),
昨天直接把show-case文g攑ֈwebapp下面,发现没有出错


KTOO 2007-08-13 21:42 发表评论
]]>
OGNL(?http://www.aygfsteel.com/ktoo/archive/2007/08/12/136229.htmlKTOOKTOOSun, 12 Aug 2007 12:38:00 GMThttp://www.aygfsteel.com/ktoo/archive/2007/08/12/136229.htmlhttp://www.aygfsteel.com/ktoo/comments/136229.htmlhttp://www.aygfsteel.com/ktoo/archive/2007/08/12/136229.html#Feedback0http://www.aygfsteel.com/ktoo/comments/commentRss/136229.htmlhttp://www.aygfsteel.com/ktoo/services/trackbacks/136229.html 一.q算W?/td>     OGNL借用?jin)java的大多数W号,而且它还加了(jin)一些新的符?
如下?
W号 getValue()要注意事?/td> setValue()注意事项
e1,e2
         序q算W?/td>
e1和e2都会(x)使用同一个源对象计算?
且会(x)q回e2的计?/td>
getValue使用e1
setValue使用e2
e1=e2
      {于q算W?/td>
getValue使用e2,setValu使用e1,且e2的结果作为目标的对象  
e1?e2:e3    
e1||e2,e1 or e2    
e1|e2,e1 bor e2    
e1^e2, e1 xor e2    
e1&e2 ,e1 band e2    
e1==e2,e1 eq e2
e1!=e2, e1 neq e2
   
e1<e2,e1 lt e2
e1<=e2 ,e1 lte e2
e1>e2 ,e1 gt e2
e1>=e2 ,e1 get e2
e1 in e2
e1 not in e2
   
e1<< e2,e1 shl e2
e1>>e2 ,e1 shr e2
e1>>> e2,e1 ushr e2
   
e1+e2
e1-e2
   

e1*e2
e1/e2
e1%e2
   

+e
-e
!e
~e
e instanceof class
   
e.method(args)

e.property

e1[e2]

e1.{e2}

e1.{?e2}
         选择
e1.(e2)
   子表辑ּ的计?br>e1(e2)
  表达式计?/td>
   
constant
        帔R
(e)
        表辑ּ加入括号?br>method(args)
       Ҏ(gu)调用
property
       属性调?
[e]
     通过索引得到?br>{ e,.....}
     创徏List
#variable
     上下文中变量的引?br>@class@method
(args)
     ?rn)态方法调?br>@ class@field
    ?rn)态字D调?br>new class(args)
  构造器调用
new array-component-class[] {e,....}
  数组创徏
#{e1:e2,...}
     Map创徏

#@classname@{e1:e2,....}
   创徏指定Map子类型的Map

:[e]
   Lambda表达?br>

q些是最基础的运符

 
























                               

KTOO 2007-08-12 20:38 发表评论
]]>
OGNLhttp://www.aygfsteel.com/ktoo/archive/2007/08/12/136226.htmlKTOOKTOOSun, 12 Aug 2007 11:50:00 GMThttp://www.aygfsteel.com/ktoo/archive/2007/08/12/136226.htmlhttp://www.aygfsteel.com/ktoo/comments/136226.htmlhttp://www.aygfsteel.com/ktoo/archive/2007/08/12/136226.html#Feedback0http://www.aygfsteel.com/ktoo/comments/commentRss/136226.htmlhttp://www.aygfsteel.com/ktoo/services/trackbacks/136226.htmlOGNL(Object Graph Navigation Language)是一U表辑ּ语言,使用它可以表达式与java对象中的getter和setter属性绑?

且一个OGNL表达式可以进行存和取两方面的操作.

1).使用OGNL的好?/strong>

  • 是一U?可以把GUI元素和model objectl定的语a!且通过OGNL的TypeConverter

            机制可以更容易实现值类型的的{?

  • 可以把Weblg和后台的model l定(WebOGNL, Tapestry,WeboWork,WebOjbects)

2).OGNL表达?/strong>

OGNL使用集合

  使用Collection中的元素ȝ索引,?得到array中第一个元素表辑ּ为array[0]

List

           例子:           name in{null,"init"}       q个例子 当name属性是 I或"init"q回true ,

      而在q个q程中会(x)创徏List接口的一个实?具体的子cL有指?/p>

本地Arrays     OGNL支持创徏Java本地数组!  且允许给定存在的list或设定数l的的大?/p>

                              new int[] {1,2,3}   创徏一个int 数组

                              new int[5]   创徏?jin)一个int数组,它的元素的gؓ(f)0

Maps    创徏Map     #{"foo":"fool value","bar":"bar value"}

        我们甚至可以指定一个特定的java Map Class d建Map

        #@java.util.LinkedHashMap@{"foo":"foo value","bar":bar value"}; 

        Java Collection各自有一些特D的属?/p>
Collection Special Properties
Collection(子类有Map List Set) size         集合的大?br>isEmpty   如果集合为空gؓ(f)true
List iterator  得到此list的P代器
Map keys      得到一个包涉|有键值的Set
values  得到一个包括所有值的Collection
Set iterator 得到此Set的P代器
Iterator next       得到集合中的下一个object
hasNext如果集合中有下一个object则返回true
Enumeration next  如上 
hasNext如上
nextElement  和next一L(fng)作用
hasMoreElements和hasNext一样作?/td>

     

 

OGNL调用JavaBean 索引属?/strong>

JavaBean索引属性的格式如下

             public PropertyType[] getPropertyName()

             public void setPropertyName(propertyType[] anArray)

            public PropertyType getPropertyName(int index);

            public void setPropertyName(int index,PropertyType value)

OGNL可以很容易地通过索引存取q些属? Example

         someProperty[2] 

         在这个例子中OGNL?x)自动找到getSomeProperty(2)或存到setSomeProperty  (2,value)?

调用OGNL对象索引属?/strong>

         对象索引属性格?/p>

           public PropertyType getPropertyName(IndexType index)

            public void setPropertyName(IndexType index,PropertyType value)

            PropertyType 和IndexType 必需跟集合和getҎ(gu)中的cd盔R

 

调用Ҏ(gu)

              OGNL调用Ҏ(gu)和Java调用Ҏ(gu)有一点区?因ؓ(f)OGNL是被解释的ƈ且必需在运行时选择正确的方?所以OGNL调用Ҏ(gu)旉?jin)提供所需要参数没有额外的cd信息,OGNL选择和提供的参数最配的Ҏ(gu),如果有两个或更多的方法符合匹?它们中的一个会(x)L的被选择(在WebWork中会(x)选择ValueStack上面的方?

             特别一提的?,null可以匚w所有非基础cd,所有它通常?x)导致一个不定的方法被调用

变量的调?/strong> 

          OGNL有一个简单的变量配置,在这儿你可以存储中间值和重新使用q些中间?或者仅仅命名以使表辑ּ更易理解! 在OGNL中所有变量都是全局?使用变量的格式是"#variable"

           OGNL把当前的object在每点的表达式值存攑֜"this"q个变量?而且"this"可以像其它变量一样??

                    listeners.size().(#this>100?2*this:20+#this) 如果listeners中的元素大于100?x)返回元素数量的两?否则数量加上20

          可以昑ּ地给变量赋?只要在变量的后边写一个表辑ּ卛_

               #var -99



Powered by ScribeFire.



KTOO 2007-08-12 19:50 发表评论
]]>
վ֩ģ壺 | ɽ| | Ž| | | | | | ³ƶ| | Į| ٺ| | | ٲ| ʡ| Į| ӱ| | | | | | ³ľ| û| | | | | | ̨| | | | ƺ| Ϫ| | ޳| | |