【问题标题】:Spring + Maven + Intellij +HelloWorldSpring + Maven + Intellij +HelloWorld
【发布时间】:2017-06-11 11:41:40
【问题描述】:

我在搜索字段中有一些关于我的问题的谷歌,但我没有得到解决方案。在通过maven在intellij idea中创建的spring项目(不是启动)中,我设置了所有东西(见下文),如tomcat配置,简单的helloWorld的java配置等......但是:我只得到了爆炸战争而不是欢迎的结果目录:我在 localhost:8080 看到它(不是在 localhost:8080/welcome)。 如果我将工件设置为战争,我会得到通常的 tomcat 主页,而对我的项目一无所知。

下面的代码片段:

控制器:

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {

    @RequestMapping("/")
    public String welcome(Model model){
        model.addAttribute("hello", "Hello");
        model.addAttribute("anyone", "anyone");
        return "welcome";
    }
}

WebApplicationContextConfig: <pre></pre>

package com.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;


@Configuration
@EnableWebMvc
@ComponentScan("com")
public class WebAppContextConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean
    public InternalResourceViewResolver getInternalViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setViewClass(JstlView.class);
        resolver.setPrefix("/pages/");
        resolver.setSuffix(".jsp");

        return resolver;
    }
}

DispatcherServletInitializer:

package com.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;


public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebAppContextConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>io.github</groupId>
    <artifactId>webstore</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.8.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

 </project>

Run configuration window:

Folder structure

【问题讨论】:

  • 发布您的文件夹结构
  • 为什么不用Spring Boot?它使您免于摆弄基础知识并且可以正常工作。

标签: java spring maven tomcat intellij-idea


【解决方案1】:

我建议您不要为 Spring 配置文件而烦恼,并在您已经为您配置好的地方使用 Spring Boot。

例如,这个“hello world”示例应该做你想做的事:https://github.com/pgrimard/spring-boot-hello-world

另外,请考虑使用http://start.spring.io/ 生成项目的骨架。

【讨论】:

  • 我的问题不是Spring,问题在于使用Spring在intellij中部署Tomcat。在 STS 上,我可以做我想做的事。关于 spring boot - 它对我来说太抽象了,我也认为它为每个项目提供了嵌入式 Tomcat。同时我可以在服务器上的 tomcat 上手动配置任意数量的文件(即现在我不知道如何在启动时管理嵌入式 TC)。
  • 好吧,如果你愿意,你可以配置 spring-boot 为你提供一个 .war 文件。更改它需要两个额外的步骤 - 将打包更改为 war 并添加两个依赖项,如下所述:docs.spring.io/spring-boot/docs/current/reference/htmlsingle/…
  • 此外,如果您使用start.spring.io,那么您可以在此处选择“战争”包装(按下“切换到完整版”按钮后)。生成的项目可以轻松部署到Tomcat上,没有任何问题。
猜你喜欢
  • 2015-09-09
  • 2017-09-10
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2020-06-18
相关资源
最近更新 更多