??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲蜜臀av乱码久久精品,高清欧美日韩,国内自拍一区http://www.aygfsteel.com/dragonofson/category/12320.htmlzh-cnWed, 28 Feb 2007 05:12:14 GMTWed, 28 Feb 2007 05:12:14 GMT60Spring事务原理http://www.aygfsteel.com/dragonofson/articles/54690.htmlDragonofsonDragonofsonFri, 23 Jun 2006 07:35:00 GMThttp://www.aygfsteel.com/dragonofson/articles/54690.htmlhttp://www.aygfsteel.com/dragonofson/comments/54690.htmlhttp://www.aygfsteel.com/dragonofson/articles/54690.html#Feedback0http://www.aygfsteel.com/dragonofson/comments/commentRss/54690.htmlhttp://www.aygfsteel.com/dragonofson/services/trackbacks/54690.html
spring提供了几个关于事务处理的c: 
TransactionDefinition //事务属性定?br />TranscationStatus //代表了当前的事务Q可以提交,回滚?br />PlatformTransactionManagerq个是spring提供的用于管理事务的基础接口Q其下有一个实现的抽象cAbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager{都是这个类的子cR?br />
一般事务定义步骤:
TransactionDefinition td = new TransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try
{ //do sth
  transactionManager.commit(ts);
}
catch(Exception e){transactionManager.rollback(ts);}
 

spring提供的事务管理可以分Zc:~程式的和声明式的。编E式的,比较灉|Q但是代码量大,存在重复的代码比较多Q声明式的比~程式的更灵zR?br />
~程式主要用transactionTemplate。省略了部分的提交,回滚Q一pd的事务对象定义,需注入事务理对象.
void add()
{
    transactionTemplate.execute( new TransactionCallback(){
        pulic Object doInTransaction(TransactionStatus ts)
       { //do sth}
    }
}

声明式:
使用TransactionProxyFactoryBean:
<bean id="userManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager"><ref bean="transactionManager"/></property>
  <property name="target"><ref local="userManagerTarget"/></property>
  <property name="transactionAttributes">
   <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="update*">PROPAGATION_REQUIRED</prop>
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean>

围绕Poxy的动态代?能够自动的提交和回滚事务
org.springframework.transaction.interceptor.TransactionProxyFactoryBean
  • PROPAGATION_REQUIRED--支持当前事务Q如果当前没有事务,新Z个事务。这是最常见的选择?
  • PROPAGATION_SUPPORTS--支持当前事务Q如果当前没有事务,׃非事务方式执行?
  • PROPAGATION_MANDATORY--支持当前事务Q如果当前没有事务,抛出异常?
  • PROPAGATION_REQUIRES_NEW--新徏事务Q如果当前存在事务,把当前事务挂赗?
  • PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作Q如果当前存在事务,把当前事务挂v?
  • PROPAGATION_NEVER--以非事务方式执行Q如果当前存在事务,则抛出异常?
  • PROPAGATION_NESTED--如果当前存在事务Q则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIREDcM的操作?br />


Dragonofson 2006-06-23 15:35 发表评论
]]>
Spring视图解析?/title><link>http://www.aygfsteel.com/dragonofson/articles/54139.html</link><dc:creator>Dragonofson</dc:creator><author>Dragonofson</author><pubDate>Wed, 21 Jun 2006 03:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/dragonofson/articles/54139.html</guid><wfw:comment>http://www.aygfsteel.com/dragonofson/comments/54139.html</wfw:comment><comments>http://www.aygfsteel.com/dragonofson/articles/54139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dragonofson/comments/commentRss/54139.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dragonofson/services/trackbacks/54139.html</trackback:ping><description><![CDATA[1.InternalResourceViewResolver:适用于JSP来渲染视?面不用国际化,不需要ؓ不同得地区的用户昄不同的视图?br /><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><br /><property name="prefix"><value>/WEB-INF/JSP/</value></property><br /><property name="suffix"><value>.jsp</value></property><br /><font color="#ff1493"><property name="viewClass"><value>org.springframework.web.servlet.view.JstView</value></property><br />//面使用JSTL</font><br /></bean><br /><br />2.BeanNameViewResolver,XmlFileViewResover使用定制视图(PDF,Excel,囄)<br />BeanNameViewResolver(q回的是bean)<br />  <bean id="beanNameViewResolver" class="org.spring.framework.web.servlet.view.BeanNameViewResovler"><br /><bean id="courseList" class="com.CourseList">//courseList we是?new ModelAndView("courseList","courses",courses);<br /><br /><bean id="beanNameViewResolver" class="org.spring.framework.web.servlet.view.XmlFileViewResover"><br /><property name="location><br /><value>/WEB-INF/traning-views.xml</value><br /></property><br /></bean><br /><br />3.<bean id="bundleViewResolver" class="org.springframework.web.servlet.view.ResourceViewResolver"><br />   <property name="basename"><br /><value>view</value><br /></property><br /></bean><br />Ҏ用户的地理位|渲染不同的视图?img src ="http://www.aygfsteel.com/dragonofson/aggbug/54139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dragonofson/" target="_blank">Dragonofson</a> 2006-06-21 11:10 <a href="http://www.aygfsteel.com/dragonofson/articles/54139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring MVC表单验证http://www.aygfsteel.com/dragonofson/articles/54118.htmlDragonofsonDragonofsonWed, 21 Jun 2006 01:39:00 GMThttp://www.aygfsteel.com/dragonofson/articles/54118.htmlhttp://www.aygfsteel.com/dragonofson/comments/54118.htmlhttp://www.aygfsteel.com/dragonofson/articles/54118.html#Feedback0http://www.aygfsteel.com/dragonofson/comments/commentRss/54118.htmlhttp://www.aygfsteel.com/dragonofson/services/trackbacks/54118.html采取的是spring action 中的例子
验证一个Student对象
   1.implements Validator接口(org.springframework.validation.Validator)
         public class StudentValidator implements Validator
         {
            public boolean supports(Class clazz)//必须实现的方?br />            {return clazz.equals(Student.class) ;
            }
            public void validate(Object command,Errors errors)
           {
              Student student =(Student)command;
            // ValidationUtils.rejectIfEmpty  (Errors errors, String field, String errorCode, String defaultMessage)

               ValidationUtils.rejectIfEmpty(errors,"login","required.login","login is required");
               ValidationUtils.rejectIfEmpty(errors,"password","required.password","Password is required");
               ValidationUtils.rejectIfEmpty(errors,"firstName","required.firstName","firstNameis required");
               ValidationUtils.rejectIfEmpty(errors,"lastName","required.lastName","lastNameis required");
               ValidationUtils.rejectIfEmpty(errors,"city","required.login","cityis required");
                                            validateEmail(student .email,errors);
               validatePhone(student .phone,errors);
            }
            
            private static final String PHONE_REGXP="/(\\({0,1}(\\d{3})))/"
            private void validatePhone(String phone, Errors erros)
            {
             ValidationUtils.rejectIfEmpty(errors,"phone","required.phone","phoneis required");
             Perl5Util per5Util=new Perl5Util();
             if(!per5Util.math(PHONE_REGXP,phone))
            {
              errors.reject("invalid.phone","Phone number is invalid");
               }
               }    
              private static final String Email_REGXP="/(\\({0,1}(\\d{3})))/"
            private void validateEmail(String phone, Errors erros)
            {
             ValidationUtils.rejectIfEmpty(errors,"phone","required.phone","phoneis required");
             Perl5Util per5Util=new Perl5Util();
             if(!per5Util.math(Email_REGXP,email))
            {
              errors.reject("invalid.phone","Phone number is invalid");
               }
               }         
     

}
2.配置bean
      <bean id="methodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName"><value>method</value>
</property>
<property name="defaultMethodName"><value>view</value>
</property>
</bean>
<property name="validator"><bean class="com.StudentValidator "/> 
</property>
<property name="defaultMethodName"><value>view</value>
</property>
<bean name="/jsp/test.do" class="org.nightwalker.spaces.web.controller.TestController">
<property name="methodNameResolver">
<ref local="methodNameResolver"/>
</property>
</bean>

 

查看源代码:
MultiActionControllerc:
  protected void bind(ServletRequest request, Object command) throws Exception {
  logger.debug("Binding request parameters onto MultiActionController command");
  ServletRequestDataBinder binder = createBinder(request, command);
  binder.bind(request);
  if (this.validators != null) {
   for (int i = 0; i < this.validators.length; i++) {
      //首先调用supports
      if (this.validators[i].supports(command.getClass())) {
     ValidationUtils.invokeValidator(this.validators[i], command, binder.getErrors());
    }
   }
  }
  binder.closeNoCatch();
 }

cValidationUtilsQ?br />public static void invokeValidator(Validator validator, Object obj, Errors errors) {
  if (validator != null) {
   if (logger.isDebugEnabled()) {
    logger.debug("Invoking validator [" + validator + "]");
   }
   if (obj != null && !validator.supports(obj.getClass())) {
    throw new IllegalArgumentException("Validator " + validator.getClass() +
      " does not support " + obj.getClass());
   }
   validator.validate(obj, errors);
   if (logger.isDebugEnabled()) {
    if (errors.hasErrors()) {
     logger.debug("Validator found " + errors.getErrorCount() + " errors");
    }
    else {
     logger.debug("Validator found no errors");
    }
   }
  }
 }
 



Dragonofson 2006-06-21 09:39 发表评论
]]>
关于Spring MVC构架http://www.aygfsteel.com/dragonofson/articles/53919.htmlDragonofsonDragonofsonTue, 20 Jun 2006 02:50:00 GMThttp://www.aygfsteel.com/dragonofson/articles/53919.htmlhttp://www.aygfsteel.com/dragonofson/comments/53919.htmlhttp://www.aygfsteel.com/dragonofson/articles/53919.html#Feedback0http://www.aygfsteel.com/dragonofson/comments/commentRss/53919.htmlhttp://www.aygfsteel.com/dragonofson/services/trackbacks/53919.htmlM图表Q参照stuctsQ?br />
DispatcherServlet=ActionServlet
HandlerMapping=Struts-config.xml
Controller=Action
ModelAndView=mapping.findforward(string) 中的string;
ViewResolver=mapping.findforward(string) 中string的解释器

特别注意Q?br />1.在web.xml里面配置?br /><servlet>
    <servlet-name>springapp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
 <servlet-mapping>
    <servlet-name>springapp</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

不需要配|context-param
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/springapp-servlet.xml</param-value>

</context-param>
DispatcherServlet 能够自动的到WEB-INF下面查找与他同名的后面接-servlet,.xml的配|文件?br />Qspringapp-servlet.xmlQ?br />
注意QDispatcherServlet 处理的蟩转必要在工E名下面。例如:工程名ؓ:SpringMvc.?/font>Http://localhost:8080/SpringMvc/test.htm可以跌{?br />Http://localhost:8080/test.htm 不能跌{

 详细说明MultiActionController的配|吧Q?
首先在bean.xml里面Q?

<bean id="methodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="paramName"><value>method</value> //相当于DispatchAction的method后面接需要触发的Ҏ
</property>
 
//另一个触发方法的配置
//当提交coureList.htm时候触发coursesUnsortedҎQ当提交coursesSort.htm时候触发coursesSortByDateҎ

<property name="mapping">
  <props>
      <prop key="/coureList.htm">coursesUnsorted</prop>
      <prop key="/coursesSort.htm">coursesSortByDate</prop>
   </props>
</property>
</bean>

//默认方式面跌{到Controller
<bean name="/jsp/test.do" class="org.nightwalker.spaces.web.controller.TestController">
<property name="methodNameResolver">
<ref local="methodNameResolver"/>
</property>
</bean>
 

//SimpleUrlHandlerMapping面跌{到Controller
<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHand">
<property name="mapping">
<props>
<prop key="/listCourses.htm">listCourseController</prop>
<prop key="/register.htm">registerController</prop>
<props>
</props>
</property>
</bean>

配置呢就q么单。methodNameResolver指定了调用MultiActionController中方法的方式Q例如,如果在你的MultiActionController中有如下ҎQ?


public ModelAndView insertAccount(HttpServletRequest request,HttpServletResponse,Account account)
{
}

那么要调用这个方法,你的JSP面的请求URL应该这样写Q?
<form action="test.do?method=insertAccount">
</form>

至于l定什么command和JSP是没有关pȝ。你在MultiActionController中的Ҏ{֐W三个参数是什么对象,Spring׃把request中参数的值绑定到Ҏ{֐的第三个对象中?

例子我倒是没有Q最直接的办法就是去看一下MultiActionController的源代码Q非常简单拉Q一看就明白了?/span>


protectedfinal ModelAndView invokeNamedMethod(String methodName, HttpServletRequest request, HttpServletResponse response)throwsException
{
               

                       
// If last parameter isn't of HttpSession type, it's a command.
// 在这里,Spring会判断你的请求方法里面第三个参数的类型。如果第三个参数cd不是HttpSessionQ就认ؓ是要l定的command?/span>
if(method.getParameterTypes().length >= 3 &&
!method.getParameterTypes()[method.getParameterTypes().length - 1].equals(HttpSession.class))
{
    // Ҏcd利用反射产生Command对象
    Object command = newCommandObject(method.getParameterTypes()[method.getParameterTypes().length - 1]);
    params.add(command);
   // l定command对象
   bind(request, command);
}


// 最后通过反射去调用你的方法,也就是说Q在执行你的ҎӞcommand?/span>
// l帮你绑定好拉,你直接用可以了。?                     
return(ModelAndView) method.invoke(this.delegate, params.toArray(newObject[params.size()]));
}

使用模板视图
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix"><value>/jsp</value></property>//前缀
<property name="suffix"><value>.jsp</value></property>//后缀
</bean>



Dragonofson 2006-06-20 10:50 发表评论
]]>
Spring事务典型配置Ҏhttp://www.aygfsteel.com/dragonofson/articles/53797.htmlDragonofsonDragonofsonMon, 19 Jun 2006 07:31:00 GMThttp://www.aygfsteel.com/dragonofson/articles/53797.htmlhttp://www.aygfsteel.com/dragonofson/comments/53797.htmlhttp://www.aygfsteel.com/dragonofson/articles/53797.html#Feedback0http://www.aygfsteel.com/dragonofson/comments/commentRss/53797.htmlhttp://www.aygfsteel.com/dragonofson/services/trackbacks/53797.htmlpublic interface CustomerDAO {
public void createCustomer(Customer customer);
}

public class HibernateCustomerDAO implements CustomerDAO {

private HibernateTemplate hibernateTemplate = null;

public void setSessionFactory(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory, false);
}

public void createCustomer(Customer customer) {
this.hibernateTemplate.save(customer);
}
}
配置文gQ?br />Qbean id="customerDAOTarget" class="test.usecase.HibernateCustomerDAO"Q?br /> Qproperty name="sessionFactory"Q<ref bean="sessionFactory"/Q</propertyQ?br />Q?beanQ?br />
Qbean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"Q?br /> Qproperty name="sessionFactory"Q<ref bean="sessionFactory"/Q</propertyQ?br />Q?beanQ?br />
Qbean id="customerDAO" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"Q?br /> Qproperty name="transactionManager"Q<ref bean="transactionManager"/Q</propertyQ?br /> Qproperty name="target"Q<ref bean="customerDAOTarget"/Q</propertyQ?br /> Qproperty name="transactionAttributes"Q?br />  QpropsQ?br />   Qprop key="create*"QPROPAGATION_REQUIREDQ?propQ?br />   Qprop key="*"QPROPAGATION_REQUIREDQ?propQ?br />  Q?propsQ?br /> Q?propertyQ?br />Q?beanQ?br />上述Spring配置片断定义了业务对象HibernateCustomerDAOQ它包裹了Hibernate SessionFactory。注意,默认ӞSpring中定义的JavaBean都是单例的,HibernateCustomerDAO也不例外。这意味Q多个线E可能同时执行createCustomer()Ҏ?br />
  其次Q配|了Hibernate事务理器,它包裹了同一Hibernate SessionFactory实例。在事务理器每ơ执行时Q它都会完成如下几g事情。其一Q检查Hibernate Session是否l定到当前线E。如果已l定Q则直接使用它。如果还未绑定,事务理器将告知Hibernate SessionFactory创徏新的SessionQ然后将创徏的Sessionl定到当前线E。其二,如果当前没有处于zd的事务,则事务管理器启动新的事务,q将Session包裹q来。否则,直接参与到活动事务中?br />
  整个q程是通过使用Spring提供的TransactionProxyFactoryBean实现的。当Ӟq是一U以声明方式实现的事务管理过E?TransactionProxyFactoryBean能够Z务对象创Z理对象,从而通过事务理器管理事务。当每次通过代理对象调用createCustomer()ҎӞ事务理器将Ҏ事务属性管理事务。当前,Spring除了提供HibernateTransactionManager事务理器外Q还为JDBC数据源、JDO、TopLink提供了相应的事务理器?br />
  再来看看业务对象吧!当调用createCustomer()ҎӞHibernateTemplate查扄定到当前U程的Hibernate Session。由于上q配|文件片断传入到HibernateTemplate构徏器的W二个参CؓfalseQ因此如果没有绑定Hibernate SessionQ则抛出未受查异常。这对于那些未正配|事务管理功能的场和特别有用Q注意,事务理器很重要Q。一旦事务管理配|好后,Hibernate Session绑定到当前U程Q从而启动事务。请注意QHibernateTemplate不会L查事务是否激z,也不会显C地启动或终止事务。也h意,如果在声明的ҎQ事务属性中l出的)中抛Z未受查异常,则当前活动事务将回滚?br />


Dragonofson 2006-06-19 15:31 发表评论
]]>
Web中spring配置http://www.aygfsteel.com/dragonofson/articles/53779.htmlDragonofsonDragonofsonMon, 19 Jun 2006 06:44:00 GMThttp://www.aygfsteel.com/dragonofson/articles/53779.htmlhttp://www.aygfsteel.com/dragonofson/comments/53779.htmlhttp://www.aygfsteel.com/dragonofson/articles/53779.html#Feedback0http://www.aygfsteel.com/dragonofson/comments/commentRss/53779.htmlhttp://www.aygfsteel.com/dragonofson/services/trackbacks/53779.html
监听?br /> <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

在servlet上下文配|spring的配|文?br /> <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/config/hibernate/applicationContext-hibernate.xml
            /WEB-INF/config/spring/applicationContext-spring.xml
            <!--/WEB-INF/config/spring/acegi-security-common.xml-->
        </param-value>
    </context-param>

2.得到Spring Bean
   public class test extends action
 {
   private static ApplicationContext ctx = null;
   public Object getBean(String name)
   if(ctx == null)
        {
            ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());
        }
        return ctx.getBean(name);
    }
}


Dragonofson 2006-06-19 14:44 发表评论
]]>
վ֩ģ壺 ԰| | | | | ¤| | | | պ| | Ԫı| | ں| | Ȫ| ̨| | Ϫ| | | Ϻӿ| | | | | ˮ| ǧ| | | DZɽ| | | | | ˷| | | | | |