2012-06-13 78 views
0

我是新來的春天MVC。我有以下項目結構。部署Spring MVC應用程序時出現異常?

enter image description here

下面是類:

ContactController.java:

@Controller 
public class ContactController extends MultiActionController { 

    @Autowired 
    private ContactService contactService; 

    public ModelAndView list(HttpServletRequest request, 
      HttpServletResponse response) throws Exception { 
     ModelMap modelMap = new ModelMap(); 
     modelMap.addAttribute("userList", contactService.listContact()); 
     modelMap.addAttribute("user", new Contact()); 
     return new ModelAndView("contact", modelMap); 
    } 


    public ModelAndView add(HttpServletRequest request, 
      HttpServletResponse response, Contact user) throws Exception { 
     contactService.addContact(user); 
     return new ModelAndView("redirect:list.htm"); 
    } 




} 

ContactDAOImpl.java

@Repository 
public class ContactDAOImpl implements ContactDAO { 

    @Autowired 
    private SessionFactory sessionFactory; 

    public void addContact(Contact contact) { 
     sessionFactory.getCurrentSession().save(contact); 
    } 

    @SuppressWarnings("unchecked") 
    public List<Contact> listContact() { 

     return sessionFactory.getCurrentSession().createQuery("from Contact") 
       .list(); 
    } 

    public void removeContact(Integer id) { 
     Contact contact = (Contact) sessionFactory.getCurrentSession().load(
       Contact.class, id); 
     if (null != contact) { 
      sessionFactory.getCurrentSession().delete(contact); 
     } 

    } 
} 

Contact.java

@Entity 
@Table(name="USERS") 
public class Contact { 

    @Id 
    @Column(name="USER_ID") 
    @GeneratedValue 
    private Integer id; 

    @Column(name="USER_NAME") 
    private String userName; 
//with setters and getters 
} 

ContactServiceImpl.java

@Service 
public class ContactServiceImpl implements ContactService { 

    @Autowired 
    private ContactDAO contactDAO; 

    @Transactional 
    public void addContact(Contact contact) { 
     contactDAO.addContact(contact); 
    } 

    @Transactional 
    public List<Contact> listContact() { 

     return contactDAO.listContact(); 
    } 

    @Transactional 
    public void removeContact(Integer id) { 
     contactDAO.removeContact(id); 
    } 
} 

休眠-cfg.xml中:

<hibernate-configuration> 
    <session-factory> 
     <mapping class="net.viralpatel.contact.form.Contact" /> 
    </session-factory> 

</hibernate-configuration> 

contact.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<style type="text/css"> 
.even { 
    background-color: silver; 
} 
</style> 
<title>Registration Page</title> 
</head> 
<body> 

<form:form action="add.htm" commandName="user"> 
    <table> 
     <tr> 
      <td>User Name :</td> 
      <td><form:input path="userName" /></td> 
     </tr> 

    </table> 
</form:form> 
<c:if test="${fn:length(userList) > 0}"> 
    <table cellpadding="5"> 
     <tr class="even"> 
      <th>Name</th> 

     </tr> 
     <c:forEach items="${userList}" var="user" varStatus="status"> 
      <tr class="<c:if test="${status.count % 2 == 0}">even</c:if>"> 
       <td>${user.userName}</td> 
      </tr> 
     </c:forEach> 
    </table> 
</c:if> 
</body> 
</html> 

彈簧servlet.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:lang="http://www.springframework.org/schema/lang" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
     http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> 

    <context:annotation-config /> 
    <context:component-scan base-package="net.viralpatel.contact" /> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> 

    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="/WEB-INF/jdbc.properties" /> 

    <bean id="dataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" 
     p:password="${jdbc.password}" /> 


    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="configLocation"> 
      <value>classpath:hibernate.cfg.xml</value> 
     </property> 
     <property name="configurationClass"> 
      <value>org.hibernate.cfg.AnnotationConfiguration</value> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> 

    <tx:annotation-driven /> 

    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 


</beans> 

的web.xml條目:

<servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    <welcome-file-list> 
     <welcome-file>redirect.jsp</welcome-file> 
    </welcome-file-list> 

redirect.jsp中:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<% response.sendRedirect("user/list.htm"); %> 

的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>Spring3HibernateMaven</groupId> 
    <artifactId>Spring3HibernateMaven</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <description></description> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.0</version> 
     </plugin> 

    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 
    <!-- Hibernate framework --> 
    <dependency> 
     <groupId>hibernate</groupId> 
     <artifactId>hibernate3</artifactId> 
     <version>3.2.3.GA</version> 
    </dependency> 

    <!-- Hibernate annotation --> 
    <dependency> 
     <groupId>hibernate-annotations</groupId> 
     <artifactId>hibernate-annotations</artifactId> 
     <version>3.3.0.GA</version> 
    </dependency> 

    <dependency> 
     <groupId>hibernate-commons-annotations</groupId> 
     <artifactId>hibernate-commons-annotations</artifactId> 
     <version>3.0.0.GA</version> 
    </dependency> 

    <dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>ejb3-persistence</artifactId> 
    <version>3.3.2.Beta1</version> 
</dependency> 


    <!-- Hibernate library dependecy start --> 
    <dependency> 
     <groupId>dom4j</groupId> 
     <artifactId>dom4j</artifactId> 
     <version>1.6.1</version> 
    </dependency> 

    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.1.1</version> 
    </dependency> 

    <dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.2.1</version> 
    </dependency> 

    <dependency> 
     <groupId>antlr</groupId> 
     <artifactId>antlr</artifactId> 
     <version>2.7.7</version> 
    </dependency> 
    <!-- Hibernate library dependecy end --> 

    <!-- dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.4.2</version> 
    </dependency --> 
    <dependency> 
     <groupId>taglibs</groupId> 
     <artifactId>standard</artifactId> 
     <version>1.1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.1.2</version> 
    </dependency> 
    <dependency> 
      <groupId>oracle</groupId> 
      <artifactId>ojdbc</artifactId> 
      <version>1.4</version> 
     </dependency> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>20030825.184428</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-pool</groupId> 
     <artifactId>commons-pool</artifactId> 
     <version>20030825.183949</version> 
    </dependency> 
    </dependencies> 
    <properties> 
    <org.springframework.version>3.0.2.RELEASE</org.springframework.version> 
    </properties> 
    <repositories> 


     <repository> 
     <id>central</id> 
     <name>Central Repository</name> 
     <url>http://repo.maven.apache.org/maven2</url> 
     <layout>default</layout> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
    </repository> 

    </repositories> 


    <pluginRepositories> 
    <pluginRepository> 
     <id>central</id> 
     <name>Central Repository</name> 
     <url>http://repo.maven.apache.org/maven2</url> 
     <layout>default</layout> 
     <snapshots> 
     <enabled>false</enabled> 
     </snapshots> 
     <releases> 
     <updatePolicy>never</updatePolicy> 
     </releases> 
    </pluginRepository> 
    </pluginRepositories> 


</project> 

但是,一旦它被打包並部署到Tomcat我得到異常下面我在tomcat控制檯上:

SEVERE: Context initialization failed 
    org.springframework.beans.factory.BeanCreationException: Error creating bean wit 
    h name 'contactController': Injection of autowired dependencies failed; nested e 
    xception is org.springframework.beans.factory.BeanCreationException: Could not a 
    utowire field: private net.viralpatel.contact.service.ContactService net.viralpa 
    tel.contact.controller.ContactController.contactService; nested exception is org 
    .springframework.beans.factory.BeanCreationException: Error creating bean with n 
    ame 'contactServiceImpl': Injection of autowired dependencies failed; nested exc 
    eption is org.springframework.beans.factory.BeanCreationException: Could not aut 
    owire field: private net.viralpatel.contact.dao.ContactDAO net.viralpatel.contac 
    t.service.ContactServiceImpl.contactDAO; nested exception is org.springframework 
    .beans.factory.BeanCreationException: Error creating bean with name 'contactDAOI 
    mpl': Injection of autowired dependencies failed; nested exception is org.spring 
    framework.beans.factory.BeanCreationException: Could not autowire field: private 
    org.hibernate.SessionFactory net.viralpatel.contact.dao.ContactDAOImpl.sessionF 
    actory; nested exception is java.lang.NoClassDefFoundError: Ljavax/transaction/T 
    ransactionManager;..............................................................Caused by: org.springframework.beans.factory.BeanCreationException: Could not au 
towire field: private org.hibernate.SessionFactory net.viralpatel.contact.dao.Co 
ntactDAOImpl.sessionFactory; nested exception is java.lang.NoClassDefFoundError: 
Ljavax/transaction/TransactionManager; 
     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanP 
ostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.j 
ava:507) 
     at org.springframework.beans.factory.annotation.InjectionMetadata.inject 
(InjectionMetadata.java:84) 
     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanP 
ostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java 
:283) 
     ... 68 more 
Caused by: java.lang.NoClassDefFoundError: Ljavax/transaction/TransactionManager 
; 
     at java.lang.Class.getDeclaredFields0(Native Method) 
     at java.lang.Class.privateGetDeclaredFields(Class.java:2291) 
     at java.lang.Class.getDeclaredFields(Class.java:1743) 
     at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProc 
essor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:372) 
     at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProc 
essor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.jav 
a:320) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBean 
Factory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFacto 
ry.java:798) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBean 
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:493) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBean 
Factory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb 
ject(AbstractBeanFactory.java:291) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr 
y.getSingleton(DefaultSingletonBeanRegistry.java:222) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBe 
an(AbstractBeanFactory.java:288) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean 
(AbstractBeanFactory.java:190) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory. 
findAutowireCandidates(DefaultListableBeanFactory.java:827) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory. 
doResolveDependency(DefaultListableBeanFactory.java:769) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory. 
resolveDependency(DefaultListableBeanFactory.java:686) 
     at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanP 
ostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.j 
ava:478) 
     ... 70 more 
Caused by: java.lang.ClassNotFoundException: javax.transaction.TransactionManage 

我在這裏錯過了什麼?請幫幫我。

謝謝!

回答

3

java.lang.NoClassDefFoundError: Ljavax/transaction/TransactionManager ;

只要把Java Transaction APIjta.jar)到您的WEB-INF/lib目錄。

+0

我補充說。但沒用。我在部署時遇到異常。 – user1016403

+0

原因:org.springframework.beans.factory.BeanCreationException:錯誤creati ng名稱爲'contactDAOImpl'的bean:注入自動裝配的依賴項失敗; 嵌套異常是org.springframework.beans.factory.BeanCreationException:Cou ld not autowire field:private org.hibernate.SessionFactory net.viralpatel.conta ct.dao.ContactDAOImpl.sessionFactory;嵌套的異常是在ServletContext資源中定義的org.springframework.be [/WEB-INF/spring-servlet.xml]:I f init方法失敗;嵌套異常是java.lang.NoClassDefFoundError:net/sf /cglib/proxy/CallbackFilter – user1016403

+0

您的類路徑中缺少許多JAR。這一次是'cglib-proxy'。你必須逐一找到它們並添加它們。 – adarshr

相關問題