Servlet 구조, HttpServlet 클래스 그리고 컨텍스트 패스

Servlet은 java언어를 사용하여 웹프로그램을 제작하는 것이다.

Servlet 동작구조

  • Servlet 클래스는 HttpServlet 클래스를 상속받음
1
2
3
public class HelloWorld extends HttpServlet{

}

클라이언트 요청에 따라 서블릿 컨테이너는 service() 메서드를 호출하고, service() 메서드는 요청이 GET인지 POST인지 구분하여 각각 doGet(), doPost() 메서드를 호출한다.

  • GET & POST 방식
Get방식 POST방식
URL값으로 정보가 전송되어 보안에 약함 header를 이용해 정보가 전송되어 보안에 강함
Form태그 method 속성값 = get Form태그 method 속성값 = post

HttpServlet 클래스

HttpServlet 클래스에서 사용자 요청을 처리하는 doGet/doPost 메서드는
모두 HttpServletRequest와 HttpServletResponse 객체를 매개변수로 가지고 있다.
HttpServletRequest와 HttpServletResponse 객체는 서블릿과 클라이언트를 연결해주는 중요한 객체들이다.

HttpServletRequest는 클라이언트의 요청 처리 객체이고
HttpServletResponse는 클라이언트에게 응답 처리 객체이다.

  • 요청처리객체 및 응답처리객체를 톰캣에서 받음


1. doGet()

  • html내 form태그의 method속성이 get일 경우 호출된다.(웹브라우저의 주소창을 이용하여 servlet을 요청한 경우에도 호출된다)
1
2
3
<form action="PostMethod" method="get">

</form>
  • doGet메소드는 매개변수로 HttpServletRequest와 HttpServletResponse를 받는다.
1
2
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
}
  • HttpServletResponse 객체의 setContentType() 메소드 호출하여 응답방식 결정한다( euc-kr로 설정해야 한글이 깨지지 않음)
1
response.setContentType("text/html; charset=euc-kr");
  • HttpServletResponse 객체의 getWriter() 메소드를 이용하여 출력 스트림을 얻는다.
1
PrintWriter writer = response.getWriter();
  • 출력스트림의 println()메소드를 이용하여 출력하면 웹브라우저에 출력된다.
1
2
3
4
5
6
7
writer.println("<html>");
writer.println("<head>");
writer.println("</head>");
writer.println("<body>");
writer.println("<h1>HelloWorld~~~~~</h1>");
writer.println("</body>");
writer.println("</html>");
  • 마지막 출력객체를 닫는다.
1
writer.close();
  • 출력결과

2. doPost()

  • html 내 form 태그의 method 속성이 post일 경우 호출된다.
1
2
3
<form action="PostMethod" method="post">

</form>

나머지는 위에 적은 doGet랑 동일하다.

  • 출력결과

컨텍스트 패스(Context Path)

WAS(Web Application Server)에서 웹어플리케이션을 구분하기 위한 path이다.
이클립스에서 프로젝트를 생성하면 자동으로 server.xml에 추가된다.


출처
Seoul Wiz, 신입SW인력을 위한 실전 JSP Servlet 동영상과정, https://www.youtube.com/watch?v=APJAJeePl4g&list=PLYBmkgNU_x7Zj0nCzt5D0qV33C_rU1NK2