2015-10-05 2 views
2

Я знаю, что есть уже вопрос, заданный по этой теме, но без ответа Application not workig when adding value to <context-param> in web.xml in Spring MVC Web Application Using MavenУказание контекста паров в web.xml при интегрировании Весны и джерси

Я пытаюсь интегрировать Spring и джерси, когда я добавить контекст -param, чтобы указать applicationContext.xml, приложение не будет загружать домашнюю страницу (index.jsp в папке webContent), если этот тег переименован, приложение загружает домашнюю страницу, но thrn i не сможет указать конфигурацию для spring (applicationContext .xml)

вот моя 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>Demo</display-name> 
<welcome-file-list> 
<welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
<servlet> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <servlet-class> 
     com.sun.jersey.spi.spring.container.servlet.SpringServlet 
    </servlet-class> 
    <init-param> 
     <param-name> 
          com.sun.jersey.config.property.packages 
        </param-name> 
     <param-value>com.im.hellocontroller</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <url-pattern>/api/*</url-pattern> 
</servlet-mapping> 
<context-param> 
<param-name>contextClass</param-name> 
<param-value> 
org.springframework.web.context.support.AnnotationConfigWebApplicationContext 
    </param-value> 
</context-param> 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>classpath:applicationContext.xml</param-value> 
</context-param> 
<listener> 
<listener-  class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<listener> 
<listener- class>org.springframework.web.context.request.RequestContextListener</listener- class> 
</listener> 
</web-app> 

вот мой 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>Inventory-Management</groupId> 
<artifactId>Inventory-Management</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<repositories> 
    <repository> 
     <id>maven2-repository.java.net</id> 
     <name>Java.net Repository for Maven</name> 
     <url>http://download.java.net/maven/2/</url> 
    </repository> 
</repositories> 

<dependencies> 

<dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>javax.ws.rs</groupId> 
     <artifactId>javax.ws.rs-api</artifactId> 
     <version>2.0</version> 
    </dependency> 

    <!-- Jersey --> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.19</version> 
    </dependency> 

    <!-- Spring dependencies --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 

    <!-- Jersey + Spring --> 
    <dependency> 
     <groupId>com.sun.jersey.contribs</groupId> 
     <artifactId>jersey-spring</artifactId> 
     <version>1.19</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-core</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-web</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-beans</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-context</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <!-- Hibernate dependencies --> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>5.0.1.Final</version> 
    </dependency> 

    <!-- MySQL --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.36</version> 
    </dependency> 

</dependencies> 



<build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <warSourceDirectory>WebContent</warSourceDirectory> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.3</version> 
     </plugin> 
    </plugins> 
</build> 

вот мой applicationContext.xml:

<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" 
xsi:schemaLocation="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:annotation-config></context:annotation-config> 
<context:component-scan base-package="com.im.hellocontroller"/> 


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost/imanagement" /> 
    <property name="username" value="root" /> 
    <property name="password" value="root" /> 
</bean> 

<bean id="sessionFactory" 
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
<property name="dataSource" ref="dataSource" /> 
<property name="annotatedClasses">  
     <list>  
      <value>com.im.beans.User</value>  
     </list>  
    </property> 
<property name="hibernateProperties"> 
<props> 
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
<prop key="hibernate.current_session_context_class">thread</prop> 
<prop key="hibernate.show_sql">true</prop> 
<prop key="hibernate.hbm2ddl.auto">update</prop> 

</props> 
</property> 
</bean> 

</beans> 

applicationContext.xml находится в пути к классам (т.е. src), web.xml в разделе WEB-INF, index.jsp находится под WebContent

Спасибо за помощь!

+0

SpringServlet от Джерси даже не сравнивается с DispatcherServlet от WebMVC. Его конфигурация довольно ограничена по сравнению. Я разветвил и изменил ее. Возможно, в итоге вы окажетесь так же. –

+0

Но я хочу чтобы убедиться, что файл applicationContext.xml прочитан, что делать? –

+0

Возможно, проблема заключается в том, что Джерси не создает субконтекст так же, как это делает DispatcherServlet. Это мое, я его разветвил. –

ответ

5

Основная проблема заключается в том, что вы смешали xml и annotationConfigs. Вам нужно знать отношение между contextClass и contextConfigLocation параметры контекста и как ContextLoaderListener будет использовать его.

  1. contextClass: относится к классу конфигурации. Вы упомянули здесь это как org.springframework.web.context.support.AnnotationConfigWebApplicationContext
  2. contextConfig Местоположение: это место, где бутстрастер весны будет искать конфигурацию. Указано contextClass в AnnotationConfigWebApplicationContext, для этого вы должны дать имя пакета, где ваши пружинные resides.I класса конфигурации боб предположим, что вы такой класс с аннотацией @Configuration

Если у вас нет таких @Configuration аннотированный класс не удалить contextClass и положить только параметр contextConfigLocation с вашим xml-контуром как значением. По умолчанию ContextLoaderListener возьмите xml. Вот пример migrate to java config from xml based spring

Вы можете найти готовый к адаптации пример интеграции трикотажа here.

Следующее, что я до сих пор смущен, почему вы используете RequestContextListener для приложения REST. Если у вас нет специального назначения по its documentation, удалите его. Если вы хотите использовать его в этом example поможет

найти также некоторые полезные детали относительно вопроса here

+0

Спасибо за помощь Том! –

+0

Можете ли вы принять ответ, если он сработает :) –

1

я, наконец, нашел решение для моего вопроса, я смешивала в jersey1.x и jersey2.x maven зависимостей (от солнца и стеклянной рыбы

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