2013-04-21 3 views
0

Итак, я знаю, что есть десятки сообщений, похожих на это, но, к сожалению, ни один из них не помог мне. Я просто пытаюсь запустить демонстрационный проект Spring MVC. Я пытаюсь запустить проект шаблона, предоставленный Heroku (https://devcenter.heroku.com/articles/getting-started-with-heroku-eclipse). Я попробовал множество комбинаций настроек безрезультатно. Вот настройки по умолчанию:Ресурс Spring MVC не найден при запуске

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5"> 
<display-name>Spring-Hibernate-Template</display-name> 

<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:applicationContext.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/people/*</url-pattern> 
</servlet-mapping> 
</web-app> 

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

<context:annotation-config /> 
<context:component-scan base-package="com.example" /> 

<mvc:annotation-driven/> 

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

<tx:annotation-driven /> 
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    <property name="dataSource" ref="dataSource"/> 

</bean> 

<beans profile="default"> 
    <jdbc:embedded-database id="dataSource"/>   
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
       <prop key="hibernate.hbm2ddl.auto">create</prop> 
      </props> 
     </property> 
    </bean> 
</beans> 

<beans profile="prod"> 
    <bean class="java.net.URI" id="dbUrl"> 
     <constructor-arg value="#{systemEnvironment['DATABASE_URL']}"/> 
    </bean> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="url" value="#{ 'jdbc:postgresql://' + @dbUrl.getHost() + ':' + @dbUrl.getPort() + @dbUrl.getPath() }"/> 
     <property name="username" value="#{ @dbUrl.getUserInfo().split(':')[0] }"/> 
     <property name="password" value="#{ @dbUrl.getUserInfo().split(':')[1] }"/> 
    </bean> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <!-- change this to 'verify' before running as a production app --> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
      </props> 
     </property> 
    </bean> 
</beans> 

</beans> 

PersonController.java:

@Controller 
public class PersonController { 

    @Autowired 
    private PersonService personService; 

    @RequestMapping("/") 
    public String listPeople(Map<String, Object> map) { 

     map.put("person", new Person()); 
     map.put("peopleList", personService.listPeople()); 

     return "people"; 
    } 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public String addPerson(@ModelAttribute("person") Person person, BindingResult result) { 

     personService.addPerson(person); 

     return "redirect:/people/"; 
    } 

    @RequestMapping("/delete/{personId}") 
    public String deletePerson(@PathVariable("personId") Integer personId) { 

     personService.removePerson(personId); 

     return "redirect:/people/"; 
    } 
} 

И у меня есть «народ. jsp 'файл в webapp/WEB-INF/jsp/people/jsp

Мой server.xml контекст элемент для сервера Tomcat выглядит следующим образом:

<Context docBase="facultypublicationsdb" path="/facultypublicationsdb" reloadable="true" source="org.eclipse.jst.jee.server:facultypublicationsdb"/></Host> 

Каждый раз, когда я запускаю это на Tomcat в (http://localhost:8080/facultypublicationsdb/), я получаю следующее:

HTTP Status 404 - /facultypublicationsdb/ 

type Status report 

message /facultypublicationsdb/ 

description The requested resource (/facultypublicationsdb/) is not available. 

Apache Tomcat/7.0.21 

Я бегу это на Ubuntu через затмение. Я замечаю, что no .war копируется в каталог /usr/share/tomcat7/webapps. Это должно произойти?

Любые идеи?

+0

С одной стороны, я заметил, что в вашем applicationContext.xml у вас есть два тега закрытия beans в конце xml-файла. – blackpanther

+0

Вы используете Maven? –

+0

@blackpanther Также есть теги с двумя бобами. –

ответ

2

Попробуйте проверить две вещи.

Сначала смените файл web.xml, чтобы отобразить сервлет диспетчера на /. Это приводит к тому, что сервлет диспетчера будет использоваться, когда для запроса не будут найдены другие сопоставления, а не для каждого запроса. Это важно, если у вас есть такие ресурсы, как CSS и Javascript.

<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/people/*</url-pattern> 
</servlet-mapping> 

Далее, если с помощью Eclipse, откройте свойства проектов (Нажмите проект в проекте, исследователь Alt + Enter). Затем перейдите к сборке развертывания. Убедитесь, что все ресурсы ваших проектов включены сюда, особенно любые зависимости от maven. Если вы заметили отсутствие зависимостей, нажмите кнопку «Добавить» и выберите их.

Возможно, вы также захотите, чтобы ваши контроллеры были подняты при сканировании компонентов. Убедитесь, что ваши контроллеры находятся в пакете com.example.

+0

Контроллеры находятся в правильном пакете. Зависимости добавляются в сборку развертывания. Я изменил url-шаблон, но, к сожалению, никаких изменений. –

+0

На самом деле, оказывается, что зависимости не были добавлены в сборку. Спасибо за предложение.После добавления их в сборку я продолжал получать еще несколько ошибок, но загрузка ошибки m2eclipse очистила их. –

+0

@JeremyG Я рад, что вы заработали. Хорошая работа! –

0

Я думаю, вам нужно указать method = RequestMethod.GET в listPeople метод. Могло быть много мелких вещей, которые могли бы вызвать 404 error. Не могли бы вы загрузить этот код на GitHub, и я буду изучать его.

Смежные вопросы