Servlet 이란? 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다.
간단히 말해서, 서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술이다. 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램이다. 예를 들어, 어떠한 사용자가 로그인을 하려고 할 때. 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누른다. 그때 서버는 클라이언트의 아이디와 비밀번호를 확인하고, 다음 페이지를 띄워주어야 하는데, 이러한 역할을 수행하는 것이 바로 서블릿(Servlet)이다. 그래서 서블릿은 자바로 구현 된 CGI라고 흔히 말한다.
일단 main.html과 Servlet을 만든다. Servlet의 경로는 src/main/java에 package를 만들고 거기에 Servlet을 만들면 된다.
main을 통해 실행되는 우선순위는 web.xml 그다음이 Servlet이라고 할 수 있다.
Servlet은 상위 ServletException을 상속한 것이기 때문에 doGet을 오버라이딩 받을 수 있다.
콘솔에 출력할 때는 System.out.println();을 사용하고, 브라우저에 출력할 때는 PrintWriter객체를 만들어 out.println을 사용하면 된다.
PrintWriter out = response.getWriter();
out.println();
생명주기 메소드(init, doGet, doPost, service, destory)는 eclipse내에서 서블릿을 생성할 때 자동으로 생성 가능하다.
생명주기 단계
: 초기화
특장
: 서블릿 요청시 최초 한번만 호출
init을 사용하지 않는다면, 새로고침할때마다 g생성자 호출하게 된다. 이것은 상당히 큰 메모리를 차지할 수 있기 때문에 한번만 호출하게 해야한다. 한번만 호출하기 위해서는 싱글톤패턴을 사용하는 것도 괜찮지만 번거롭다. 하지만, init 메소드 사용한다면 간단하게 문제를 해결할 수 있다. init메소드를 쓴다면, 생성자 호출 한번만 하게 되어 메모리 낭비를 하지 않을 수 있다.
public void init() throws ServletException {
hellosub = new HelloSub();
}
생명주기 단계
: 작업 수행
특장
: 서블릿 요청시 매번 호출
form 태그 내 method 속성을 입력하지 않으면 기본값인 'get 방식'으로 요청하게 된다.
Get방식에서 호출되는 메소드. 데이터가 URL에 포함된다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet");
}
Post방식에서 호출되는 메서드. 데이터가 HTML header에 포함된다.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost");
}
doGet과 doPost를 둘다 사용할 수 있는 메서드이다.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service");
}
생명주기 단계
: 종료
특장
: 서블릿이 요청된 기능을 수행한 뒤에 메모리에서 소멸될 때 호출
서블릿 코드가 수정되면 자동을 재 컴파일된다. 서버 서블릿이 reload(이전 서블릿 삭제)될 때 destroy메서드가 호출된다. 즉, 서블릿이 메모리에서 없어져야 할 때 호출된다.
public void destroy() {
}
client | server |
---|---|
1. 서블릿 요청(/url) | 2. 서블릿 컴파일 클래스를 찾아서 객체를 생성한다. |
6. 브라우저 출력 | 3. init 메서드 호출 |
-------------(서블릿 요청시마다 반복)-------------- | |
4. doGet,doPost메서드가 호출된다. - 요청, 응답 | |
5. 응답을 브라우저에 전송 | |
------------------------------------------------------ | |
7. 서버 종료 / 서블릿 수정될 때 호출된다. | |
서블릿 삭제 (=메모리 정리) | |
destroy메서드 호출 |
참고
https://mangkyu.tistory.com/14 (Servlet의 개념)
https://structuring.tistory.com/189#google_vignette (생명주기)
https://yermi.tistory.com/entry/JSP-HttpServlet-%EB%A9%94%EC%84%9C%EB%93%9C-doGet%EA%B3%BC-doPost%EC%9D%98-%EC%B0%A8%EC%9D%B4-HTTP-%EB%A9%94%EC%84%9C%EB%93%9C-GET%EA%B3%BC-POST%EC%9D%98-%EC%B0%A8%EC%9D%B4
잘 읽었습니다. 좋은 정보 감사드립니다.