지난 포스팅에서는 서블릿이 어떠한 개념을 가지고 있으며 어떻게 설정을 하는지 이야기했다.
이번에는 그 서블릿이 HttpServlet을 상속 받았을 때의 메소드 관련해서 이야기를 해보려고한다.
반드시 있어야 할 메소드인 doGet(요청의 Default는 Get)과 많이 쓰이는 doPost에 대해서 이야기 해보려고 한다.
다들 들어봤듯 HTTP 통신에서 GET 방식과 POST 방식에 대해서 많이 이야기한다.
요청의 형태는 다음과 같이 5개으로 볼 수 있다
1. 브라우저에서 URL값을 입력 (Get 방식)
2. 새로고침 (Get 방식)
3. 링크 (Get 방식)
4. 사용자 입력 후 버튼 클릭 (Get | Post 방식)
5. javaScript 이용한 location.href ="서블릿" (Get 방식)
GET방식 같은경우에는 URL에 쿼리를 붙이는 방식으로 데이터를 전달하는 방식이고
ex) http://test.com:8080/ld/testServlet?userID={{userID}}&userPassword={{userPassword}}
POST는 Body값을 통해서 전달하는 방식이다.
메소드 이름처럼 doGet은 Get으로 요청받았을 때 실행되는 메소드이고 doPost는 Post로 요청받았을 때 메소드로
서블릿이 처음 생성되고 단 한번만 호출되는 것이 아니라 요청의 수(쓰레드 수 증가)만큼 실행된다.
package com.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doGet");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doPost");
}
}
더 나아가서 변수와 서블릿 메소드의 lifeCycle을 알아보자.
변수 같은 경우
1) 인스턴스 변수 즉 전역변수
- 해당 변수이 경우에는 최초 실행 후 여러사용자에게 사용가능하다. 즉 다른 메소드를 통해 값을 더 하거나 호출 할 수가 있다.
2) 지역변수
- 메소드 안의 지역 변수 일 경우에는 최초 실행 후 여러번 새로고침 즉 호출이 된다 하더라도 관련 메소드에 대한 쓰레드 수만 추가 될 뿐 변수 안의 값이 더해지거나 수정되지는 않는다.
package com.controller;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class TestServlet
*/
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
//private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
public TestServlet() {
super();
// TODO Auto-generated constructor stub
} */
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
// 인스턴스 변수 ==> 단 한번만 생성된다. 여러사용자에게 공유 가능
int num;
ArrayList<String> list = new ArrayList<String>();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 로컬 변수, 여러 사용자에게 공유 불가
System.out.println("doGet");
int size=10;
list.add("홍길동");
num++;
//list는 누적됌
for(String str: list) {
System.out.println(str);
}
System.out.println(num);// 누적됌
System.out.println(size); //누적 안됌
}
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println("destory");
}
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
// 처음 한번만 호출한다.
System.out.println("init");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}*/
}
이제 HttpServlet의 LifeCycle을 알아보자면
1) init 클래스
- 초기화 클래스로 웹 컨테이너에 의해서 처음 서블릿 인스턴스가 생성될 때 단 한번 호출된다.
2) service 메서드
- 클라이언트가 요청할 때마다 호출 된다. 클라이언트가 원하는 동적인 처리 작업 시 필요한데 보통 doGet 또는 doPost 메서드를 이용한다.
3) destory 메소드
- 서블릿 인스턴스가 웹 컨테이너에서 제거 될 때 호출 된다. 따라서 init 메서드에서 구현했던 초기화 작업을 반납 처리 작업 시에 사용된다.
끝.
'개발 지식 > JSP & Servlet' 카테고리의 다른 글
[JSP & Servlet] 서블릿 요청 처리 (0) | 2020.08.09 |
---|---|
[JSP & Servlet] 서블릿 스코프(Scope) : Page, Request, Session, Application (0) | 2020.08.07 |
[JSP & Servlet] 서블릿 파라미터(init-Param, context-param) (0) | 2020.08.07 |
[JSP & Servlet] Servlet 이란 무엇일까? (0) | 2020.08.04 |
댓글