어흥

[Web] Servlet 기초 본문

Web

[Web] Servlet 기초

라이언납시오 2020. 7. 2. 09:46
728x90
반응형

1. 정의: 웹 프로그램을 만드는 자바 기술로, 실행 결과값은 HTML로 작성된다

 

2. 특징

- 동적이다(<-> HTML)

- 자바언어로 작성되어 자바의 일반적인 특징 모두 보유

- Container라는 특별한 환경에서 실행되며, 이 Container는 플랫폼에 독립적이다

- 프로세스 방식 X, 스레드 방식 O

- 웹 응용프로그램이기 때문에 브라우저를 통해서 요청한다

 

3. 계층구조

 

Interface Servlet - abstract class GenericServlet implements Servlet - abstract class HttpServlet extends GenericServlet - 사용자정의 Servlet

 

4. Life Cycle

Servlet Life Cycle

- 주요 Method

  1) Init() Method

    - 서블릿 요청시 맨 처음 단 한번 수행된다

    - 서블릿 초기화 작업을 수행

  2) Service Method

    - doGet, doPost 이외에도 특정 Http Method를 수행한다

    - 서블릿 요청시 매번 수행된다

    - 실제로 클라이언트의 요청을 수행하는 비즈니스 작업을 수행한다

  3) Destroy Method

    - 서블릿이 Container에서 소멸될 때 수행

    - 서블릿의 마무리 작업을 수행

 

5. Mapping

- 하는 이유: 보안적인 문제 + URL의 간소화

- 방법

  1) Web.xml에 직접 작성

<servlet>
	<servlet-name>AAA</servlet-name>  <-- 임의의 이름을 만든다
    <servlet-class>test.web.ServletTest</servlet-class>   <-- 매핑할 클래스 파일명을 패키지명을 포함하여 작성
</servlet>

<servlet-mapping>
	<servlet-name>AAA</servlet-name>   <-- 위에서 작성 Servlet-name과 같은 값이 들어가야 한다
    <url-pattern>/test</url-pattern>   <-- 위에 작성된 Servlet-class의 클래스를 매핑할 임의의 이름을 입력한다. 단, 시작할땐 '/'
</servlet-mapping>

  2) Servlet 파일에 어노테이션(@)을 이용한다

    Ex)  @WebServlet("/main") << 와 같은 코드를 Servlet의 클래스 위에 적어주면 된다

 

6. 서블릿의 요청과 응답

 

 

7. Forward

- 정의: 특정 서블릿에 대한 요청을 다른 서블릿이나 JSP로 요청을 넘겨주는 작업

 

- 용도

  1) 요청에 대한 처리 작업을 분산시키는 목적

  2) MVC 모델의 Controller에서 View로 요청을 넘길 때 사용

 

- 방법

  1) Redirect: response.sendRedirect() 메소드를 사용하여 구현

  2) Dispatcher: 일반적으로 forward라고 한다

 

8. Redirect

- 특징

  1) 특정 서블릿이 포워드할 때, 클라이언트에서 재요청이 된다 -> URL 재설정

  2) 추가적인 요청으로 인해 Dispatcher보다 성능이 떨어진다

  3) 요청시 바인딩된 데이터가 지속되지 못한다

 

9. Dispatcher

- 특징

  1) 특정 서블릿이 포워드할 때, 컨테이너에서 재요청이 된다 -> URL 재설정X

  2) 클라이언트에선 포워드 발생 여부를 인지할 수 없다

  3) 요청시 바인딩된 데이터가 지속된다

 

- Ex) 

RequestDispatcher rd = request.getRequestDispatcher("list.jsp");
rd.forward(request, response);

10. Binding(바인딩)

- 정의

  1) 실행시 필요한 자웡늘 컨테이너가 인식할 수 있도록 등록하는 작업

  2) 등록된 자원은 서블릿이나 JSP에서 사용할 수 있다

 

- 용도

  1) 모듈화된 컴포넌특간의 자원공유가 필요로 할 때 사용

  2) MVC 모델에서 Model과 View 컴포넌트간에 자원 공유시 사용

  3) 사용방법

    - setAttribute(String name, Object obj) 메소드를 이용하여 바인딩

    - getAttribute(String name) 메소드를 이용하여 자원을 사용

    - removeAttribute(String name) 메소드를 이용하여 자원을 삭제

 

  - Ex) 

(1) Redirect

수행

// hello Servlet의 toGet() 안의 내용
request.setAttribute("name", "흥선대원군");
response.sendRedirect("tohello");
//tohello Servlet의 doGet()내용 안
PrintWriter out = response.getWriter();
String name = (String)request.getAttribute("name");
out.println("<html>");
out.println("<body>");
out.println("name");
out.println("</body>");
out.println("</html>");

결과

: null


(2) Dispatcher

수행

// hello Servlet의 toGet() 안의 내용
request.setAttribute("name", "흥선대원군");
RequestDispatcher rd = request.getRequestDispatcher("tohello");
rd.forward(request,response);
//tohello Servlet의 doGet()내용 안
PrintWriter out = response.getWriter();
String name = (String)request.getAttribute("name");
out.println("<html>");
out.println("<body>");
out.println("");
out.println("</body>");
out.println("</html>");

결과

: 흥선대원군

 

 

참조한 블로그

- https://victorydntmd.tistory.com/154

- https://cherwoo.tistory.com/127

728x90
반응형

'Web' 카테고리의 다른 글

[Web] URI v.s URL  (0) 2021.04.09
[Web - Front end] 수정한 JS, CSS 파일이 적용이 안될 때  (3) 2021.03.23
[Web] 웹 실행순서  (0) 2021.03.08
[JavaScript] 현재 URL 정보 불러오기  (0) 2021.03.08
[Web] Session과 Cookie  (0) 2020.07.02
Comments