Java Server Pages

JSP Servlet P217부터

나주나주 2024. 2. 13. 14:13

: 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