ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Intellij tomcat war 배포 - window에서 filezilla를 이용해 sftp 서버배포
    Server/Spring 2020. 3. 20. 18:30

    Tomcat에 WAR 배포하는데 삽질을 정말 많이 했다.

    WAR 와르와르와르 하니까 전혀 관련 없지만 콜드의 와르르♥ 가 계속 생각났다.

    서버 배포에 성공하면 신나는 마음으로 듣기 위해 와르르를 흥얼거리며 해결했다.

    결국 행복하게 와르르~~~~~~~~~~~~~~~~~~~~~~듣게 되었다.

    와르르 들으면서 하는 포스팅!

     

     

     

     

    🔥목차🔥

    🍓 1. WAR 파일 생성

      1) war 파일 배포하기 위해 Main 클래스에 SpringBootServletInitializer 상속 받기

      2) pom.xml finalName 태그 추가

      3) tomcat 서버에 배포할 war파일 만들기

    🍓 2. tomcat 서버에 생성한 WAR 파일 배포

      방법 1) localhost에 배포 -> Local tomcat 서버에 배포

      방법 2) 원하는 서버에 배포 -> 윈도우의 경우 fileZilla를 이용해 서버에 배포

    🐥 Tomcat 한글 깨짐현상 해결방법

     

     

     

    🍓 1. WAR 파일 생성

    1) war 파일 배포하기 위해 Main 클래스에 SpringBootServletInitializer 상속 받기

     

    문제 발생 : Tomcat에 war 배포시 404 에러가 발생했다.

    발생 원인 : Main 클래스에 SpringBootServletInitializer를 상속받지 않았기 때문이다.

    package kr.ac.korea.sans.cs;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class CsApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(CsApplication.class, args);
        }
    
    }
    

     

    해결 

    package kr.ac.korea.sans.cs;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    
    @SpringBootApplication
    public class CsApplication extends SpringBootServletInitializer {
        public static void main(String[] args) {
            SpringApplication.run(CsApplication.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(CsApplication.class);
        }
    }

     

    왜 ?

     

    일반적인 Spring Framework에서는 Web.xml에 DispatcherServlet을 등록하는 작업이 필요하다.

    Servlet 3.0에서는 web.xml이 없이도 배포가 가능해졌는데 Apache Tomcat 7부터 지원한다.

    web.xml의 역할을 WebApplicationinitializer 인터페이스를 구현하여 프로그래밍으로 ServletContext를 구현할 수 있도록 바뀐것이다. 

    SpringBootServletInitializer는 WebApplicationinitializer의 구현체이다.

    SpringBootServletInitializer를 이용하여 WebApplicationContext를 생성하여 Servlet Context에 추가한다.

    프로젝트에 web.xml도 없었고, WebApplicationinitializer를 구현한 SpringBootServletInitializer도 없었기 때문에 Tomcat에서 URL의 요청을 받아드릴수가 없었던 것이다.

    SpringBootServletInitializer를 상속 한다는건 결국 Tomcat과 같은 Servlet Container 환경에서 Spring Boot Application을 동작 가능 하도록 Web Application Context를 구성한다는 의미이다.

     

     

     

     

    2) pom.xml finalName 태그 추가

    build 태그에 finalName태그 추가하면 된다.

    <finalName>cs</finalName>

     

    build태그 전체 코드

    <build>
            <finalName>cs</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>

    이렇게 하면 war파일 생성시 finalName 에 지정한 이름으로 war파일이 생성된다.

     

     

     

     

    3) tomcat 서버에 배포할 war파일 만들기

    Run - Edit Configurations..

     

     

    command line 에 compile war:war 입력 - OK

     

    Run (Shift+F10) 해주면

     

    target 디렉토리에서

    finalName에 입력한 cs 이름으로 war파일이 생성된 것을 확인할 수 있다.

     

     

     


     

    🍓 2. tomcat 서버에 생성한 WAR 파일 배포

    방법 1) localhost에 배포 -> Local tomcat 서버에 배포

    방법 2) 원하는 서버에 배포 -> 윈도우의 경우 fileZilla를 이용해 서버에 배포

     

    방법 1) localhost에 배포

    ① tomcat 설치한 폴더 open

    (필자의 경우 : C:\Program Files (x86)\Apache Software Foundation\Tomcat 9.0 - remote 8080\webapps 여기에 위치)

    Tomcat 9.0 - remote 8080은 Tomcat 9.0을 복사해서 생성한 파일

     

    ② tomcat - webapps 디렉토리에 생성한 war파일 복사&붙여넣기

     

     

    ③ cmd 관리자 권한으로 실행

    $ cd C:\Program Files (x86)\Apache Software Foundation\Tomcat 9.0 - remote 8080\bin

    $ startup.bat (윈도우의 경우)

    맥의 경우 startup.sh 

    ④ startup.bat을 입력하면 tomcat 서버가 구동된다.

    spring 문자가 뜨면 서버에 잘 올라간 것이다! 예에~~

     

    작성해둔 테스트 코드를 실행하면 다음과 같이 잘 구동된다!

     

    테스트를 위한 spring /hello 테스트 코드 (Controller 클래스를 만들어 작성하면 된다.)

    @RestController
    public class CsAppController {
        @RequestMapping(value="/hello", method= RequestMethod.GET)
        public String test (HttpServletRequest request) throws Exception {
            return "Hello";
        }
    }

     

     

    방법2) 원하는 서버에 배포

    윈도우 사용자의 경우 FileZilla를 이용하면 편하게 SFPT 서버 배포가 가능하다.

    내 사이트 - New site

    프로토콜 : SFTP

    호스트 : 원하는 서버 주소

    포트 : 22

    사용자  : 사용자 ID

    비밀번호 : 사용자 비밀번호

     

    꼭!!!!!! 포트를  22 로 지정해야한다!! 

    8080 Nope!

    21 Nope!

    22 YEAH! YES!

     

     

     

     


    🐥Tomcat 한글 깨짐현상 해결방법

    HOXY.... tomcat 한글깨짐 문제가 발생한다 ??!

    해결하면 되지~~~

     

    해결방법

    실행창(WIN+R)을 누르고 regedit을 입력하여 레지스트리 편집기
    컴퓨터 > HKEY_CURRNET_USER > Console 위치에 새로운 키 값을 생성해준다.

     

    해당 키 값의 이름은 Tomcat으로 입력해주고 해당 키 값 안에 DWORD(32비트) 값을 하나 추가해준다.

     

    해당 값의 이름은 CodePage로 변경

     

     

     

     

     

     

    편 - 안 - 😁

     

    반응형
Designed by Tistory.