#

1. 톰캣\conf\server.xml 웹서버 구동과 관련한 설정

2. 톰캣\conf\web.xml  모든 프로젝트에 공통적인 환경

톰캣\common\lib 모든 프로제트에 공통된 라이브러리

3. 프로젝트\WEB-INF\web.xml  프로젝트별로 적용되는 환경설정

4. 프로젝트\WEB-INF\lib 프로젝트별로 적용되는 라이브러리

5. 프로젝트\WEB-INF\classes 프로젝트별로로 적용되는 서블릿 파일을 인식하고 설정에 따라 init()/destroy()메서드를 실행


#  서블릿은 매핑과정이 필요. 2가지로 매핑이 가능

1. 어노테이션

2. web.xml


- web.xml

<servlet>

<servlet-name>ServletHello</servlet-name>    // 서블릿 클래스를 임의의 이름으로 정의하여, 이름을 가지고 사용

<servlet-class>kr.co.test.ServletHello</servlet-class>        // 해당 클래스 

</servlet>


<servlet-mapping>

<servlet-name>ServletHello</servlet-name>

<url-pattern>/ServletHello</url-pattern>

</servlet-mapping>




# 서블릿 라이프사이클

0. 서블릿은 클래스이고 HttpServet을 상속받아서 구현


1. init() 메서드에 의해여 초기화되면서 실행

web.xml이 실행이 되면서 실행되거나 최초 접속하는 클라이언트에 의해 실행

2. service(HttpServletRequest request, HttpServletResponse response) ...

클라이언트 요청으로 실행되며 main()에 해당


- doGet()

- doPost()

3. destroy() 메서드는 웹서버가 종료될 때 실행되며, 메모리 해제를 수행



// 12,3은 서블릿(GenericServet)을 오버라이해서 정의


4. PostConstruct : init 선처리

5. PreDestroy : destroy 선처리


// 4,5는 임의의 메소드명을 내가 지정해주고, 어노테이션으로 명시해줘야함

@PostConstruct

public void initPostConstruct() {}


@PreDestroy

public void destroyPreDestroy() {}


1-1. 

- init(ServletConfig)

- init()





# 초기화 매개변수

: 특정 서블릿이 생성될 때 초기에 필요한 데이터들을 위해(특정 경로 및 아이디 정보) 사용

서블릿도 클래스이므로 컴파일해 사용해야하는데, 매개변수가 바뀔떄마다 컴파일 하지않고 좀 더 효율적인 측면에서
매개변수를 바꾸어 사용할 수 있도록 하기위해 사용


초기화 파라미터 사용 방법

1. web.xml에 기술 후, servlet파일에서는 ServletConfig 클래스를 이용하여 접근이 가능

2. Servlet(클래스)파일에 직접 기술


1.

- 서블릿 클래스 제작

- web.xml에서 서블릿 등록 시, init-param태그를 사용하여 초기화 매개변수를 등록. servlet태그 안에다가 정의

<servlet>

<servlet-name>ServletHello</servlet-name>    

<servlet-class>kr.co.test.ServletHello</servlet-class>   


<init-param>

<param-name>id</param-name>

<param-value>userid</param-value>

</init-param>     

</servlet>


- 서블릿 클래스에서 getInitParameter(),로 가져와서 사용.

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


String id = getInitParameter("id");

}


ServletConfig 클래스는 HttpServlet에서 상속하고있는데 내 servlet클래스는 이미 HttpServlet을 상속하여 생성하였으므로 따로 생성할 필요는 없고 

바로 사용하면 됨



2. 

ServletConfig를 상속받은 다른 클래스나 ServletConfig 객체 생성 후 매개변수 가져와 사용


@WebInitParam 어노테이션에 초기화 파라미터를 기술한 후,

: @WebServlet(urlPatterns={"ServletHello"}, initParams=[@WebInitParam(name="id,value="aaaa")}) 


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


String id = getInitParameter("id");

}



# response 객체, HttpServletResponse

- 에러처리 : sendError, 

- URL  이동 : sendRedirect


# include, forward

- sendRidrect를 수행하면 버퍼가 비워짐. 

- forward나 include를 사용하면 현재 페이지가 가지고 있는 값들을 유지하여 페이지를 이동할 수 있음

- RequestDispatcher 객체를 사용


RequestDispatcher는 ServletContext에서 받아오면 됨

ServletContext context = ServletConfit객체.getServletContext();

RequestDispatcher dispatcher = context.getRequestDispatcher(페이지주소_상대경로);

dispatcher.include(request,response);

dispatcher.forward(request,response);



# 데이터 저장 영역

- Request, Session 객체

- 쿠키데이터 사용


- Request, Session 객체

1. request(servletRequest of HttpServletRequest)

- request.setAttribute(key,value);

- request.getAttribute(key,value);

- request.removeAttribute(key,value);


2. session(HttoSession)

- session.setAttribute(key,value);

- session.getAttribute(key,value);

session.removeAttribute(key,value);


3. application(ServletContext)

 application.setAttribute(key,value);

- application.getAttribute(key,value);

application.removeAttribute(key,value);


- 쿠키데이터 사용

1. Cookie 전송

Cookie cookie = new Cookie(key, java.net.URLEncoder.encode(value, "UTF-8");

cookie.setComment(주석);

cookie.setPath(도메인);

cookie.setMaxAge(유지시간(초단위));

cookie,.addCookie(cookie);


2. 개별 클라이언트의 Cookies폴더에 파일로 저장

3. Cookie 획득

Cookie[] cookies = request.getCookies();

for(int i=0l i<cookies.length; ++i);

if(key.equals(key)) {

String value = cookies[i].getValue();

}

}



# ServletContext

: 특정 데이터를 여러 서블릿클래스에서 다같이 사용할 수 있도록 지정. 여러 서블릿에서 공유하는 정보이므로 web.xml에서 servlet부분보다 위에 기술되어야함


- Context Parameter를 이용하여 web.xml에 데이터를 기술,

- servlet에서 공유하면서 사용


<context-param>

<param-name>id</param-name>

<param-value>aaaa</param-value>

</context-param>


String id = getServlet();



# Servlet 필터

웹상에서 사용자 요청페이지가 실행하기 전/후에 필요에 의해데이터를 가로채채 작업하고자 하는 경우 사용

- 전달받은 데이터를 인코딩하는 경우

- 세션 데이터를 인증하는 경우

- 이벤트나 공지 등 팝업을 추가하는 경우


- Filter 인터페이스를 구현하는 클래스로 작성한 후  

- 프로젝트에 인식을 위해 web.xml에 작성(등록하기)

filter, filer-mapping(필터가 언제 실행될지의 정보) 태그

- Servlet 부분보다 위에 작성해야 함



# Servlet 이벤트

서버가 실행된 이후에 특정 이벤트를 감지하여 그 시점에 작업을 하고자하는 경우

- 컨텍스트가 초기화하는 경우

- 세션이 생기거나 소멸되는 경우 

- 속성이 바뀌는 경우


- 서블릿 이벤트 리스너를 사용

1. ServletContext 객체 초기화/소멸

: ServletContextListener

2. ServletContext객체에 속성 추가/삭제/수정

ServletContextAttributeListener


3. Session

...


4. Request 

...


- 서블릿 이벤트를 등록 : web.xml

: Listener 태그를 사용

'Development > Web' 카테고리의 다른 글

HTTP와 웹 아키텍처  (0) 2015.11.02
MVC 1  (0) 2015.08.30
이클립스 스프링 개발환경  (0) 2015.08.27
[JQuery] plug-in top 100  (0) 2015.05.27
[웹서비스] 기초 4 - QnA, Web Client  (0) 2015.05.01

+ Recent posts