簡體   English   中英

在集成Spring和jersey的同時在web.xml中指定context-param

[英]Specifying context-param in web.xml while integrating Spring and jersey

我知道關於此主題已經存在一個問題,但是在使用Maven的Spring MVC Web應用程序中為web.xml中的<context-param>添加值時,應用程序無法正常工作。

我正在嘗試集成Spring和jersey,當我添加context-param標簽以指定applicationContext.xml時,應用程序將不會加載主頁(webContent文件夾下的index.jsp),如果該標簽被刪除,則應用程序將加載主頁但我將無法指定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下

謝謝你的幫助 !

基本問題是您將xml和注記配置混合在一起。 您需要了解contextClasscontextConfigLocation上下文參數之間的關系,以及ContextLoaderListener將如何使用它。

  1. contextClass:指的是配置類。 您在此處將其稱為org.springframework.web.context.support.AnnotationConfigWebApplicationContext
  2. contextConfigLocation:這是spring的引導程序將在其中搜索config的位置。 您將contextClass指定為AnnotationConfigWebApplicationContext,為此您應提供Spring bean配置類所在的包名稱。我假設您已經用@Configuration注釋了此類

如果沒有這樣的@Configuration帶注釋的類,則刪除contextClass並僅將contextConfigLocation參數與xml路徑作為值。 默認情況下, ContextLoaderListener采用基於xml的ContextLoaderListener 這是從基於xml的spring遷移到Java配置的示例

您可以在此處找到適應球衣集成的示例。

接下來,我仍然感到困惑,為什么要對REST應用程序使用RequestContextListener 如果您沒有任何特殊用途,請按照文檔中的說明刪除。 如果要使用它,此示例將有所幫助

也可以在此處找到有關該問題的一些有用的詳細信息

我終於找到了解決我問題的方法,我混合了jersey1.x和jersey2.x的Maven依賴項(即sun和glassfish的依賴項)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM