??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 GMT60- Spring事务原理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 />

]]> - Spring视图解析?/title>http://www.aygfsteel.com/dragonofson/articles/54139.htmlDragonofsonDragonofsonWed, 21 Jun 2006 03:10:00 GMThttp://www.aygfsteel.com/dragonofson/articles/54139.htmlhttp://www.aygfsteel.com/dragonofson/comments/54139.htmlhttp://www.aygfsteel.com/dragonofson/articles/54139.html#Feedback0http://www.aygfsteel.com/dragonofson/comments/commentRss/54139.htmlhttp://www.aygfsteel.com/dragonofson/services/trackbacks/54139.html<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix"><value>/WEB-INF/JSP/</value></property>
<property name="suffix"><value>.jsp</value></property>
<property name="viewClass"><value>org.springframework.web.servlet.view.JstView</value></property>
//面使用JSTL
</bean>
2.BeanNameViewResolver,XmlFileViewResover使用定制视图(PDF,Excel,囄)
BeanNameViewResolver(q回的是bean)
<bean id="beanNameViewResolver" class="org.spring.framework.web.servlet.view.BeanNameViewResovler">
<bean id="courseList" class="com.CourseList">//courseList we是?new ModelAndView("courseList","courses",courses);
<bean id="beanNameViewResolver" class="org.spring.framework.web.servlet.view.XmlFileViewResover">
<property name="location>
<value>/WEB-INF/traning-views.xml</value>
</property>
</bean>
3.<bean id="bundleViewResolver" class="org.springframework.web.servlet.view.ResourceViewResolver">
<property name="basename">
<value>view</value>
</property>
</bean>
Ҏ用户的地理位|渲染不同的视图?img src ="http://www.aygfsteel.com/dragonofson/aggbug/54139.html" width = "1" height = "1" />
]]> - 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");
}
}
}
}

]]>- 关于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>

]]> - 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 />

]]> - 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);
}
}

]]>
վ֩ģ壺
|
|
|
|
|
¤|
|
质|
|
պ|
|
Ԫı|
|
ں|
|
Ȫ|
̨|
|
Ϫ|
|
|
Ϻӿ|
|
|
|
|
ˮ|
ǧ|
|
|
DZɽ|
첼|
|
|
|
˷|
|
|
|
|
|