본문 바로가기

Spring/Spring MVC

(SERVLET) 서블릿 애플리케이션 개발

기본 세팅

maven archetype -webapp설정

 

기본 골격

servlet 의존성 설정 (with pom.xml)

provided - 코딩하는 시점에는 사용 가능

                   런타임 시점 (war packaging ) 에는 classpath 제외

                   javax.servlet-api는 container에서 제공된다.  -> 톰캣 container에서 제공하기 때문에 굳이 Runtime 시점까지 Scope을                                                                                                  지정할 필요가 없다.

더보기
  • dependency 하위에 포함되는 항목
  • 해당 dependency가 포함되는 범위에 대한 타입
  • scope 종류

    1. compile :

      • 기본 scope. 미입력시에도 기본 적용
      • 모든 상황에서 포함됨
    2. provided :

      • compile과 유사하게 모든 상황에서 수행된다
      • 하지만, 다른 외부 컨테이너에서 기본 제공되는 API인경우 provided로 지정 시 마지막 패키징할 때 포함되지 않음
      • 예를 들면 tomcat에서 기본적으로 servlet api를 제공하기 때문에 servlet api를 provided로 지정하면 패키징시 제외된다.
    3. runtime :
      • 컴파일 시에는 불필요 실행시에 필요한 경우.
      • 런타임 및 테스트 시 classpath에 추가 되지만, 컴파일시에는 추가 되지 않음
    4. test : 테스트시에만 사용
    5. system :
      • provided와 유사
      • system의 특정 path를 참조하도록 지정
      • Maven의 central repository를 사용하지 않음
    6. import :
      • scope는 dependencyManagement 섹션에서 pom의 의존관계에 대해 사용

http://progtrend.blogspot.com/2018/07/spring-boot-war.html

 

Spring Boot 프로젝트를 War로 패키징하기(생성하기)

Spring Boot 프로젝트를 War로 패키징하기 (생성하기)

progtrend.blogspot.com

https://wikidocs.net/18344

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>

 

java dir 생성 및 Sources dir 지정

 


서블릿 코드 작성 : HttpServlet 상속

public class HelloServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        System.out.println("init");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");

        resp.getWriter().println("<html>");
        resp.getWriter().println("<head>");
        resp.getWriter().println("<body>");
        resp.getWriter().println("<h1>Hello Servlet!!!</h1>");
        resp.getWriter().println("</body>");
        resp.getWriter().println("</head>");
        resp.getWriter().println("</html>");
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}

 

서블릿 실행 (with Tomcat) - 서블릿 독자적으로 실행할 수 있는 방법은 존재하지 않는다.

1. 서블릿 컨테이너에 배포하는 식으로 진행

ADD CONFIGURATION에서 Tomcat 설정

 

 

 

 

 

 

 

해당 경로에 다운로드한 Tomcat을 설정한다.

 

와... 진짜 번거롭네

 

그래도 해보자!

 

 

 

 

 

 

 

 

https://tomcat.apache.org/download-90.cgi

 

Apache Tomcat® - Apache Tomcat 9 Software Downloads

Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification versions

tomcat.apache.org

2. 해당 사이트에서 tomcat 9.0 버전 설치(zip)

 

3. 다운로드한 tomcat 경로 설정 후 Deployment에서 war exploded 설정

war packaging 방법

  • war로 묶어서 배포하는 방법
  • war를 압축을 풀어서 배포하는 방법

 

 

 

mac 사용 유저는 경로 설정뿐만 아니라 권한을 주는 작업도 해주어야 한다.

기본 설치 시에는 실행에 대한 권한이 없기 때문이다.

 

cd apache-tomcat-9.0.30/bin

해당 디렉터리의 sh에 해당하는 파일에 대해 권한을 모두 준다.

chmod +x ./*.sh

 

 

위치도 해당 이름으로 지정된다.

 

 

4. 실행결과

실행 결과 성공
해당 웹 브라우저 플로팅


근데... 만든 서블릿이 들어오지 않았네...?ㅋㅋㅋ

 

web.xml에 설정을 안 해주었기 때문

 

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>me.choi.HelloServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

 

웹 어플리케이션 실행결과
서블릿 실행 결과

근데 너무 길다 url이 

Application context root로 변경

 

 

 

근데 여기서 init이 한번 호출되었고

그 이후에는 호출되지 않으며 doGet만 호출된 점에 주목하자! - memory에 이미 initialization이 되었기 때문이다.

 

 

서버를 끌 땐 destroy 호출

 

 

 

 


개요

  • Spring Mvc는 내가 만든 HttpServlet 기반으로 만들어져 있다.
  • 어떻게 우리는 애노테이션으로 매핑하고 처리할 수 있을까?
  • 뷰로 어떻게 thymeleaf를 쓸 수 있을까?
  • web.xml을 만든 적이 없는데?

코드 참조

https://github.com/mike6321/Spring/tree/master/SpringMVC/java-servlet-demo

 

mike6321/Spring

Contribute to mike6321/Spring development by creating an account on GitHub.

github.com