본문 바로가기

Study/BackEnd

[BackEnd] Web Architecture & Servlet 기초 (eclipse)

Web Architecture

  • Client(Web Browser) : html,css,Js등의 정보를 server에 요청(request)함
  • WebServer : 보통 http server를 말함. hyper text의 변환작업을 수행하고 요청받은 정보를 처리하기 위해 데이터를 Application server로 전달함. 응답(response)을 마크업 언어로 client에게 전달함.
  • Application Server : Client가 요청한 것에 대한 Logic을 담당함. DataBase와 연동하여 작업을 처리할 수 있음. 처리한 결과를 Web Server로 넘겨줌
  • Web Application Server(WAS) : Web Server + Application Server의 기능을 합친 것 . ex) Tomcat

Servlet 생성 실습

Dynamic Web Project 생성

톰캣의 버전을 잘 확인하고 생성해야한다.


next 버튼을 누르면 위와 같은 화면이 나오는데 java Application을 저장할 위치를 설정하는 것이다.

생성하는 모든 .java 파일은 위의 폴더 안에 만들어 저장해야한다.


next버튼을 한번 더 누르면 Context root와 context directory를 설정하는데

Context root는 root경로 이후에 붙게되는 경로이다.

만약 하나의 서버에서 여러가지 프로젝트를 실행한다면, 서로 다른 프로젝트에 같은 이름의 파일이 존재할 수 있다. http://localhost:8080/index.html 이 실행되면 index.html이 어느 프로젝트에 존재하는 것을 가리키는 것인지 알 수 없을 것이다.

이를 구분해주는것이 Context root이다.

실제로 프로젝트를 실행해 웹페이지를 띄우면 http://localhost:8080/practice/index.html이 실행 될 것이다.

Context Directory는 .java 파일을 제외한 나머지 html, css, js, jsp등의 파일의 위치경로를 어디로 설정할 것인지를 의미한다.

기본 Method

클래스를 하나 만들고 servlet 인터페이스를 implements하면 꼭 오버라이딩 해야하는 메소드들이 존재한다.

public class test implements Servlet  {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }

    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }
}

위의 메소드를 오버라이드 한다면 웹에서 동작할 수 있게 만들어 준다고 약속한 것과 같다.

  • destroy() : servlet이 제거되기 직전에 호출되는 메소드. 자원을 반납시키는 메소드
  • init() : 초기화 작업. 생성자와 비슷하다. 초기값들을 설정 해 준다.
  • service() : Client의 요청과 응답을 처리하기 위한 메소드. 비즈니스로직을 구현한다.
  • getServletConfig() : servlet의 초깃값, 파라미터등에 대한 정보를 반환한다.
  • getServletInfo() : servlet에 대한 정보나 저자, 버전, 저작권등의 정보를 반환한다.

service메소드를 제외한 다른 메소드는 필요에 따라 만들어도 되고 만들지 않아도 될텐데 인터페이스이므로 반드시 구현해야 프로젝트가 동작한다.

이를 해결해 둔 것이 추상클래스인 GenericServlet이다.

GenericServlet을 extends하면 service만 오버라이드하면 된다.

다만, Client가 서버에 요청을 보낼 때 Get방식과 Post방식이 있는데 그 방식을 매 요청마다 확인해야 한다.

이를 다시 해결한게 HttpServlet이다.

HttpServlet은 추상클래스이지만 추상메소드는 존재하지 않는다.

httpServlet 클래스 내의 원하는 메소드만 오버라이딩해서 구현할 수 있다.

client가 get방식을 사용한다면 doGet메소드를 오버라이드하고 post방식을 사용한다면 doPost메소드를 오버라이드한다.


httpServlet을 간편하게 만들 수 있도록 해둔 것이 프로젝트 - new - servlet이다.

Servlet 생성

Dynamic web Project에서 src폴더에 new - servlet을 하면 초기에 아래와 같은 화면이 나온다.

class name과 pakage를 설정하고 finish를 누르면 기본값으로 생성이 되지만 next를 눌러 기능을 살펴보자.


description은 servlet의 설명인데 넘어가고 초기 파라미터값도 넘어간다.

URL mapping은 기본 도메인/프로젝트명(context root)에 해당하는 위치에서 어느 servlet이 실행되게 할 것인지를 의미한다.

src/패키지명/HelloServlet.java를 모두 입력할 필요 없이 mapping값으로 설정된 이름만 주소에 적어주면 해당 servlet이 실행된다. 설정하지 않고 finish를 눌러서 넘어가도 생성된 java파일의 Class명 상단에있는 어노테이션으로 재설정이 가능하다.


어느 메소드를 오버라이딩 할 것인지 체크하면 자동으로 생성해준다.

하지만 보통 Get방식과 Post방식만 대부분 오버라이딩하고 나머지는 직접 메소드를 만들게 되므로 따로 설정할 필요가 없다.

그냥 finish를 눌러서 넘어가고 필요한 것을 제외한 나머지를 지우는 것이 더 편하고 빠르다.


servlet 테스트

package practice.helloservlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet("/Hello")
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Hello, Servlet!!");
    }
}

클래스명 상단 13번 라인에 url mapping을 Hello라고 변경했고

get을 제외한 나머지를 모두 삭제했다.

이를 실행시킬 때 tomcat이라는 WAS에서 실행될텐데, next를 한번 눌러보면 아래와 같은 화면을 볼 수 있다.

왼쪽은 메모리에 적재할 수 있는 프로젝트들을 의미하고 오른쪽은 적재시킬 프로젝트를 의미한다.

실제 실행에 필요한 project를 제외하고 remove시키는 것이 메모리관리에 더 효율적이다.

테스트용 또는 연습용으로 사용한다면 메모리에 크게 부담가지 않으므로 PC의 메모리가 넉넉하다면 그냥 finish를 눌러 실행시켜도 문제가 되지 않는다.

실행을 시켜보면 Web Page가 새로 실행될 것이다.

URL을 살펴보면

도메인 : localhost:8080

Context root : practice --> 프로젝트 이름

mapping : Hello로 설정된 것을 볼 수 있다.


위의 servlet의 코드에서는 웹 화면에 출력할 것들을 따로 설정하지 않았으므로 아무것도 뜨지 않지만

System에 Hello, Servlet!!이 콘솔에 출력된다면 프로젝트가 정상적으로 생성되었고 실행되었다는것을 알 수 있다.

'Study > BackEnd' 카테고리의 다른 글

[Spring Security] 인가  (0) 2022.04.17
[Spring Security] Spring Security와 인증 과정  (0) 2022.04.17
[BackEnd] Servlet 실습 & LifeCycle  (0) 2021.10.10