[JSP] 02_Servlet 기본개념

김나영·2022년 10월 15일
0

JSP

목록 보기
2/2
post-thumbnail

Servlet

  • 웹 화면을 만드는 자바 클래스
  • JSP/Servlet Container (Tomcat)에 의해서 실행
  • 서블릿을 실행하면 웹 브라우저가 실행됨
  • URL
    프로토콜://호스트:포트번호/컨텍스트패스/URLMapping
    http://localhost:9090/01_Servlet/HelloServlet
@WebServlet("/HelloServlet")		// URL Mapping
public class HelloServlet extends HttpServlet {   // Servlet은 HttpServlet을 상속을 받으면 된다.

생성자

  • 가장 먼저 호출
  • 생성자 호출 뒤 init() 메소드가 호출 (없으면 생략)
public HelloServlet() {
        super();
        System.out.println("생성자");
}

초기화

  • 각종 초기화 정보 실행
  • 서블릿 환경 설정 처리
  • init() 메소드 호출 뒤 service() 메소드 호출
public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("init");
}

서비스

  • 클라이언트의 요청마다 매번 호출
  • GET방식의 요청은 doGet() 메소드 호출, POST방식의 요청은 doPost()메소드 호출 -> service가 생성되지 않았을 때, 생성되면 해당 동작 하지 않음
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("service");		
		// service 메소드가 존재하는 경우 doGET()/doPOST()가 자동으로 호출되지 않기 떄문에
		// 코드를 직접 작성		
		// 요청 메소드 확인 : request.getMethod()
		switch(request.getMethod()) {
		case "GET" : 
			doGet(request, response);		// doGet() 메소드 호출
			break;
		case "POST" : 
			doPost(request, response);		// doPost() 메소드 호출
			break;
		}
    }

doGet

  • GET방식의 요청을 처리
  • 요청 메소드가 GET인 경우
    1) $.ajax({
    	'type' : 'GET',
        'url' : 'http://localhost:9090/01_Servlet/HelloServlet'
        });    
    2) 〈a href="http://localhot/9090/01_servlet/HelloServlet">링크〈/a>
    3) 〈form method="GET" action="http://localhot/9090/01_servlet/HelloServlet">   또는  〈form>
    4) location.href='http://localhot/9090/01_servlet/HelloServlet'	 				open('http://localhot/9090/01_servlet/HelloServlet')
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		// response : 사용자에게 전달할 때 사용
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}  

doPost

  • POST 방식의 요청을 처리
  • 요청 메소드가 POST인 경우
    (1) $.ajax({
            'type':'POST',
            'url' : 'http://localhost:9090/01_Servlet/HelloServlet'
        });
     (2) 〈form method="POST" action="http://localhost:9090/01_Servlet/HelloServlet">  
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 요청과 응답 정보를 doGet() 메소드로 넘겨 버림
		doGet(request, response);
	}  

요청과 응답

요청

  • 클라이언트 → 서버로 보내는 요청 또는 데이터
  • HttpServletRequest requset 객체가 처리한다 (Tomcat이 있어야 사용 가능)

요청에 포함된 한글 처리 (문자셋 : UTF-8)

request.setCharacterEncoding("UTF-8");

요청 파라미터(Parameter) 확인

  • URL?파라미터=값&파라미터=값...
  • 모든 파라미터는 String 타입
    String name = request.getParameter("name");
    String strAge = request.getParameter("age");
    // null 처리
    int age = 0;
    if(strAge != null) {
    	age = Integer.parseInt(strAge);
    }

응답

  • 서버 → 클라이언트로 보내는 응답
  • HttpServletResponse response 객체가 처리 (Tomcat이 있어야 사용 가능)

사용자에게 전달할 데이터의 형식을 HTML 문서로 결정한다.

  • MIME-TYPE을 활용
    • MIME-TYPE 이란?
      클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘
    • HTML : text/html
    • CSS : text/css
    • JS : text/javascript
    • XML : application/xml
    • JSON : application/json
      response.setContentType("text/html");

응답에 포함되는 한글 처리

response.setCharacterEncoding("UTF-8");

MIME-TYPE + 문자셋 한줄에 처리 (주로 사용)

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

응답 스트림 생성

  • 문자 출력 스트림(writer)을 생성
  • response 객체로부터 PrintWriter 객체를 얻을 수 있음
    • IOException 예외 처리가 필요한데 이미 처리되어있음
    • write() 메소드 보다는 print()/println() 메소드를 사용하는 것을 권장
      PrintWriter out = response.getWriter();

응답 만들기 (HTML 문서 만들기)

out.println("〈html lang=\"ko\">");
out.println("〈head>");
out.println("〈meta charset=\"UTF-8\">");
out.println("〈title>");
out.println("나의 첫 번째 응답");
out.println("〈/title>");
out.println("〈/head>");
out.println("〈body>");
out.println("〈h1>안녕하세요. " + name + "님 반갑습니다 ♥〈h1>");
if(age >= 20) {
	out.println("〈h1>귀하는 " + age + " 살이므로 입장이 가능합니다.〈h1>");			
} else {
	out.println("〈h1>" + age + "살? 애들은 다음에〈/h1>");
}
out.println("〈/body>");
out.println("〈/html>");
out.flush();		// 출력 스트림에 남아 있는 모든 데이터 내보내기 (만약을 위해서)
out.close();
}
profile
응애 나 애기 개발자

0개의 댓글