내 블로그 목록

2018년 7월 21일 토요일

[JSP] 일간 뷰어 인터뷰_서블릿 기초 편

서블릿 기초 편


Q. 서블릿이란 무엇인가?


서블릿이란 JSP가 나오기전에 자바에서 웹 애플리케이션 개발을 하기 위해서 만들어 졌다.
JSP와 성격이 비슷하다고 보면된다. 그러나, 서블릿은 JSP보다 옛날 버전이기 때문에
아무래도 복잡하다.


서블릿의 사용법은 다음과 같다.


1. 서블릿 규약에 따라 자바 코드를 작성 (HttpServlet 상속 후 메서드 구현)


2. 자바코드를 컴파일 해서 클래스파일을 생성한다. (이클립스 환경에서 개발할 경우 이 단계는 하지 않음. )


3. 클래스파일을 /WEB-INF/classes 디렉토리에 패키지에 알맞게 위치시킨다.
(이클립스 환경에서 개발할 경우 이 단계는 하지 않음. )


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


5. 톰켓 등의 웹컨테이너를 재생시킨다.


6. 웹 브라우저에서 확인한다.


사실 자세하게 몰라도 된다. 나중에 본인이 핵심 부분만 정리 할 것이다.


Q. 매번 그렇지만, 이렇게 이론적으로 접근하면 감이 잘 잡히지 않는다. 예시 코드를 보여줄 수 있겠는가?


예시 코드는 다음과 같다.


서블릿은 처리하고자 하는 HTTP 방식이 GET방식이냐 POST방식이냐에 따라 메서드를 다르게
오버라이딩(@Override) 해야한다. 이를 주의해서 보길 바란다.


package test;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class NowServlet extends HttpServlet { // HttpServlet 클래스를 상속받아 클래스 작성
// 처리하고자 하는 HTTP 방식(mothod)에 따라 알맞게 메서드를 오버라이딩 해주어야 함.
// doGet, doPost


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// HttpServletReques 와 HttpServletResponse 파라미터는 JSP에서의 request와 response 와 같
다.
response.setContentType("text/html; charset=euc-kr");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>현재시간</title></head>");
out.println("<body>");
out.println("현재 시간은");
out.println(new Date());
out.println("입니다.");
out.println("</body></html>");
          }
}



Q. 예전에 톰캣을 공부했을 때 본 적 있는 코드이다. 서블릿을 사용할 때 주의해야할 점이 있는가?


주의 해야할 점은 서블릿 안에 메서드는 주로 오버라이드(@Override)한다는 점이다.
Override는 아무래도 기존에 있던 메서드를 고치는 것이기 때문에 주의해서 사용해야 한다.
Override 충돌이 발생할 것 같은 느낌적인 느낌이 든다면 애노테이션(@)을 사용하라.


예를 들어, 만약 한개의 url 패턴을 사용하려면 단순하게


@WebServlet(urlPatterns = “/hello”)


를 사용하면 된다.


그러나 두개 이상의 url 패턴을 처리할 경우 충돌할 가능성이 생긴다.
이때 어떻게 할꺼냐, 하면


@WebServlet({ "/Hello", "/hello", "/hi" })


이렇게 처리 해야 한다.




그럼 Servlet Mappings에 이렇게 세 개의 url이 생긴 것을 확인 할 수 있다.
확인 작업이 끝나면 이제 이 세 가지 url들로 홈페이지를 접속 할 수 있다.


사실 이 부분(url 패턴을 두개 이상으로 설정하는 것)은 파일을 만들 때 설정을 하면 되므로 굳이
수동으로 적을 필요는 없지만, ‘Override 충돌이 발생할 것 같은 느낌적인 느낌이 든다면
애노테이션(@)을 사용하라’ 문구를 리마인드 시키기 위해 예시를 든 것이다.



Q. 굳이 JSP를 배웠는데, 귀찮게 서블릿을 또 배우는 이유는 무엇인가.

서블릿에는 특이한 기능이 있다.


서블릿은 서블릿 파일을 생성해놓고 강제로 실행시키게 끔 할 수 있다.


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="chap20" version="3.0">


<!-- 서블릿으로 사용할 클래스 등록 →
<servlet>
<servlet-name>now</servlet-name>
<servlet-class> test.NowServlet</servlet-class>
</servlet>
<!-- URL을 통해 서블릿을 호출할 수 있도록 서블릿과 URL과의 매핑 →
<servlet-mapping>
<servlet-name>now</servlet-name>
<url-pattern>/now</url-pattern>
</servlet-mapping>
</web-app>

여기서, <servlet-mapping> 부분이 있지 않는가. 이 의미는 <servlet-name>이 들어 왔을 때(예를 들면, now)
<url-pattern>에 적혀있는 url을 강제로 실행하게 한다.


사실 우리는 이 부분을 알기 위해 서블릿을 배웠다고 해도 과언이 아니다.


Q. 서블릿에 대해서 알기 귀찮다. 핵심만 가르쳐 달라.


서블릿을 정리하면 다음과 같다.


규칙: HttpServlet을 상속해서 클래스를 만들어야 한다.


용도:
  1. 사용자의 요청을 처리
설정 :  URL 메핑을 설정해주어야 한다.
서블릿 : doGet(), doPost() 구현해야 한다.


컨트롤러 기능*으로 사용하기 위해서는 URL 메핑 (“/*”)해주어야 한다.
*컨트롤러 기능에는 사용자 요청 분석, 작업 분배, 응답 결정이 있다.
 추후에 Spring에 MVC패턴을 보면서 컨트롤러의 기능을 구체적으로 살펴 보겠다.


  1. 초기화
설정: 서블릿을 로드할 대 몇번 실행할 건지 설정해주어야 한다.
서블릿: init() 오버로딩을 구현해야 한다.  



댓글 없음:

댓글 쓰기