복붙노트

[SPRING] Spring MVC에서 @JavaConfig가 작동하지 않는 이유는 무엇입니까?

SPRING

Spring MVC에서 @JavaConfig가 작동하지 않는 이유는 무엇입니까?

나는 dispatcher xml과 web xml없이 Spring MVC 프로젝트를 설정하려고한다. (즉, xml이 전혀 없다.) 따라서 Spring의 @JavaConfig 기술을 사용하고있다. 그러나, 내 서버에서 응용 프로그램을 시작하려고 할 때마다 서버가 작동하지 않습니다 (예외가 발생하지 않고 HTTP 404가 발생 함). 다음은 프로젝트 구조의 스냅 샷입니다.

그리고 여기 코드 스 니펫 : WebConfig.java

@EnableWebMvc
@Configuration
@ComponentScan({ "com.controller" })
public class WebConfig extends WebMvcConfigurerAdapter {

    private static final String VIEW_LOCATION = "/WEB-INF/views/";
    private static final String SUFFIX = ".jsp";

//  @Override
//  public void addResourceHandlers(ResourceHandlerRegistry registry) {
//      System.out.println("in resource");
//      registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");       
//  }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        System.out.println("in view");
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix(VIEW_LOCATION);
        viewResolver.setSuffix(SUFFIX);
        return viewResolver;
    }

}

Initializer.java

public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    private static final String MAPPING_URL = "/";

    @Override
    protected Class<?>[] getRootConfigClasses() {
        System.out.println("in config");
        return new Class[] { WebConfig.class };
    }

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

    @Override
    protected String[] getServletMappings() {
        System.out.println("dispatcher");
        return new String[] { MAPPING_URL };
    }

}

HelloController.java

@Controller
public class HelloController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String printWelcome() {
        System.out.println("in servlet");
        return "index";
    }

}

다음은 pox.xml 스 니펫입니다.

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com</groupId>
  <artifactId>UI</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>UI Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
    <finalName>UI</finalName>
  </build>
</project>

해결법

  1. ==============================

    1.프로젝트 구조는 좋아 보이지만 Eclipse 구성에 대해서는 의구심이 듭니다. 귀하의 패키지가 Java Source의 일부가 아닌 것 같습니다.

    프로젝트 구조는 좋아 보이지만 Eclipse 구성에 대해서는 의구심이 듭니다. 귀하의 패키지가 Java Source의 일부가 아닌 것 같습니다.

    다음 단계를 실행하십시오.

    1. 프로젝트의 소스 세트를 확인하십시오. 프로젝트 속성, Java 빌드 경로 및 소스 탭으로 이동하여 src \ main \ java 및 src \ main \ resources 항목을 찾습니다. 폴더가 없다면 소스 폴더를 추가하려면 폴더 추가를 클릭하십시오.

    2. 배포 어셈블리로 이동하여 올바른 방식으로 배포 항목 매핑이 있는지 확인합니다. 배포 어셈블리를 찾지 못한 경우 프로젝트 패싯으로 이동하여 프로젝트를면 처리 된 양식으로 변환하는 옵션으로 이동하십시오. 프로젝트 패싯에서 동적 웹 모듈을 선택해야합니다.

    배포 어셈블리에는 Maven 종속성에서 WEB-INF / lib, / src / main / webapp /, src / main / resources와 WEB-INF / classes 및 src / main / java에서 WEB-INF / classes 로의 매핑이 있어야합니다. 이러한 항목 중 누락 된 항목이 있으면 추가를 클릭하고 필요에 따라 폴더 또는 라이브러리를 선택할 수 있습니다.

    3. Eclipse 또는 Maven 또는 다른 도구를 통하지 않고 응용 프로그램을 배포하는 경우 프로젝트의 웹 프로젝트 설정에서 언급 한 컨텍스트 루트 이름을 사용하여 프로젝트에 액세스해야합니다.

    위의 경우 localhost : 8080 / UI로 응용 프로그램에 액세스 할 수 있습니다. 여기서 서버 포트 8080은 구성에 따라 다를 수 있습니다.

  2. ==============================

    2.귀하의 코드는 괜찮습니다. Tomcat 8 응용 프로그램 서버를 변경하지 않고 실행했습니다. war, mvn clean 패키지를 패키지화하려면 Maven을 사용하십시오.

    귀하의 코드는 괜찮습니다. Tomcat 8 응용 프로그램 서버를 변경하지 않고 실행했습니다. war, mvn clean 패키지를 패키지화하려면 Maven을 사용하십시오.

  3. from https://stackoverflow.com/questions/32930281/why-javaconfig-not-working-in-spring-mvc by cc-by-sa and MIT license