본문 바로가기

기존카테고리/JSP

서블릿2





package com.test.ex;


import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


/**

 * Sevlet이란?

 * Servlet interface를 implements하여 생성한 자바 클래스

 * 서블릿은 서블릿 엔진에 의해 동장을 하며 여러사용자에 의해 호출 될 수 있다.

 * 서블릿의 인스턴스는 재활용 가능하다.

 * 

 * 서블릿 작성 규칙

 *   . 서블릿 javax.servlet.http.HttpServlet 클래스를 상속해야한다.

 *   . doGet 또는 doPost 메서드안에 클라이언트의 요청이 왔을 때 처리해야 할 일들을 기술 

 *   . HTML 문서를 출력하는데 있어서, doGet이나 doPost 메서드의 두번째 인자를 이용한다.

 *

 * HttpServletRequest : 사용자의 정보를 서블릿 엔진에 전달하는 객체

 * . 파라미터의 이름과 값

 *  . 사용자 컴퓨터 이름

 *  . 요청받는 서버의 이름

 *  . input type 의 데이터

 *  . 메소드 : getParameterValues(), getParameter(), getRemoteHost(), getServerName()

 *  

 * HttpServletResponse : 서버에서 만든 응답을 암호화해서 사용자에게 전달하는 객체

 *  . 응답으로 사용되는 content의 길이

 *  . 응답으로 사용되는 content의 타입, 화면에 출력해야 할 모든 값

 *  . 메소드 : setContentType(String type), setContentLength(int length), getWriter() 

 *  

 * doGet메소드의 호출 : html form 태그에서 method=get일 때 호출,URL 주소창에서 servlet url을 입력했을 때도 호출 * 

 * doPost메소드의 호출 : html form 태그에서 method=post 일 때 호출

 * 

 * throws 절에 있는 ServletException과 IOException은 생략이 가능, 다른 익셉션을 추가 할 수 없음.   

 */



/* 서블릿의 동작 순서 

 * 

 * 웹브라우저 --> 웹서버 --> 웹어플리케이션 서버 --> 서블릿 컨테이너

 * . 스레드 생성

 * . servlet 객체 생성

 * 

 * 

 * Servlet 기술 : CGI를 대신할 수 있는 Java 기술 (기존의 CGI의 차이점)

 * 

 *   1) 기존 CGI의 로딩과 초기화 작업을 진행하기 때문에 서버에 대한 오버헤드가 크다.

 *     

 *      서블릿> 한번 메모리에 로딩되어 수행되면 작업이 모두 수행되어 끝나더라도 메모리에서 해제 되지 않는다(재활용) 

 *         계속적인 수행 요청이 들어와도 메모리 로딩이나 초기화를 처리하지 않는다.

 *            모든 서블릿은 한번만 메모리에 로딩 되어진다.

 *            

 *   2) 특정 웹 서버에 비의존적이다.

 *      

 *      Java 언어로 구현되는 프로그램이기 때문에 플랫폼(운영체제)과는 무관한 실행 파일을 만들 수 있다.

 *      기존의 CGI는 성능향상을 꽤하기 위해서 추가적인 API 가 필요했던 것에 비해서 서블릿은

 *      Servlet API를 활용해서 개발하면 된다.Servlet 엔진만 활용해도 된다.   

 *   

 *   3) 서블릿은 멀티 스레드로 동작한다.

 *   Servlet은 CGI처럼 웹브라우저로 부터의 요청에 대해 각각의 프로세스를 생성하지 않는다.

 *      각 요청에 대해서 스레드로 동작

 *

 *   Servlet의 생명 주기(life 사이클)

 *   

 *   Servlet 객체생성 --> init() 호출 --> service(), doGet(), doPost() 호출 -->destroy() 호출

 *       최초 한번               최초 한번            요청 시 매번                            마지막 한번

 *      

 *   

 * */


@WebServlet("/Sev01")

public class Servlet_Demo01 extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    public Servlet_Demo01() {

        super();

        // TODO Auto-generated constructor stub

    }


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// int sum = 0;

// for(int cnt = 1; cnt <=100; cnt++)

// sum +=cnt;

response.setContentType("text/html; charset=euc-kr");

PrintWriter out =response.getWriter(); // 웹브라우저에 출력할 스트림을 얻어오는 과정

out.println("<html>");

out.println("<head>");

// out.println("<title>백까지 합</title>");

out.println("<title>doget메소드 호출</title>");

out.println("</head>");

out.println("<body>");

out.println("get방식입니다...doGet메소드 호출 되었습니다...!!!");

// out.printf("100까지의 합 결과 : %d", sum);

out.println("</body>");

out.println("</html>");

}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html; charset=euc-kr");

PrintWriter out =response.getWriter(); // 웹브라우저에 출력할 스트림을 얻어오는 과정

out.println("<html>");

out.println("<head>");

// out.println("<title>백까지 합</title>");

out.println("<title>doget메소드 호출</title>");

out.println("</head>");

out.println("<body>");

out.println("post방식입니다...doPost메소드 호출 되었습니다...!!!");

// out.printf("100까지의 합 결과 : %d", sum);

out.println("</body>");

out.println("</html>");

}


}



'기존카테고리 > JSP' 카테고리의 다른 글

context path, web.xml을 이용한 서블릿 초기화  (0) 2017.06.06
서블릿 한글처리  (0) 2017.06.06
서블릿 form 전송과 결과값 출력  (0) 2017.06.06
서블릿3  (0) 2017.06.06
서블릿1  (0) 2017.06.06