<Servlet>

Web/Servlet 정리 2010. 2. 18. 14:21


<<<<<<<<<<<<<<<<<<<<< Servlet >>>>>>>>>>>>>>>>>>>>>>>>
웹서버의 컨테이너는 서블릿을 로딩한다. 그 뒤 사용자의 요청을 받아서 Request, Response 객체를 만들어낸다. service() 메소드를 호출해서 서비스를 제공하는 방식이 서블릿의 서비스 방식이다.

1. 서블릿의 라이프사이클 (life cycle)
   (1) init() : 첫번째 사용자 요청시 실행 but <load-on-startup> web.xml 에 설정하면 서버구동시에 실행된다.
   (2) service() : 클라이언트의 전송방식에 따라 doGet 혹은 doPost등을 실행하며 멀티쓰레드 환경으로 구축되어있다.
   (3) destroy() : 서버가 중지될때에 실행

2. 서블릿의 주요메소드
   (1) service() : 사용자의 요청에 실행되는 메소드, 구현하지 않는다.
   (2) doGet() : 전송방식이 GET방식일때 호출(요청주소에 파라미터값들이 붙어서 요청되는 방식)
   (3) doPost() : 전송방식이 POST 방식일때 호출(request의 body부분에 파라미터값들이 들어온다.)

3. 한글처리 : han.HanServlet 참고
   (1) request(요청) : 파라미터값을 ISO-8859-1 로 쪼개고(decoding) EUC-KR(encoding)로 변환한다.
                              (GET or POST) request.setCharacterEncoding("euc-kr") (POST)
   (2) response(응답) : response.setCharacterEncoding("euc-kr") 일반적으로 JSP에서 해결

4. 영역별 객체
   (1) ServletContext (창고, 파라미터 저장)
        : 웹 어플리케이션 전체에 있는 모든 Servlet에 영향을 끼칠 수 있는 객체이다.(only one 하나만 존재한다)
   (2) ServletConfig (파라미터 저장)
        : Servlet 마다 존재하는 객체이다.
   (3) HttpSession (창고)
        : 사용자가 웹브라우져로 접속해서 웹브라우져를 끌때까지 존재하는 객체이다.
   (4) HttpServletRequest (창고, client 에서 넘어오는 파라미터 저장)
        : 사용자의 요청이 들어오면 생성되고 응답이 끝나면 사라지는 객체이다.

5. 흐름의 이동
   (1) forward : 원래는 요청된 주소의 Servlet이 요청에 대해 응답을 해야하지만, forward 를 통해서
                      웹 어플리케이션내의 다른 자원(jsp or url)으로 이동시키는 방식을 말한다.
        - 주소는 요청한 그대로 유지된다.
        - 동일 웹 어플리케이션 내의 자원으로만 이동된다.
   (2) redirect : 원래 요청한 주소를 다른 주소로 redirect(재방향) 시켜주는 것으로 첫번째 받은 요청에 서버는
                      301상태정보와 새로운 URL 을 가지고 클라이언트에게 응답하고, 다시 클라이언트(웹브라우져)가
                      새로 받은 URL을 요청하고 거기에 따른 응답이 이뤄지는 방식을 말한다.
        - 주소는 완전히 다른 것으로 바뀐다.
        - 동일 웹 어플리케이션이 아니더라도 얼마든지 이동이 가능하다
        - 첫번째 요청된 request는 사라진다.(2번의 요청과 응답)

6. HTTP 상태(status) 코드 정리
   (1) 1XX : Informational
        리퀘스트 요청을 받아서 처리하는 중
   (2) 2XX : Success
        리퀘스트가 잘 받아졌다는 정보
   (3) 3XX : Redirection
        리퀘스트를 처리하는데 다른 과정이 한번 더 일어나야 한다는 정보
   (4) 4XX : User-Agent Error
        리퀘스트에 잘못된 문법, 잘못된 요청이 있다는 정보
   (5) 5XX : Server Error
        서버상에서 익셉션이 발생했다는 정보
   (6) 대표적 코드들
      <1> 200 : 모든 요청이 잘 받아졌고, 응답도 잘 됐다는 정보
      <2> 401 : 권한이 부족한 경우
      <3> 404 : 요청한 URI 정보가 없는 경우
      <4> 405 : 요청한 메소드 방식의 처리가 불가능한 경우
      <5> 500 : 서버에서 익셉션 발생

7. Servlet Filter
   (1) Servlet이 실행되기 전, 중간에 request, response를 가로채서 처리하는 방식
        : Servlet의 로직을 고치지 않아도 특정한 패턴(URL-Pattern)으로 들어오는 요청과 응답에 대해서 독립적으로
           처리할 수 있기 때문에 유지보수 측면에서 뛰어나다.
   (2) Filter 생명주기
        init() -> doFilter() -> destroy()
   (3) 설정방법
        <1> web.xml에 <filter> <filter-mapping> 추가
        <2> javax.servlet.Filter interface 를 상속받는 클래스 작성
        <3> doFilter() 메소드 작성 : chain.doFilter() 호출

8. JNDI 방식으로 DataSource 등록하기 (DBCP)
   Tech 문서 : http://kr.sun.com/developers/techtips/enter_12_24.html

   tomcat.apache.org 홈페이지 document 6.0 -> jdbc 설정
  (1) context.xml 변경
       <WatchedResource>WEB-INF/web.xml</WatchedResource> 밑에다가 제공되는 소스를 붙여넣는다.
       context.xml에 등록을 하면 서버에 속한 모든 프로젝트에서 접근이 가능하다.

 <Resource name="jdbc/myoracle" auth="Container" type="javax.sql.DataSource"  
                 driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:JAVA"
                  username="scott" password="javac" maxActive="20" maxIdle="10" maxWait="-1"/>

       server.xml에서의 등록방법
  하단의 프로젝트 지정 부분 사이에 저 소스를 끼워넣어주어도 된다.
  (2) web.xml 변경
  (3) java source 변경
 http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

'Web > Servlet 정리' 카테고리의 다른 글

servlet Post방식  (1) 2010.11.02
servlet Get방식 테스트  (0) 2010.11.02
Posted by 미스터네오
,