Front-End/JSP

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

현기 2022. 9. 16. 04:13

서블릿을 구현하기 위해서는 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

반응형