页面跳转时报错exception javax.servlet.ServletException: Servlet.init() for servlet springapp threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
java.lang.Thread.run(Thread.java:619)
root cause org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springappController' defined in ServletContext resource [/WEB-INF/classes/config/springapp-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'accountsDAO' of bean class [org.disk.view.SpringappController]: Bean property 'accountsDAO' is not writable or has an invalid setter method: Does the parameter type of the setter match the return type of the getter?
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues...
springapp-servlet.xml<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <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>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/config/applicationContext.xml</param-value>
</context-param> <servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="jdbcUrl"
value="jdbc:oracle:thin:@localhost:1521:orcl">
</property>
<property name="user" value="disk"></property>
<property name="password" value="disk"></property>
</bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--<property name="configLocation" value="classpath:config/hibernate.cfg.xml"/>
--><property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_second_level_cache">
true
</prop>
<!--<prop key="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</prop>
--><prop key="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</prop>
<prop key="hibernate.query.substitutions">
true 1, false 0, yes 'Y', no 'N'
</prop>
<prop
key="hibernate.bytecode.use_reflection_optimizer">
true
</prop>
<prop key="hibernate.use_outer_join">true</prop>
<prop key="hibernate.prepare_sql">true</prop>
<prop key="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</prop> </props>
</property>
<property name="lobHandler" ref="oracle9iLobHandle"></property>
<property name="mappingResources">
<list>
<value>org/disk/po/AccountRoles.hbm.xml</value>
<value>org/disk/po/Accounts.hbm.xml</value>
<value>org/disk/po/AdminLogs.hbm.xml</value>
<value>org/disk/po/Categorys.hbm.xml</value>
<value>org/disk/po/Grants.hbm.xml</value>
<value>org/disk/po/Items.hbm.xml</value>
<value>org/disk/po/OrderItems.hbm.xml</value>
<value>org/disk/po/OrderLogs.hbm.xml</value>
<value>org/disk/po/Orders.hbm.xml</value>
<value>org/disk/po/RoleGrants.hbm.xml</value>
<value>org/disk/po/Roles.hbm.xml</value>
<value>org/disk/po/Types.hbm.xml</value>
</list>
</property>
</bean>
<bean id="oracle9iLobHandle"
class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor"
ref="nativeJdbcExtractor">
</property>
</bean>
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor">
</bean>
<import resource="hibernate3Transaction.xml"/>
<bean id="accountsDAO" class="org.disk.daoimpl.hibernate.AccountsHibernateDAO" autowire="byName"></bean>
</beans>hibernate3Transaction.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="set*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="register">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="valid*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*DAO</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!--
此处增加新的Interceptor
-->
</list>
</property>
</bean>
<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor"/>
</bean>
</beans>
请大家指点下
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
java.lang.Thread.run(Thread.java:619)
root cause org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springappController' defined in ServletContext resource [/WEB-INF/classes/config/springapp-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'accountsDAO' of bean class [org.disk.view.SpringappController]: Bean property 'accountsDAO' is not writable or has an invalid setter method: Does the parameter type of the setter match the return type of the getter?
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues...
springapp-servlet.xml<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <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>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/config/applicationContext.xml</param-value>
</context-param> <servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="jdbcUrl"
value="jdbc:oracle:thin:@localhost:1521:orcl">
</property>
<property name="user" value="disk"></property>
<property name="password" value="disk"></property>
</bean> <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--<property name="configLocation" value="classpath:config/hibernate.cfg.xml"/>
--><property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_second_level_cache">
true
</prop>
<!--<prop key="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</prop>
--><prop key="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</prop>
<prop key="hibernate.query.substitutions">
true 1, false 0, yes 'Y', no 'N'
</prop>
<prop
key="hibernate.bytecode.use_reflection_optimizer">
true
</prop>
<prop key="hibernate.use_outer_join">true</prop>
<prop key="hibernate.prepare_sql">true</prop>
<prop key="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
</prop> </props>
</property>
<property name="lobHandler" ref="oracle9iLobHandle"></property>
<property name="mappingResources">
<list>
<value>org/disk/po/AccountRoles.hbm.xml</value>
<value>org/disk/po/Accounts.hbm.xml</value>
<value>org/disk/po/AdminLogs.hbm.xml</value>
<value>org/disk/po/Categorys.hbm.xml</value>
<value>org/disk/po/Grants.hbm.xml</value>
<value>org/disk/po/Items.hbm.xml</value>
<value>org/disk/po/OrderItems.hbm.xml</value>
<value>org/disk/po/OrderLogs.hbm.xml</value>
<value>org/disk/po/Orders.hbm.xml</value>
<value>org/disk/po/RoleGrants.hbm.xml</value>
<value>org/disk/po/Roles.hbm.xml</value>
<value>org/disk/po/Types.hbm.xml</value>
</list>
</property>
</bean>
<bean id="oracle9iLobHandle"
class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor"
ref="nativeJdbcExtractor">
</property>
</bean>
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor">
</bean>
<import resource="hibernate3Transaction.xml"/>
<bean id="accountsDAO" class="org.disk.daoimpl.hibernate.AccountsHibernateDAO" autowire="byName"></bean>
</beans>hibernate3Transaction.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="set*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="register">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="valid*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*DAO</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!--
此处增加新的Interceptor
-->
</list>
</property>
</bean>
<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor"/>
</bean>
</beans>
请大家指点下
springapp-servlet.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="viewJspResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="springappController" class="org.disk.view.SpringappController">
<property name="accountsDAO" ref="accountsDAO"></property>
</bean>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/login.do">springappController</prop>
</props>
</property>
</bean>
</beans>springappController.java
package org.disk.view;
import java.io.IOException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.disk.dao.AccountsDAO;
import org.disk.dao.GenericDAO;
import org.disk.dao.GenericHibernateDAO;
import org.disk.daoimpl.hibernate.AccountsHibernateDAO;
import org.disk.po.Accounts;
import org.disk.util.ApplicationContextGetter;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller; public class SpringappController implements Controller {
private AccountsHibernateDAO accountsDAO;
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Accounts accounts = new Accounts();
accounts.setStates("sdf");
accountsDAO.save(accounts);
return new ModelAndView("hello");
} public AccountsHibernateDAO getAccountsDAO() {
return accountsDAO;
} public void setAccountsDao(AccountsHibernateDAO accountsDAO) {
this.accountsDAO = accountsDAO;
}
}
麻烦大家看看
nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'accountsDAO' of bean class [org.disk.view.SpringappController]: Bean property 'accountsDAO' is not writable or has an invalid setter method: Does the parameter type of the setter match the return type of the getter?
/////////////////
return accountsDAO;
}
public void setAccountsDao(AccountsHibernateDAO accountsDAO) {
this.accountsDAO = accountsDAO;
}
_____________________________________public void setAccountsDAO(AccountsHibernateDAO accountsDAO) {
this.accountsDAO = accountsDAO;
} setAccountsDAO方法大小写问题
exception javax.servlet.ServletException: Servlet.init() for servlet springapp threw exception
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
java.lang.Thread.run(Thread.java:619)
root cause org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springappController' defined in ServletContext resource [/WEB-INF/classes/config/springapp-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyAccessExceptionsException: PropertyAccessExceptionsException (1 errors); nested propertyAccessExceptions are: [org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy1] to required type [org.disk.daoimpl.hibernate.AccountsHibernateDAO] for property 'accountsDAO']
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1066)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:857)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:378)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:283)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184)
org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:83)
javax.servlet.GenericServlet.init(GenericServlet.java:211)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:216)
org.apache.commons.digester.SetNextRule.end(SetNextRule.java:256)
org.apache.commons.digester.Rule.end(Rule.java:276)
org.apache.commons.digester.Digester.endElement(Digester.java:1058)
org.apache.catalina.util.CatalinaDigester.endElement(CatalinaDigester.java:76)
org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
org.apache.commons.digester.Digester.parse(Digester.java:1567)
org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:483)
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)
org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
org.apache.catalina.startup.Catalina.start(Catalina.java:556)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)好象是说代理类型转换错误了,请大家再指点下,我实在看不出来错误拉
public void setAccountsDao(AccountsHibernateDAO accountsDAO) {
this.accountsDAO = accountsDAO;
}
Failed to convert property value of type [$Proxy1] to required type [org.disk.daoimpl.hibernate.AccountsHibernateDAO] for property 'accountsDAO']
可以将下面的代理创建器删除。
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*DAO </value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor </value>
<!--
此处增加新的Interceptor
-->
</list>
</property>
</bean>
------------------------
可以采用其他的AOP实现,这个特点是每个DAO都必须指定parent为abstractDAOProxyFactoryBean。代码如下:
-------------------------
<bean id="abstractDAOProxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean" abstract="true">
<property name="interceptorNames">
<value>transactionInterceptor</value>
</property>
</bean>
<bean id="accountsDAO" parent="abstractDAOProxyFactoryBean">
<property name="target">
<bean class="org.disk.daoimpl.hibernate.AccountsHibernateDAO"/>
</property>
</bean>