[JSP/Servlet] 서블릿 구현하기 (HttpServlet, web.xml, 매핑이란?)
서블릿을 구현하기 위해서는 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
⦁ 공식문서 설명
공식문서에서 일반적으로 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 동작 구조
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