Jsp & Servlet
책을 바탕으로 이해하기 쉽게 재구성 하였습니다.
목차
- Jsp와 Servlet 이란?
- Jsp 구성 요소
- 디렉티브
- 스크립트
- 표현언어(EL)
- 내장객체
- 정적 데이터
- 액션태그
- 커스텀 태그와 표준 태그 라이브러리
- Model 1 & Model 2
- 내장객체 & 메소드
- 요청과 응답
- 출력
- pageContext
- application
- 쿠키
- 세션
- EL(Expression Language)
- JSTL(Java Standard Tag Library)
- JDBC(Java Database Connectivity)
Jsp와 Servlet
Jsp
1 | Jsp(Java Server Page)는 자바로 서버 페이지를 작성하기 위한 언어 및 파일. |
Servlet
1 | Servlet(Server + Applet)은 Applet의 단점을 극복하여 만들어진 java기반 서버 프로그램. |
잠깐!!
JSP도 controller 역할을 할 수 있는데 굳이 Servlet을 이용해서 MVC 패턴을 구성하는가? (MVC 패턴이 익숙하지 않다면 model1 & model2 파트를 읽어보세요!)
1 | 좋은 프로그래밍이란 무엇일까? |
JSP 구성 요소
- 디렉티브
- page : jsp 페이지에 대한 정보를 지정한다. (문서 타입, 출력버퍼의 크기, 에러 페이지 등)
- taglib: jsp 페이지에서 사용할 태그 라이브러리 지정 (코어태그)
- include: jsp 페이지의 특정 영역에 다른 문서를 포함시킨다.
스크립트
스크립트 기반 태그들은 <%로 시작해서 %>로 끝나는 것이 특징입니다.
- 주석문(comment)
jsp 주석문 <%- -%>
html 주석문 <!- -> - 지시자(directive)
page: jsp 페이지에 종속적인 설정 정보를 알려준다.
contentType: 웹 브라우저에 전송되는 문서의 타입과 문자코드를 지정한다.
import: 내장 패키지를 사용할 때 해당 패키지를 사용할 수 있게 불러온다.
errorPage, is ErrorPage: jsp 페이지에서 오류가 발생했을 때 오류를 처리하기 위한 속성.
pageEncoding: jsp 소스 저장시 사용할 문자코드를 지정한다.
session: 해당 jsp 페이지의 세션 관리 처리 여부를 지정할 때 사용된다.
include: 다른 jsp 파일을 삽입한다.
language: 페이지에서 사용되는 스크립트 언어를 지정한다. - 스크립트릿(scriptlet)
<% %>
jsp 페이지 내에서 자바코드를 실행 하고 싶을 때 사용한다. - 표현식(expression)
<%= %>
동적 데이터를 응답 결과에 포함 시키기 위해 사용한다. - 선언문(declaration)
<%! %>
jsp 페이지 내에서 사용할 멤버 변수를 선언하고 메소드를 정의하고자 할 때 사용된다.
Model 1 & Model 2
JSP로 구성된 웹 어플리케이션을 개발하다 보면 빠질 수 없는 개념이 있다.
바로 Model 1, Model 2 그리고 MVC 패턴.
Model1, 2은 웹 어플리케이션의 아키텍쳐이다.
브라우저와 서버, 그리고 데이터베이스 간의 소통을 어떤 패턴으로 하는지에 대한 정형화된 방식이라고 생각하면 된다.
이해가 가지 않는다면 Model1과 2는 각각의 프로그래밍하는 방식이라고만 생각해도 된다.
MVC 패턴은 Model, View, Controller의 약자로 Model 1과 2방식에서 사용되는 패턴이다.
브라우저에서 url로 특정 어플리케이션을 요청하면 Controller가 어떤 행위인지 판단하고, 처리를 담당하는데 처리에 필요한 데이터를
Model에서 꺼내와 다시 Controller가 처리를 마치면 View를 통해 결과를 보여준다.
그렇다면 MVC패턴이 적용된 Model 1과 2는 정확히 무엇일까?
Model 1
Model 2
위 그림을 보면 Model 1방식은 JSP가 View와 Controller의 역할을 하고 JavaBean이 Model역할을 한다.
그리고 Model 2방식은 Servlet이 Controller역할을, JSP가 View 역할을 하고 JavaBean이 Model역할을 한다.
여기서 Database를 공부해 본사람이라면 의문이 들수 있다.
Model에서 데이터를 갖고 온다면 Database가 Model인거 아닐까? 라고 생각할 수 있다.
그런데 Database에서 매번 데이터를 직접 꺼내오게되면 문제가 생긴다.
보안상의 문제가 될수 있고, 처리 속도측면에서 저하될 가능성이 있다. (확인되지 않은 추측이므로 이부분은 그냥 넘어가도 좋다. 확실히 하고 싶다면 추가적으로 공부하도록 하자!)
따라서 Model은 Database에서 필요한 데이터만 미리 저장해두고 이용하는 부분이라고 생각하면 된다.