【问题标题】:Spring Framework Project not loading?Spring 框架项目未加载?
【发布时间】:2015-11-26 18:14:58
【问题描述】:

几天来,我一直在使用 Spring 框架尝试建立一个项目,基于 this tutorial 之类的东西。

不幸的是,当我使用 Tomcat 部署项目时,我得到一个看起来像这样的屏幕:

我不太确定要离开这里。我检查了 web.xml 和任何其他可能会影响错误的相关 .xml 文件,但我看不到错误。下面我将发布我的web.xmlspring-config.xml 文件。

web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
       http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
 version="2.5">  

 <display-name>Campaign Spring V2</display-name>  

 <servlet>  
  <servlet-name>mvc-dispatcher</servlet-name>  
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  <init-param>  
   <param-name>contextConfigLocation</param-name>  
   <param-value>/WEB-INF/spring-config.xml</param-value>  
  </init-param>  
  <load-on-startup>1</load-on-startup>  
 </servlet>  

    <servlet-mapping>  
      <servlet-name>mvc-dispatcher</servlet-name>  
      <url-pattern>/</url-pattern>  
     </servlet-mapping>  

    </web-app>  

spring_config.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:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd  
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd  
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <context:component-scan base-package="com.bridge.campaignspring.controller" />

    <context:property-placeholder location="classpath:application.properties" />

    <!-- Enables the Spring MVC @Controller programming model -->
    <mvc:annotation-driven />

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driver}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.user}" />
        <property name="password" value="${database.password}" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.bridge.campaignspring.Campaign</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

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

    <bean id="persistenceExceptionTranslationPostProcessor" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="CampaignDao" class="com.bridge.campaignspring.dao.CampaignDAOImpl" />
    <bean id="CampaignService" class="com.bridge.campaignspring.service.CampaignServiceImpl" />

</beans>  

如果需要,我可以将项目发布到 GitHub 以查看代码中是否存在更大的缺陷。此外,如果需要发布项目的任何其他部分,我将更新 OP 以显示任何内容。谢谢!

编辑: http://localhost/ 也不加载,我之前的陈述不正确。

EDIT2:这是GitHub上的项目链接。

EDIT3:再次阅读 Spring 教程后,问题解决了!

【问题讨论】:

  • 查看部署时是否出错
  • @Jens 这是我在服务器上运行项目时的整个堆栈跟踪:pastebin.com/hwM3MW0v
  • 这是您的问题:Ambiguous mapping found. Cannot map 'dataController' bean method
  • 我该如何解决?
  • 代码不工作,因为它没有控制器。

标签: java spring hibernate spring-mvc tomcat


【解决方案1】:

你在tomcat settings 中设置了Web Module Path 吗?

参考这些问题Unable to run Spring REST application using Tomcat

【讨论】:

    【解决方案2】:

    刚刚通过github项目快速检查了一下,你有更多我认为的问题。

    您正在使用 XML 配置来创建带有 Spring-config.xml 配置的 DispatchServer,同时 在类路径上有一个 AppInitializer

    AppInitializer 使用 AppConfig 创建一个 Datasource bean,您的 XML 还创建一个 Datasource bean 和一个 SessionFactory。

    Tomcat 会找到 AppInitializer 并首先运行它。 这意味着它会在创建 XML 之前尝试自动装配 SessionFactory。 要将您的代码从这个问题中移除,请执行以下操作。

    将 spring_config.xml 从 /webapp/WEB-INF 移动到 /resources

    将以下@import 行添加到 AppConfig.java

    @Configuration
    @EnableWebMvc
    @ImportResource("classpath:spring-config.xml")
    @ComponentScan(basePackages = "com.bridge.campaignspring")
    public class AppConfig {
    

    现在您需要删除您正在创建的 2 个 DataSource bean 中的 1 个。我建议删除 XML 中的那个,因为它使用了无效的属性值。即${database.driver} 不存在。

    在你做出这些改变之后,你仍然会遇到其他问题,但你比以前更进一步了。

    【讨论】:

    • 由于混淆,我刚刚删除了 XML,所以现在它应该是纯粹基于注释的。有什么想法吗?
    • 我认为 XML 是一些关键要求,因此您偏离了本教程。但是如果你真的不需要它,那么从原始教程下载源代码并重新开始。这里破的太多了。
    【解决方案3】:

    你没有很好地遵循教程。控制器映射以

    开头
    @RequestMapping("/")
    public class AppController {
    

    第一个注解@RequestMapping("/")对于spring计算请求使用的路径很重要。

    而这段代码不见了

    @Bean
        public LocalSessionFactoryBean sessionFactory() {
            LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
            sessionFactory.setDataSource(dataSource());
            sessionFactory.setPackagesToScan(new String[] { "com.bridge.compaignspring.model" });
            sessionFactory.setHibernateProperties(hibernateProperties());
            return sessionFactory;
         }
    

    没有它,Spring 无法自动装配依赖于 sessionFactory 的属性。

    【讨论】:

    • 为什么你使用xml配置,在教程中它是基于注释的?
    • 我对 Spring 框架还很陌生;我在以前的教程中看到了 XML,并尝试对其进行调整。显然,它只是混淆了代码。我应该删除 XML 文件吗?
    • 是的,你可以,因为它只是误导了错误的来源,链接中的 spring 4 和 git 的最后更新是使用基于注释的配置。您确定该服务已连接并正常工作吗?
    • 我已删除 .xml 文件; Git 应该反映这些变化。你所说的“有线和工作”是什么意思?
    • 我应该在哪里粘贴您刚刚编辑的代码到您的帖子中? @Bean 部分
    猜你喜欢
    • 2012-03-20
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2012-09-16
    相关资源
    最近更新 更多