카테고리 없음

54일차[JSP/Servlet](2)-서블릿,JSP사용해보기

둥구는 지굴다 2023. 1. 9. 21:03

서블릿 라이프 사이클

  • 클라이언트( 웹 브라우저 )가 서블릿에 요청(request) 시, 서블릿이 바로 호출되지 않는다.
  • 웹 컨테이너에 해당 서블릿 클래스가 로딩되어 있지 않다면 init( ) 메서드 호출 후 service( ) 메서드 호출 & doGet( )/doPost( ) 호출
  • 로딩되어 있다면 service( ) 메서드 호출
  • destroy( ) 메서드를 호출하여 Servlet을 제거한다.
  • JSP 페이지도 서블릿 클래스로 변환된 후 똑같은 라이프 사이클을 수행한다.

@WebServlet

  • WebServlet에 경로를 입력하면 클라이언트에서, 해당 경로를 입력할 때 알아서 톰캣서버가 찾아서 실행해주게 된다.

init( )

  • 서블릿이 최초로 호출되었을 때 한 번만 실행되며 서블릿 컨테이너가 자동으로 실행합니다.
  • 서블릿 객체가 생성된 후, 한 번만 실행되므로 서블릿의 초기화 작업을 담당합니다.

service( )

  • 클라이언트의 요청이 있을 때마다 매번 서블릿 컨테이너가 자동으로 실행합니다.
  • 서블릿 실행 요청이 있을 때 마다 실행되어야 하는 내용을 구현
  • 응답에 대한 모든 애용은 service( ) 메서드에 구현해야 함

HttpServletRequest request 객체

  • 사용자가 HTML Form에 입력한 내용을 request 객체에서 받아온다.
  • 헤더 정보, 파라미터, 쿠키, URI , URL, Body의 Stream 등을 읽어 들이는 메서드가 있다.
  • getHeader(”원하는 헤더 이름”) :원하는 헤더 정보를 확인할 수 있다.
  • getParameter( ) :form parameter 값을 가져온다.

HttpServletResponse response 객체

  • 인자의 내용에 맞게 동적인 HTML 코드를 생성하여 response 객체에 담아 반환한다.
  • getWriter( ) 메서드를 호출하여 PrintWriter 객체를 가져온 후 해당 객체에서 print, println메서드를 실행한다.
  • form data를 처리한 결과를 WebPage에 생성하여 반환할 수 있다.

[예시코드]

GET 방식

package org.iclass;

@WebServlet(urlPatterns ={"/member/join"})
public class MemberJoinServlet extends HttpServlet{
	private static final long serialVersionUID=1L;
	private static final Logger logger= LoggerFactory.getLogger(MemberJoinServlet.class);
	
	public void init(  ) throws ServletException {
		logger.info("[MyInfo]조인 서블릿 초기화");
	}
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher dispatcher=request.getRequestDispatcher("/member/join.jsp");
		dispatcher.forward(request, response);
	}
}

RequestDisaptcher

  • 특정 자원에 처리를 요청하고 처리 결과를 얻어오는 기능을 수행하는 클래스이다.
  • a.jsp로 들어온 요청을 b.jsp로 요청을 보낼 수 있다.
  • 또한 a.jsp에서 b.jsp로 처리를 요청하고 b.jsp에서 처리한 결과 내용을 a.jsp의 결과에 포함시킬 수 있다.
  • 요청을 보내는 방법은 forward( )와 include( ) 두 가지 방법이 있다.

forward( )

  • 대상 자원으로 제어를 넘기는 역할을 한다.
  • /a.jsp로 요청했을 때 /a.jsp에서 forward( )를 실행하여 /b.jsp로 제어를 넘길 수 있습니다.
  • /b.jsp는 처리 결과를 최종적으로 브라우저에게 출력합니다.
	RequestDispatcher dispatcher=request.getRequestDispatcher("/member/join.jsp");
		dispatcher.forward(request, response);
  • getRequestDispatcher("/member/join.jsp") : 해당 메서드의 인자값으로 이동할 페이지의 경로를 지정합니다.
  • dispatcher.forward(request, response); :두 객체는 해당 주소에 대해 요청하고 응답하라는 뜻이 담겨있다.

post방식

@Override 
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.sendRedirect("../");
   }
  • sendRedirect(”지정한 주소 또는 파일명” ) :지정한 주소 또는 파일명으로 get방식으로 이동