Servlet


JSP의 문제점

  • JSP 페이지에 HTML, JAVA 코드가 혼합되어있어 이해가 어려움
  • 디자이너와 프로그래머의 역할로 작업을 나누어 협업하기 어려움
  • 뷰 단과 비지니스 로직이 하나의 파일에 포함되어 있음
  • JSP페이지 내에 작성된 비지니스 로직이 모듈화되어있지 않기 때문에 재사용하기 어려움
  • 데이터베이스 연결, 로깅, 사용자 정보 관리 등 많은 비지니스 로직에서 중복되는 부분이 존재함

해결방안 Servlet

  • JSP가 나오기 전에 SUN사에서 동적인 웹 페이지 콘텐츠를 생성하는 기술로 제공
  • JSP는 뷰를 생성할 때 사용하고 Servlet은 서버 측 프로그램에서 사용함
  • 주로 Servlet은 DB접근, 비지니스 로직 구현, 데이터 작업에 사용
  • Servlet은 수정된 경우 자바 코드를 다시 컴파일한 후 동적인 페이지를 처리하기 때문에 전체 코드를 다시 컴파일 후 재배포 해야 한다.
  • 브라우저에서 호출이 되면 WAS(Tomcat)에서 웹 페이지를 동적으로 생성하여 결과를 전송해주는 서버 측 프로그램

Servlet 주요 클래스

HttpServlet

  • 서블릿으로 만들기 위해 반드시 상속해야 하는 필수 클래스
  • 존재 목적 자체가 서블릿을 만들기 위해 제공되는 클래스
  • 주요 메소드
    • void init() : 서블릿 객체 생성시 호출되는 메소드
    • void destory() : 서블릿 객체가 메모리에서 사라질 때 호출되는 메소드
    • void service(request, response) : 서블릿 요청이 있을 때 호출되는 메소드
    • void doGet(request, response) : html에서 일 때 호출되는 메소드
    • void doPost(request, response) : html에서 일 때 호출되는 메소드

HttpServletRequest (JSP 내장 객체 response)

  • 클라이언트가 데이터를 입력하거나 또는 클라이언트의 정보에 대한 요청 값을 가지고 있는 클래스
  • 주요 메소드
메소드반환값설명
getWriter()PrintWriter서비스를 요청한 클라이언트와 서버간에 연결된 PrintWriter 객체 생성 후 반환
setBufferSize(int size)void출력 스트림 버퍼 크기 설정
setContentLength(int len)void응답정보 인코딩에 사용할 문자 설정 (MIME charset) getWriter() 후에 사용하면 영향이 없음
setCharacterEncoding(String charset)void응답정보 인코딩에 사용할 문자 설정
setContentType(String type)void응답정보의 데이터 형식 (MIME 타입) 설정 ,응답이 커밋된 후에 호출되면 영향이 없음
setLocale(Locale loc)void클라이언트가 사용하는 언어 / 국가코드 등
클라이언트 환경 설정
addCookie(Cookie cookie)void인자값으로 주어진 쿠키를 응답정보의 헤더에 추가, 쿠키는 응답정보의 set-Cookie 헤더 값으로 추가되어 클라이언트로 전송
containsHeader(String name)boolean응답헤더에 인자값으로 받은 name에 해당하는 header가 있는지 확인
encodeURL(String url)String주어진 url에 세션아이디를 추가하여 인코딩해서 반환
encodeRedirectURL(String url)String클라이언트와 서버간 세션이 유지되는 상태에서 브라우저 쿠키를 지원하지 않을 때 주어진 URL 뒤에 세션 아이디를 추가하고 인코딩하여 요청을 재전송
sendError(int sc, String msg)voidsc - 에러 상태 코드 , msg - 메세지, 에러 전송 - 로직상의 에러가 없어도 에러 발생
sendError(int sc)void에러를 보냄
sendRedirect(String location)void응답을 클라이언트가 요청한 URL가 아니라 sendRedirect()에 주어진 URL으로 전송, 매개변수 location은 절대 URL이나 상대 URL로 지정함,서버의 특정 자원이 다른 URL로 이동할때 사용함
setDateHeader(String name, long date)void인자값으로 주어진 name과 날짜 값으로 응답헤더를 설정함, 인자값 date는 밀리세컨드 단위로 주어져야 함 (기준날짜는 1970년 1월 1일 00시)
addDateHeader(String name, long date)voidsetDateHeader()와 유사, 다른점은 중복된 헤더 이름이더라도 값이 추가
setHeader(String name, long date)void인자값으로 주어진 name과 value로 응답 해더 설정, 만약 헤더가 이미 설정되어있다면 새로운 값으로 덮어씀
addHeader(String name, long date)voidsetHeader()와 유사, 만약 이미 헤더이름이 이미 설정되어있어도 값이 덮어써지는것이 아니라 추가됨
setIntHeader(String name, int value)void인자값으로 주어진 name과 value로 응답 해더 설정, 해더가 이미 설정되어있다면 새로운 값으로 덮어씀, value 값이 int 형식
addIntHeader(String name, int value)voidsetIntHeader() 메서드와 유사, 마찬가지로 중복된 헤더이름이 있더라도 값이 추가
setStatus(int sc)void응답객체에 상태코드를 설정, 에러가 없을때 상태코드를 설정하는데 사용, 이 메서드가 에러코드를 설정하는데 사용되면 컨테이너의 에러페이지 메커니즘은 작동되지 않음, 실제 에러코드를 적용하고싶으면 sendError() 사용
getStatus()int응답객체의 상태코드 반환
getHeader(String name)String인자로 받은 name에 해당하는 헤더 값 반환
getHeaders(String name0Collection인자값으로 받은 name에 해당하는 헤더 값 Collection 반한
setHeaderNames()Collection응답 헤더 이름을 Collection으로 반환

HttpSesstion (JSP 내장객체 session)

  • 클라이언트가 세션의 정보를 저장하고 세션 기능을 유지하기 위한 클래스
  • 주요 메소드
메서드반환값설명
getCreationTime()long세션이 생성된 시간을 구함, 시간은 1970년 1월 1일 이후 흘러간 시간 의미, 단위는 ms
getLastAccessedTime()long웹 브라우저가 가장 마지막에 세션에 접근한 시간 구함, 시간은 1970년 1월 1일 이후 흘러간 시간 의미, 단위는 ms
setAttribute(String name, Object value)void파라미터 이름에 따른 객체 추가
getAttribute(String name)Object파라미터 이름에 따른 객체 반환
getAttributeNames()Enumeration등록된 모든 파라미터 이름 반환
removeAttribute(String name)void파라미터 이름에 따른 객체 삭제
invalidate()void세션의 모든 삭제를 삭제, 세션 무효화
getId()String해당 세션 (브라우저)의 고유 식별자 정보 반환
isNew()Boolean세션 객체가 최초로 생성되었는지 여부 반환
setMaxInactiveInterval(int interval)void세션이 유지되는 유효시간 설정 s
getMaxInactiveInterval()int세션에 설정된 유효시간 반환 s

Servlet 생명 주기

  • 서블릿은 클라이언트가 브라우저에서 요청을 하면 해당 서블릿은 라이프 사이클에 의해 객세를 생성함
  • init() - 서블릿이 처음으로 요청이 되어 객체가 생성될 때 호출되는 메소드
  • service() - 클라이언트가 요청이 있을 때마다 호출되는 메소드
  • destroy() - 서블릿 서비스의 종료 및 재시작 또는 서블릿 코드가 수정이 될 때 호출되는 메소드
  • doGet() - 클라이언트 요청시 <form method=”get”> 일 때 호출되는 메소드
  • doPost() - 클라이언트 요청시 <form method=”post”> 일 때 호출되는 메소드
  init() (최초 한번 호출)
  service, doGet, doPost (반복 호출)
  destroy() (마지막 한번 호출)
profile
github : https://github.com/kiaeh2323 , email : kiaeh9269@gmail.com

0개의 댓글