当前位置: 首页 > 知识库问答 >
问题:

在spring-boot项目中使用spring mvc xml项目

厉钊
2023-03-14

我创建了这个测试项目,由两个项目组成:一个使用spring-boot,一个使用Spring-MVC。它们中的每一个单独工作都很好。我想要做的是运行spring-boot,并能够通过加载spring-mvc项目的上下文来访问该项目的web页面。这个项目很简单,因为我只是想测试如何做混合。

问题是,当我运行spring-boot应用程序时,来自spring-mvc的页面无法访问,因为它没有在构建中添加webbapp文件夹(包含WEB-INF)。我能够在spring-boot应用程序中从spring-mvc自动启动服务。

树看起来如下所示:

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;

import java.util.Arrays;

@SpringBootApplication
@ComponentScan({"org.burdu", "hello"})
//@ImportResource({"classpath:WEB-INF/spring-core-config.xml", "classpath:WEB-INF/spring-mvc-config.xml"})
public class Application {

public static void main(String[] args) {
    ApplicationContext ctx = SpringApplication.run(Application.class, args);

    System.out.println("Let's inspect the beans provided by Spring Boot:");

    String[] beanNames = ctx.getBeanDefinitionNames();
    Arrays.sort(beanNames);
    for (String beanName : beanNames) {
    System.out.println(beanName);
    }
}
}
group 'net.burdu'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'idea'

sourceCompatibility = 1.8

repositories {
mavenCentral()
mavenLocal()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
rootProject.name = 'testSpringXMLAndBoot'
include 'spring-mvc'
include 'spring-boot'
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'war'
apply plugin: 'spring-boot'

sourceCompatibility = 1.8

repositories {
jcenter()
mavenCentral()
}

buildscript {
repositories {
    mavenCentral()
}

dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
}
}

dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile project(':spring-mvc')
}

spring-mvc build.gradle

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'war'
apply plugin: 'jetty'

sourceCompatibility = 1.8

repositories {
mavenCentral()
mavenLocal()
}

dependencies {
compile 'ch.qos.logback:logback-classic:1.1.3'
compile 'org.springframework:spring-webmvc:4.1.6.RELEASE'
compile 'javax.servlet:jstl:1.2'
}

jettyRun{
contextPath = ""
httpPort = 8080
}

jettyRunWar{
contextPath = ""
httpPort = 8080
}

spring-core-config.xml

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   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/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd ">

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

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

<mvc:resources mapping="/resources/**" location="/resources/" />

<mvc:annotation-driven />

</beans>

spring-mvc-config.xml

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   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/context
    http://www.springframework.org/schema/context/spring-context.xsd ">

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

</beans>
<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>Gradle + Spring MVC Hello World + XML</display-name>
<description>Spring MVC web application</description>

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

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

<!-- For root context -->
<listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-core-config.xml</param-value>
</context-param>

</web-app>

spring-boot、HelloWorldService和WelcomeController中的HelloController都是简单的bean。我不粘贴他们的内容在这里,因为问题已经太长了,但如果需要,我可以添加他们。

共有1个答案

卢鸿彩
2023-03-14

我已经将组合的项目导入到IDE中,我发现很难将两个项目集成为一个并保持它们的原创性。真正的困难是spring无法知道位于lib/spring-mvc.jar中的子项目spring-mvc的jar中的资源。如果我将它提取到子项目spring-boot,它仍然不能工作。

之后,我在spring-boot中找到了关于JSP限制的文档,它说:

由于Tomcat中的硬编码文件模式,可执行jar将无法工作

在您将应用程序转换为spring boot之后,您也可以控制web容器。

最后,如果您真的想一起使用它们,下面的文档可能很有用:

在旧的(servlet2.5)容器中部署WAR

 类似资料:
  • 在 中测试代码依赖项。格雷德尔, 当我以的形式运行应用程序时,我得到了一个错误: 为什么在IDE中运行项目时使用测试依赖项?或者我错过了什么? 任何帮助都非常感谢:) 注: 1-如果我使用或gradle boot run在IDE之外运行它,它运行得很好 2-我尝试过刷新gradle项目、清洁项目等。 3-使用STS版本

  • 我有一个Spring Data JPA项目来访问我的数据库并检索用户凭据。我将这个项目打包为jar(不是可执行jar),并将其作为maven依赖项包含到另一个Spring boot项目中,因为我想重用以前开发的相同实体和存储库。每次运行Spring Boot应用程序时,都会出现以下错误: 我开始怀疑我正在做的事情是否可能?PS:我不想将JPA项目与控制器和服务项目混合在一起

  • 我目前正在开发一个SpringBootJAR库,用于可重用的组件,比如 ldap 电子邮件 与apache kafka消息 其余api用法 我们公司的每个Java用户/程序员都应该能够把这个罐子放在一个项目中(通过maven或其他方式),并使用可重用的组件,而不是一遍又一遍地编码所有的东西。 在REST之上为该问题构建微服务不是我们的选择。 我的问题是: 我可以在任何普通Java项目中重用这个Sp

  • 本文向大家介绍spring boot项目中MongoDB的使用方法,包括了spring boot项目中MongoDB的使用方法的使用技巧和注意事项,需要的朋友参考一下 前言 大家都知道MySQL数据库很好用,但数据量到了千万以上了,想增加字段是非常痛苦的,这个在MongoDB里就不存在,字段想怎么加就怎么加,所以也就有了想在spring-boot里用MongoDB的想法了,Github上sprin

  • 本文向大家介绍Spring Boot 项目中使用Swagger2的示例,包括了Spring Boot 项目中使用Swagger2的示例的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Spring Boot 项目中使用Swagger2的示例,分享给大家,具体如下: 添加Swagger2依赖 在pom.xml中加入Swagger2的依赖 创建Swagger2配置类 在Application.jav

  • 问题内容: 我一直在使用spring-data开发RESTful Web服务。几天前,发布了一个特殊的spring-data jpa REST框架。 现在,我注意到可以在此框架中使用@Version了。该版本是自己生成的还是您需要手动执行? 可以单独使用@Version吗?(这样我就不必对现有的存储库/域等进行任何更改。) 我需要做一些额外的配置来使用@Version吗? 问题答案: 自从我发布这