자바 공부/Servlet & Jsp

servlet의 작성방법과 생명주기

ari0930 2024. 3. 17. 22:28

servlet의 작성방법과 생명주기

 

서블릿이란

자바 언어를 사용하여 웹 애플리케이션 만드는 데 사용하는 기술입니다. 

서블릿은 주로 서버에서 동작하며 클라이언트의 요청을 처리하고 동적으로 웹 페이지를 생성하고 응답하는 데 사용합니다 

웹 서버와 통신하여 클라이언트의 요청을 받아들이고, 이에 대한 응답을 생성하여 다시 클라이언트에게 반환합니다.

이러한 특성으로 인해 서블릿은 동적인 웹 페이지를 생성하고, 데이터베이스와 같은 백엔드 시스템과 통신하여 웹 애플리케이션의 로직을 처리하는 데 유용하게 사용됩니다.

 

예를 들면 사용자가 로그인을 할때 아이디와 비밀번호를 입력하고 로그인 버튼을 눌렀을 때 정보가 올바른지 확인하고 다음 페이지를 제공하는 데에도 사용할 수 있다.

 

서블릿 작성방법

버전에 따라 2가지로 나눌수 있다

  • 3.0 이상의 버전에서는 web.xml파일 사용하지 않고 자바 어노테이 셔을 이용한다
  • 3,0 미만의 버전에서는 web.xml파일 이용한다.

3.0 이상버전 서블릿을 생성하면 이렇게 나타난

이때 주소를 보면 exam31은 프로젝트이름 이고 Ten은 첫 번째 코드에서 동그라민 친 부분을 수정하면 바꿀 수 있다.

 

3.0 미만 버전에서 서블릿을 생성하면

web.xml이라는 위와 같은 파일이 생긴다  이때 파란 줄로 친 부분이 url뒷부분 주소가 되면

위의 노란색 친부분은 servlet-name 에 적힌 이름과 같은 값을 servlet 태그 내부에서 찾고 

servlet-class 는 경로를 나타내는 요소로 exam.tenServlet을 실행시킨다

 

위 과정을 3.0은 이 노테이션에서 대신해 준다

 

생명주기

public class LifecycleServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public LifecycleServlet() {
        super();
        System.out.println("LifecycleServlet생성");//콘솔에 출력

    }


	public void init(ServletConfig config) throws ServletException {
		 System.out.println("init호출");
	}


	public void destroy() {
		System.out.println("destroy호출");
	}



	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("service호출");
	}

}

서블릿은 객체를 만들어 inint() 메서드를 호출하여  서블릿이 초기화됩니다 이 과정은 단 한 번만 이루어집니다

그 후 서블릿이 클라이언트로부터 요청을 받으면 해당 요청에 대해 응답을 생성하고 처리합니다

이 과정에서 service() 메서드가 호출되면 요청방식에 따라  get, post 방식의 메서드를 호출합니다.

그 후 서블릿이 소멸되거나 갱신될 때 destory()를 실행시켜 저장된 메모리를 해제합니다,

 

 

여기서 한번 생성되고 난 후에는 새로고침을 눌러도 service만 호출된다 

만약 이렇게 수정해 버린고 다시 시작하면

destroy가 호출되면

다시 처음부터 초기화한다 

 

 

doGet, doPost

	protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out =response.getWriter();
		out.print("<html>");
		out.print("<head><title>form</title></head>");
		out.print("<body>");
		out.print("<form method='post' action='/exam31/LifecycleServlet'>"); //submit 버튼이 눌렸을때 이주소로 요청해주세요 방식은 post이다
		out.print("name:<input type='text' name='name'><br>");
		out.print("<input type='submit' value='ok'><br>");
		out.print("</form>");
		out.print("</body>");
		out.print("</html>");
		out.close();
	}


	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out =resp.getWriter();
		String name = req.getParameter("name");//name의 value을 찾아서 출력한다 
		out.print(name);
		out.close();
	}

이 코드를 실행하면 

이제 코드를 한 줄씩 해석해 보면

 

response.setContentType("text/html;charset=utf-8");

response은 응답을 위한 객체로 응답의 콘텐츠 타입을 설정합니다


PrintWriter out =response.getWriter();

클라이언트로부터의 응답을 작성하기 위한 PrintWriter 객체를 가져옵니다.

out.print("<form method='post' action='/exam31/LifecycleServlet'>"); 

//submit 버튼이 눌렸을 때 이 주소로 요청해 주세요 방식은 post이다


out.print("name:<input type='text' name='name'><br>");
텍스트 입력 필드를 출력합니다.

이름은 "name"이며, 사용자가 입력한 데이터는 "name" 매개변수로 전달됩니다.

그다음 post 부분 해석하면 (같은 부분은 제외하겠습니다)

String name = req.getParameter("name");

요청 파라미터에서 name 매개변수의 값을 가져옵니다 

out.print(name);

가져온 name을 출력한다 

버튼을 누르면

doGet, doPost는 클라이언트가 요청하는 방식에 따라 service에서 위 메서드들 맞게 불러와준다 

반응형

'자바 공부 > Servlet & Jsp' 카테고리의 다른 글

jsp 로 자바 클래스 사용  (1) 2024.04.21
jsp 스코프  (1) 2024.04.03
Jsp란  (0) 2024.03.27
Servlet Request,Response  (0) 2024.03.23