ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA - Tomcat, Servlet 으로 클라이언트 요청받기
    CS/JAVA 2024. 6. 17. 23:20

    클라이언트가 서버로 데이터를 요청하고 받는 과정이다. 

    클라이언트가 서버로 요청을 보내면, db 서버는 그에 맞는 데이터를 db서버에 요청한다.

    db서버는 데이터를 서버에 보내고 데이터를 받은 서버는 그에 맞는 응답을 클라이언트로 보낸다.

     

    지난 포스팅에서는 JDBC를 이용해 서버와 db서버가 요청/응답을 주고 받는 과정을 구현해보는 실습을 했다.

    https://shinebyul.tistory.com/51

     

    JAVA - JDBC 사용해보기

    웹에서 클라이언트가 데이터를 요청하면, 서버는 DB서버에 데이터를 요청해 받아서 보내줘야 한다. 이번 포스팅에서는 JDBC를 이용해 DB에 데이터를 요청해 받아볼 것이다. 사실 나중에는 spring

    shinebyul.tistory.com

     

    이번엔 Tomcat을 이용해 클라이언트와 서버가 요청/응답을 주고 받는 과정을 구현해볼 것이다. 

     

    Tomcat이란?

    Apache Tomcat은 Java 서블릿과 JavaServer Pages(JSP)를 실행하기 위한 환경을 제공해주는 WAS(Web Application Server)이다.

    Apache와 Apache Tomcat은 차이점이 뭘까?

    Apache는 Web Server이고, Apache Tomcat은 Web Application Server이다. 

    💡Web Server VS Web Application Server
    Web Server : 클라이언트가 요청한 프로그램 코드(파일)만 제공해준다.
    Web Application Server : 클라이언트가 요청한 프로그램 코드(파일)을 실행시켜 웹페이지 결과를 제공한다. 
    💡Servlet 이란?
    HTTP 요청으로부터 웹 페이지를 동적으로 생성하는 서버 프로그램이다.(자바 클래스) 
    JSP가 HTML에 JAVA를 포함할 수 있다면, 서블릿은 자바 코드에서 HTML을 포함하고 이를 지원하는 것이 아파치 톰캣(WAS)이다. 

     

    실습 - 톰캣으로 브라우저로부터 요청 받아보기

     

    1. intelliJ에 tomcat 플러그인 설치

    오른쪽 상단에 Plugins 클릭 > smart tomcat 검색해서 install

     

    2. 톰켓 환경 구성

    1) 상단 바에 Run > Edit Connfiguration

    2) 왼쪽 상단 +(Add new Configuration) 버튼클릭 > smart tomcat 클릭

    3) Deployment directory에 현재 프로젝트 폴더 경로 넣기 (오른쪽 폴더 이모티콘 클릭해서 폴더 선택)

    4) Context path 에 '/' 넣기

    5) ok 버튼 클릭

    Context path 와 Deployment directory 의미는 뒤에 설명!

     

     

    3. 톰캣 라이브러리를 인텔리제이에 추가

    방법 1) 직접 인텔리제이 라이브러리에 필요한 servlet 라이브러리 추가해주기

    File > Project Structure > Libraries > + 버튼 > Java 

    이곳에 servlet에 필요한 라이브러리를 추가해주면 된다. 

    하지만, 라이브러리는 보톤 하나만 필요한게 아니라 과련된 라이브러리를 모두 추가해줘야하는데, 이런식으로 추가해줄 경우 하나하나 다 추가를 해야해서 놓치는 라이브러리가 있을 수 있다.

     

    방법 2) build.gradle 파일에 다운로드 받을 라이브러리를 적어준다.

    build.gradle 파일을 이용할 경우, 해당 라이브러리를 설치할 때 관련된 필요한 라이브러리까지 한꺼번에 자동으로 다운로드받아진다.

    >> dependencies 에 implementation 'javax.servlet:javax.servlet-api:4.0.1' 추가

    dependencies {
        implementation 'org.apache.groovy:groovy:4.0.14'
        testImplementation platform('org.junit:junit-bom:5.9.1')
        testImplementation 'org.junit.jupiter:junit-jupiter'
        implementation 'javax.servlet:javax.servlet-api:4.0.1' // 추가
    }

     

     

    4. 톰캣 서버 실행 후 테스트

    톰캣 서버를 실행시킨 후, 다음과 같은 코드를 작성해준다.

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/test2")
    public class Servlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            System.out.print("클라이언트로부터 받은 요청 : ");
            System.out.println(req.getParameter("id"));
    
        }
    }

     

     

    5. 브라우저창에서 요청보내기

    브라우저창에 다음과 같이 검색했을 때, 인텔리제이 콘솔 창에 "클라이언트로부터 받은 요청 : clientReauest"라고 뜨면 요청이 잘 보내지고, 들어온 요청을 잘 받은 것이다!

    브라우저에 입력
    인텔리제이 콘솔 창

     

     

    참고

    localhost:8080/test2?id=clientRequest

    1. localhost:8080

        localhost 아이피주소와 8080 포트번호로 찾아감

    2. /test2

        찾아간 아이피 주소에서 test2가 있는 곳을 찾아감 (test2가 있는 곳 -> 아래 코드가 있는 곳)

    @WebServlet("/test2")

        이때 / 가 위에서 설정한 Context path이고, Context path는 Deployment directory와 같다고 생각하면된다.

        localhost:8080/test2 는 localhost:8080을 찾아간 후에 Deployment directory로 들어가 test2를 찾으라는 뜻!

    3. id=clientRequest

        요청 보내는 내용

    'CS > JAVA' 카테고리의 다른 글

    자바의 Optional 클래스  (1) 2025.02.16
    JVM(Java Virtual Machine)  (4) 2024.09.02
    JAVA - JDBC 사용해 db서버와 데이터 요청/응답 받기  (1) 2024.06.05
    JAVA - 오버로딩, 오버라이딩  (3) 2024.06.04
    JAVA - 상속, 생성자  (0) 2024.06.04
Designed by Tistory.