: MVC 패턴을 적용한 모델2 방식의 게시판에 필요한 기술
- 클라이언트 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
- MVC 모델에서 Controller 역할
- 모든 메서드는 스레드로 동작
- javax.servlet.http 패키지의 HttpServlet 클래스 상속
Servlet Container
: 서블릿을 관리하는 컨테이너 == 톰캣
- 서블릿의 수명 주기 관리: 서블릿을 인스턴스화한 후 초기화 요청에 맞는 적절한 메서드 호출, 응답한 후 가비지 컬렉션을 통해 객체 소멸
- 요청이 오면 스레드를 생성해 처리: 멀티스레딩 관리
- 클라이언트 요청을 받아 응답을 보낼 수 있도록 통신 지원 ( 클라이언트와 통신하려면 특정 포트, 소켓을 열고 I/O스트림을 생성하는 등의 API 제공)
- 선언적인 보안 관리 / JSP 지원: 보안 기능을 지원하므로 별도로 구현하지 않아도 된다
동작방식
: MVC 패턴에서 컨트롤러 역할
- 클라이언트의 요청을 받아
- 분석 후 요청을 처리할 서블릿을 찾는다
- 서블릿을 통해 비즈니스 서비스 로직 호출
- 모델로부터 결괏값을 받아
- request나 session영역에 저장 후
- 결과값을 출력할 view 선택
- 최종적으로 선택된 뷰 결과 값을 출력한 후 요청 클라이언트에게 응답
작성 규칙
- 기본 import: javax.servlet , javax.servlet.http , java.io
- 클래스는 반드시 public으로 선언하고 HttpServlet 상속 Source > Override/implements Methods...
- doGet(), doPost() 메서드는 ServletException과 IOException 예외를 던지도록 throw 선언
- doGet(), doPost() 메서드 호출 시 매개변수는 HttpServletRequest와 HttpServletResponse 사용
작성방법1: 클래스를 추가할 때 servlet 사용 (마법사 형태)
작성방법2: 클래스를 일반적으로 선언, 상속과 오버라이드 진행
서블릿 작성
: 먼저, 클라이언트의 요청을 전달 할 요청명 결정
- JSP에서는 클라이언트 요청을 JSP가 직접 받아 처리하지만, 서블릿은 요청명을 기준으로 이를 처리할 서블릿 선택
- 요청명과 서블릿을 연결해주는 작업(매핑), 2가지 방식으로 처리
1. web.xml에 기술 (/webapp/WEB-INF/web.xml 에서 매핑)
<%-- 서블릿은 요청명을 통해 직접 요청을 처리한 후(jsp) → 데이터를 영역에 저장하고 (request)
→ 결과를 출력할 jsp를 선택하여 (web.xml)
영역을 통해 공유된 데이터를 출력하는 형식(HelloServlet.mit)
<!-- 서블릿 등록 -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class> <!-- 해당 요청을 처리할 서블릿을 패키지를 포함하여 명시 -->
</servlet>
<servlet-mapping> <!-- 서블릿과 요청명 매핑 -->
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/13Servlet/HelloServlet.mit</url-pattern> <!-- 컨텍스트 루트를 제외한 요청명을 적는다 (보통 .do를 사용) -->
</servlet-mapping>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body>
<h2>web.xml에서 매핑 후 JSP에서 출력하기</h2>
<p>
<strong><%=request.getAttribute("message") %></strong>
<br>
<a href="./HelloServlet.mit">바로가기</a>
</p>
</body>
</html>
<%-- 바로 실행하면 서블릿을 거치지 않기 때문에 java코드가 실행되지 않는다
그러나, 바로가기를 클릭하여 HelloServlet.mit로 요청하면 서블릿을 통해
구현이 되기 떄문에 web.xml에 있는 내용을 거쳐 주소표시줄에
HelloServlet.mit로 출력되면서 req, resp가 정상 작동--%>
2. @WebServlet annotaion을 사용하여 코드에 직접 명시
URL 요청명과 서블릿 클래스를 매핑한 후 클라이언트 요청 처리
Tip)
Context root == 웹 어플리케이션의 기본 경로를 가리키는 용어, 웹 어플리케이션의 투르 디렉토리나 URL 경로를 의미하며, 웹 어플리케이션 서버에서 애플리케이션을 식별하는 데 사용
'Java Server Pages' 카테고리의 다른 글
JSP 모델2 미니 프로젝트 (0) | 2024.02.13 |
---|---|
JSP EL, JSTL (0) | 2024.02.07 |
JSP 모델2 준비를 위한 dto dao controller.. 등등 (0) | 2024.02.05 |
JSP 세션, 액션 태그 (0) | 2024.02.05 |
JSP JDBC ~ (0201 ~02) (0) | 2024.02.01 |