어흥
[Web] Servlet 기초 본문
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
- 주요 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>");
결과
: 흥선대원군
참조한 블로그
'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 |