[JSP/Servlet] 서블릿 구현하기 (HttpServlet, web.xml, 매핑이란?)

2022. 9. 16. 04:13·Front-End/JSP

서블릿을 구현하기 위해서는 HttpServlet라는 추상 클래스를 상속받아야 한다.

서블릿을 구현하는 방법에 대해서 알아보자.

 

📝 서블릿 개발 과정

 

1. 서블릿 규약에 따라 자바 코드 작성

2. 자바 코드를 컴파일해서 클래스 파일 생성

3. 클래스 파일을 /WEB-INF/classes 폴더에 위치시킨다. 

cmd 명령어 = javac -d ../classes *.java

4. web.xml 파일에 서블릿 클래스를 설정

5. 톰캣 등의 컨테이너를 실행

6. 웹 브라우저에서 확인

 


📝 HttpServlet 클래스

 

항상 공식문서를 참고합시다.

https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServlet.html

 

HttpServlet (Java(TM) EE 7 Specification APIs)

Called by the server (via the service method) to allow a servlet to handle a PUT request. The PUT operation allows a client to place a file on the server and is similar to sending a file by FTP. When overriding this method, leave intact any content headers

docs.oracle.com

 

⦁ 공식문서 설명

공식문서에서 일반적으로 doGet, doPost, doPut, doDelete 등의 메서드를

적어도 한 개는 오버라이딩해야 한다고 나와있다.

이름에서 알 수 있듯이 HTTP 메서드를 구현할 수 있다.

 

doGet(HttpServletRequest req, HttpServletResponse resp)

 

doGET 메서드는 HttpservletRequest 객체와 HttpservletResponse 객체를 매개변수로 받는다.

두 객체는 오버라이딩한 메서드에서 요청(request)과 응답(response)에 사용하는 객체다.

 

⦁ 응답 전송

1. 응답을 전송하기 위해서는 setContentType 메서드를 사용해서 응답 컨텐츠 타입을 지정해야한다.

response.setContentType("text/html");
response.setCharacterEncoding("UTF-8"); //인코딩 타입

 

2. 웹 브라우저에 데이터를 전송하려면 PrintWriter를 가져와야 한다.

PrintWriter out = response.getWriter();

 

3. 보낼 코드 작성

out.write("<HTML><HEAD><TITLE>ServletTest</TITLE></HEAD>");
out.write("<BODY><H1>");
out.write("g ");
out.write(Integer.toString(hour));
out.write("h ");
out.write(Integer.toString(minute));
out.write("m ");
out.write(Integer.toString(second));
out.write("s.");
out.write("</H1></BODY></HTML>");
out.close();

 

📝전체코드

더보기
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;

public class ServletTest extends HttpServlet{
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
        response.setContentType("text/html");
        response.setCharacterEncoding("euc-kr");
        Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);
        PrintWriter out = response.getWriter();
        out.write("<HTML><HEAD><TITLE>ServletTest</TITLE></HEAD>");
        out.write("<BODY><H1>");
        out.write("g ");
        out.write(Integer.toString(hour));
        out.write("h ");
        out.write(Integer.toString(minute));
        out.write("m ");
        out.write(Integer.toString(second));
        out.write("s.");
        out.write("</H1></BODY></HTML>");
        out.close();
    }
}

 

 

⦁  Servelt 동작 구조

https://woojong92.tistory.com/entry/Servlet%EA%B5%AC%EC%A1%B0%EC%99%80-HttpServlet-%ED%81%B4%EB%9E%98%EC%8A%A4

 

 


web.xml이란?

⦁  설명 및 하는 일

1. 모든 웹 어플리케이션은 반드시 하나의 web.xml 파일을 가져야한다.

2. 서블릿 매핑되는 방법, 인증이 필요한 URL 등의 정보를 확인한다.

3. 웹 어플리케이션의 Deployment Descriptor(배포 설명자)로써 XML형식의 파일이다.

4. 위치는 WEB-INF 폴더 아래에 있다.

5. web.xml파일의 설정들은 시작시 메모리에 로딩된다.

 

⦁  배포 설명자란?

웹 어플리케이션의 배포 설명자는 클래스, 리소스, 구성 및 웹 서버가 이를 사용해서

웹 요청을 처리하는 방법을 기술하는 곳이다.

 

요청이 수신되면 배포 설명자(web.xml)를 사용하여 요청의 URL을 처리해야 하는

코드에 매핑한다.

 

 


서블릿 매핑이란?

 

 

⦁  서블릿 매핑

위의 full path는 경로를 통해서 포트번호, 서블릿이름, 위치가 보인다. 그래서 보안에 취약하다.

따라서 mapping를 사용한다. context-path는 그대로 사용하지만 간단하게 닉네임을 준다는 느낌이다. 이 닉네임을 주는것을 servlet Mapping이라고 한다.

 


서블릿 매핑하는 2가지 방법

 

⦁  XML 파일을 이용하는 방법

web.xml 파일 하단에 해당 코드를 추가해 준다.

  <servlet>
    <servlet-name>ServletTest</servlet-name>
    <servlet-class>ServletTest</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>ServletTest</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>

 

⦁  Java Annotation을 이용한 매핑 (현대적)

자바 파일의 상단부에 어노테이션을 추가하면 된다.

@WebServlet("/test2")
public class ServletTest extends HttpServlet{
... 생략

 

 

 



참고 문헌

https://scshim.tistory.com/397

https://hipdizzy.tistory.com/61 

https://woojong92.tistory.com/entry/Servlet%EA%B5%AC%EC%A1%B0%EC%99%80-HttpServlet-%ED%81%B4%EB%9E%98%EC%8A%A4

'Front-End > JSP' 카테고리의 다른 글

[JSP] JSP에서 DB연동하기 (JDBC, 오라클, 커넥션 풀)  (3) 2022.10.08
[JSP] 자바빈즈로 회원가입 페이지 구현하기 (useBean 액션 사용, 미사용 버전 2가지)  (1) 2022.09.21
[JSP] 간단한 장바구니 구현하기 (세션 사용)  (2) 2022.09.20
[JSP] JSP 내장 객체 application 메서드 및 예제  (2) 2022.09.19
[JSP] 서블릿(Servlet)과 JSP 정리, MVC 패턴  (8) 2022.09.15
'Front-End/JSP' 카테고리의 다른 글
  • [JSP] 자바빈즈로 회원가입 페이지 구현하기 (useBean 액션 사용, 미사용 버전 2가지)
  • [JSP] 간단한 장바구니 구현하기 (세션 사용)
  • [JSP] JSP 내장 객체 application 메서드 및 예제
  • [JSP] 서블릿(Servlet)과 JSP 정리, MVC 패턴
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (124)
      • Front-End (40)
        • Next (6)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • AI (3)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바스크립트
    Spring
    JSP
    Java
    스택
    react-native-chart-kit
    IS-A
    오라클
    REST API
    오블완
    JDBC
    리액트 네이티브
    파이썬
    react
    node.js
    상속
    티스토리챌린지
    React Native
    Python
    React Native Chart
    그리디
    DI
    Express
    쓰레드
    자바
    next-intl
    서블릿
    큐
    포스트맨
    자바 스프링
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[JSP/Servlet] 서블릿 구현하기 (HttpServlet, web.xml, 매핑이란?)
상단으로

티스토리툴바