Spring MVC Аннотации - PullRequest
       21

Spring MVC Аннотации

5 голосов
/ 06 марта 2011

Я пару раз изучал документацию Spring, но, похоже, я не смог заставить работать аннотации @Controller и т.

Я загружаю зависимости и репозитории в моем POM (... это мои конкретные значения):

<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>...</groupId>
  <artifactId>...</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>...</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>org.springframework.context</artifactId>
      <version>${org.springframework.version}</version>
      <scope>runtime</scope>
   </dependency>
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>org.springframework.web.servlet</artifactId>
      <version>${org.springframework.version}</version>
      <scope>runtime</scope>
   </dependency>
  </dependencies>

  <repositories>
    <repository>
        <id>com.springsource.repository.bundles.release</id>
        <url>http://repository.springsource.com/maven/bundles/release/</url>
    </repository>
    <repository>
        <id>com.springsource.repository.bundles.external</id>
        <url>http://respoitory.springsource.com/maven/bundles/external</url>
    </repository>
  </repositories>
</project>

В моем web.xml я настраиваю сервлет диспетчера:

<?xml version="1.0" encoding="UTF-8"?>

<web-app 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"
         version="2.4">

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

    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

А под WEB-INF у меня есть servlet-context.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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
                        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                        http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="..." />

    <mvc:annotation-driven />

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

</beans>

Я думаю, что я должен упустить или забыть что-то простое. Eclipse не распознает аннотации и maven не может создать проект. Может ли кто-нибудь помочь мне здесь?

EDIT

Для дальнейшего уточнения в затмении добавление аннотации приводит к:

The import org.springframework cannot be resolved

А запуск mvn clean install приводит к:

package org.springframework.stereotype does not exist

И удаление области выполнения приводит к следующей ошибке Maven:

error reading ...\.m2\repository\org\aopalliance\com.springsource.org.aopalliance\1.0.0\com.springsource.org.aopalliance-1.9.9.jar; error in opening zip file

Ответы [ 4 ]

6 голосов
/ 06 марта 2011

Возможно, это связано с тем, что вы указали в качестве области действия для зависимостей Spring. Вы установили для них «время выполнения», что означает, что они не используются для компиляции и нужны только во время выполнения. Это объясняет, почему он не будет компилироваться в Eclipse (и, вероятно, проблема также в вашей сборке Maven, хотя вы не указали ошибку).

Просто удалите область, чтобы использовать область по умолчанию (по умолчанию используется компиляция, что, скорее всего, то, что вам нужно в этом случае), и посмотрите, получит ли это вас дальше.

Обновление:

Спасибо за добавление конкретной ошибки, которую вы получаете.

Это означает, что Maven пытается использовать локальную зависимость, но не может открыть файл jar. Я иногда видел, как это происходит, когда банка повреждена во время загрузки или загружается только частично.

Попробуйте удалить каталог ~ / .m2 / repository / org / aopalliance / com.springsource.org.aopalliance / и заново запустить сборку. Это заставит Maven повторно загрузить его и, надеюсь, привести его в исправное состояние.

4 голосов
/ 13 марта 2011

Я нашел ответ на свой вопрос в следующем посте.

По сути, мне нужно было добавить плагин m2eclipse в Eclipse.Вы можете найти инструкции на http://m2eclipse.sonatype.org/installing-m2eclipse.html при необходимости.Как только это будет установлено, вы можете щелкнуть правой кнопкой мыши по вашему проекту в Eclipse и выбрать Maven> Включить управление зависимостями.Тогда eclipse сможет распознавать импорт из ваших зависимостей POM.

Итак, в итоге у меня было следующее.Eclipse распознал все, Maven правильно собрал и упаковал проект, а Tomcat успешно развернул проект.

Вот мой 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_3_0.xsd" 
         id="CoreProject" version="3.0">

    <!-- SERVLET FOR HANDLING ALL INCOMING REQUESTS -->
    <servlet>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- SERVLET MAPPING FOR HANDLING ALL INCOMING REQUESTS -->
    <servlet-mapping>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

Вот мой сервлет-context.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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc 
                           http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                           http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                           http://www.springframework.org/schema/context 
                           http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- SCANS ALL MATCHING PACKAGES FOR COMPONENTS -->
    <context:component-scan base-package="com.myBasePackage" />

    <!-- ALLOWS FOR ANNOTATION MAPPING FOR CONTROLLERS -->
    <mvc:annotation-driven />

    <!-- ADDS PREFIX AND SUFFIX TO RETURNED VIEWS -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

Вот мой файл POM:

<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>com.myBasePackage</groupId>
  <artifactId>CoreProject</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>CoreProject</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
  </properties>

  <dependencies>
    <!-- SERVLET DEPENDENCIES -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- SPRING DEPENDENCIES -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>
    <!-- TESTING DEPENDENCIES -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Надеюсь, это поможет кому-то еще.

0 голосов
/ 17 июля 2013

используйте ниже и попробуйте, обработчик аннотации должен использоваться, как показано ниже, в контексте вашего приложения .xml

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="0"/>
    </bean>

это устранит ошибки стереотипа

, если не работает, добавьте строку ниже для xsi:schemaLocation

  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
0 голосов
/ 26 апреля 2013

Убедитесь, что ваша кэшированная версия индекса репо затмения актуальна, вы даже можете вручную обновить индекс с помощью представления репозитория Maven и обновить его оттуда.

Я всегда пробую ванильную версию (командную строку) моих сборок maven, если получаю ошибку из какой-то IDE.

...