학원 진도는 벌써 스프링 프레임워크까지 나갔지만 앞에서 배웠던 서블릿, 쿠키 및 세션, 서블릿의 여러 속성들, JSP와 디렉티브 태그, 스크립트, Jquery, jstl 등을 완벽하게 정리하고자 교재를 바탕으로 복습하고자 한다.
교재 : 자바 웹을 다루는 기술 - 이병승 지음, 길벗
https://github.com/gilbutITbook/006895
gilbutITbook/006895
자바 웹을 다루는 기슬_예제 소스. Contribute to gilbutITbook/006895 development by creating an account on GitHub.
github.com
자바 웹을 다루는 기술
기초부터 실무까지 한 권으로!최근 효율적으로 개발할 수 있는 웹 프레임워크가 많이 나왔지만, JSP와 서블릿은 자바 웹 개발에서 가장 중요하고도 기본이 되는 내용이다. 기초가 튼튼해야 웹 프
www.yes24.com
서블릿은 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다. 서블릿은 자바로 작성되어 자바의 일반적인 특징을 모두 가진다. 그러나 일반 자바 프로그램과 다르게 독자적으로 실행되지 못하고 톰캣과 같은 JSP/Servlet 컨테이너에서 실행된다는 차이가 있다. 서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송한다. 서버에서 실행되므로 보안과 관련된 기능도 안전하게 수행할 수 있다.
클라이언트가 웹 서버에 요청을 보내면 웹 서버는 그 요청을 톰캣과 같은 웹 애플리케이션 서버(WAS)에 위임한다. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행한다. 그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송한다.
서블릿은 단순히 고정된 정보를 브라우저에 보여주는 기능 뿐 아니라 실시간으로 변하는 정보를 보여주기 위해 데이터베이스에 접근하거나 직접 계산하는 기능까지도 처리할 수 있다. 따라서 웹 페이지에서 동적으로 변하는 정보를 효과적으로 다룰 수 있다.
서블릿의 특징
- 서버 쪽에서 실행되면서 기능을 수행한다.
- 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공한다.
- 스레드 방식으로 실행된다.
- 자바로 만들어저 자바의 특징(객체 지향)을 가진다.
- 컨테이너에서 실행된다.
- 컨테이너 종류에 상관없이 실행된다. 즉 플랫폼 독립적이다.
- 보안 기능을 적용하기 쉽다.
- 웹 브라우저에서 요청 시 기능을 수행한다.
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet{
public void init() throws ServletException {
System.out.println("init 메서드 호출");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메서드 호출");
//브라우저의 요청을 처리한다
}
public void destroy() {
System.out.println("destroy 메서드 호출");
}
}
서블릿 매핑하기
서블릿을 브라우저 창에 출력하기 위해서는 각 프로젝트에 있는 web.xml 파일에서 서블릿 매핑을 설정해야 한다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<servlet>
<servlet-name>aaa</servlet-name> //아래의 <servlet-mapping>태그의 이름과 같아야 한다.
<servlet-class>sec01.ex01.FirstServlet</servlet-class>//기능을 실제로 수행하는 서블릿의 경로
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/first</url-pattern>//브라우저에서 sec01.ex01.FirstServlet을 요청하는 논리적인 서블릿 이름
</servlet-mapping>
</web-app>
서블릿의 동작 과정
1. 클라이언트가 http://localhost:8080/package명/first로 요청
2. FirstServlet이 메모리에 존재하는지 확인
3. FirstServlet을 메모리에 로드
4. init()을 호출
5. doGet() 또는 doPost()를 호출
6. 결과 응답, 클라이언트에게 보여줌
같은 요청이 다른 클라이언트에 의해 들어온다면 이미 앞에서 init()메소드를 통해 FirstServlet 인스턴스가 메모리에 로드되어있으므로 바로 doGet()이나 doPost()메서드가 호출되어 서비스를 제공한다. 즉 서블릿은 스레드 방식으로 동작한다. 따라서 동일한 작업의 경우 서블릿은 메모리에 존재하는 서블릿을 재사용함으로써 훨씬 빠르고 효율적으로 동작한다.
'웹 프로그래밍' 카테고리의 다른 글
스프링부트 사용해보기 -1. 기본 개념들 (0) | 2021.05.24 |
---|---|
Mybatis란? (0) | 2021.05.24 |
MVC Spring 구조 (0) | 2021.05.17 |
문법 - JSTL 사용하기 (0) | 2021.05.11 |
Spirng Framework - 의존성 주입 실습 (0) | 2021.05.06 |