programing

스프링 부트를 사용하지 않고 스프링 휴식 서비스 생성

newsource 2023. 3. 6. 21:12

스프링 부트를 사용하지 않고 스프링 휴식 서비스 생성

저는 spring.io의 시작 튜토리얼에 따라 REEST 서비스 https://spring.io/guides/gs/rest-service/을 구축했습니다.문제는 이 튜토리얼에서는 spring boot을 사용하여 Tomcat이 내장된 스탠드아론 실행 jar를 작성하는 방법만 설명한다는 것입니다.

예를 들어 기존 Tomcat 인스턴스에 도입하기 위한 전쟁을 발생시키기 위해 프로젝트를 처음부터 작성할 수 있는 방법이 있습니까?

PS: 동일한 문제에 대해 Stackoverflow에서 Tomcat에서 JAR이 아닌 이전 스레드 Spring RESTful Service를 WAR로 찾았습니다.문제는 외부 Tomcat 컨테이너에서 동작하도록 스탠드아론 앱의 스프링 부트 프로젝트를 변경하는 방법을 찾는 것이 아니라 스프링 부트를 전혀 수반하지 않는 '깨끗한' 솔루션을 찾고 싶기 때문에 수락된 답변과 제안으로는 문제가 정확히 해결되지 않는다는 것입니다.스택 오버플로우에서는 전혀 새로운 것이 아닙니다.새로운 질문을 여는 것이 올바른 절차이기를 바랍니다).

나머지 컨트롤러를 작성하기 위해 스프링 부트가 필요하지 않습니다.

MVC https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#spring-web 를 설정하는 방법에 대해서는, 스프링 프레임워크의 메뉴얼을 참조해 주세요.

MVC 셋업(DispatcherServletspring 버전에 따라 xml을 사용하거나 프로그래밍 방식으로 설정할 수 있습니다.https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet

설정이 완료되면 응용 프로그램에 나머지 컨트롤러를 추가할 수 있습니다.주의: 나머지 컨트롤러)는@RestController주석)은 다음을 결합한 고정관념 주석이다.@ResponseBody그리고.@Controller즉, 컨트롤러는 뷰를 반환하는 대신 응답 본문에 개체를 반환합니다.

위의 내용을 설명하는 완벽한 예입니다.http://www.programming-free.com/2014/01/spring-mvc-40-restful-web-services.html

다음으로 다른 예를 제시하겠습니다.

디렉토리 레이아웃:

.
├── ./pom.xml
└── ./src
    └── ./src/main
        ├── ./src/main/java
        │   └── ./src/main/java/biz
        │       └── ./src/main/java/biz/tugay
        │           └── ./src/main/java/biz/tugay/restfulspring
        │               └── ./src/main/java/biz/tugay/restfulspring/config
        │                   ├── ./src/main/java/biz/tugay/restfulspring/config/RestfulHello.java
        │                   └── ./src/main/java/biz/tugay/restfulspring/config/WebAppInitalizer.java
        └── ./src/main/webapp
            └── ./src/main/webapp/WEB-INF
                └── ./src/main/webapp/WEB-INF/web.xml

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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>biz.tugay</groupId>
    <artifactId>restfulSpring</artifactId>

    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>restfulSpring Maven Webapp</name>

    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.16.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>restfulSpring</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.2.1.v20140609</version>
            </plugin>
        </plugins>
    </build>

</project>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd"
         version="3.0">
</web-app>

WebAppInitalizer.java

package biz.tugay.restfulspring.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

@Configuration
@EnableWebMvc
@ComponentScan("biz.tugay.restfulspring")
public class WebAppInitalizer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

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

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

RestfulHello.java

package biz.tugay.restfulspring.config;

import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/")
public class RestfulHello {

    @RequestMapping(value = "hello")
    public ResponseEntity<String> sayHello() {
        final HttpHeaders httpHeaders= new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        return new ResponseEntity<String>("{\"msg\": \"Hello World\"}", httpHeaders, HttpStatus.OK);
    }
}

구축 및 실행:

mvn clean install
mvn jetty:start

테스트:

> GET /hello HTTP/1.1
> Host: localhost:8080
> User-Agent: insomnia/5.15.0
> Accept: */*
< HTTP/1.1 200 OK
< Date: Fri, 27 Apr 2018 00:06:07 GMT
< Content-Type: application/json
< Content-Length: 22
< Server: Jetty(9.2.1.v20140609)

수신된 콘텐츠:

{
    "msg": "Hello World"
}

언급URL : https://stackoverflow.com/questions/29416804/creating-spring-rest-services-without-using-spring-boot