[JSP & Servlet 배경지식] 8. JSP – Expression Language 2014-10-26

<표현언어 : Expression Language>

JSP 기본문법을 보완하기 위한 표현방법으로 여러가지 유연함을 제공한다.

> 1. 11가지 기본객체제공

- pageContext
- pageScope
- requestScope
- sessionScope
- applicationScope
- param
- paramValues
- header
- headerValues
- cookie
- initParam
ex> ${paramValues.ping}

> 2. 데이터 타입

- boolean
- integer
- float
- string
- null

> 3. 연산자

- 수치연산
--- '+'
--- '-'
--- '*'
--- '/' or div
--- '%' or mod
- 비교연산
--- '==' or eq
--- '!=' or nu
--- '<' or lt --- '>' or gt
--- '<=' or le --- '>=' or ge
- 논리연산
--- '&&' or and
--- '||' or or
--- '!' or not
- empty연산
--- empty {값}
- 비교선택 연산
--- {수식} ? {값} : {값}
- 우선순위
--- []
--- ()
--- -(단일) not ! empty
--- * / div % mod
--- +  -
--- <  >  <=  >=  lt  gt  le  ge
--- ==  !=  eq  ne
--- &&  and
--- ||  or
--- ?  :
ex> ${ 10 + 10 }

> 4. 객체의 메서드 호출

ex>
<%@page import="opendocs.test.SampleMethod"%>
<%
    SampleMethod sampleMethod = new SampleMethod();
    request.setAttribute("sm", sampleMethod);
%>
${sm.test('param')}

[JSP & Servlet 배경지식] 7. JSP 구성요소 2014-10-25

<구성인자>

> 1. Directive (지시어)

>>> page : JSP 페이지에 대한정보를 명시
-- contentTypes : MIME Type을 명시
ex> 
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-- import : 사용될 라이브러리를 읽어들임
ex> 
<%@ page import="java.util.*,java.text.*"%>
-- errorPage : 예외 발생시 이동될 페이지 지정
ex> 
<%@ page errorPage="/error/404.jsp" %>
>>> taglib : JSP 페이지에서 사용할 태그 라이브러리를 지정
ex> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
>>> include : JSP 페이지에 다른 문서를 포함시킴
ex> 
<%@ include file="/MyPage.jsp" %>

> 2. Scripting Elements (스크립팅 요소)

>>> Declaration (선언) : 메소드, 멤버변수를 선언함
ex>
<%! private int count; %>
<%! public int incrementCount() { ++count; } %>
>>> Scriptlet (스크립트릿) : 자바코드를 실행함
ex>
<% String text = "TEXT"; out.println(text); %>
>>> Expression (표현식) : 값을 출력함
ex>
<%=text%>

> 3. tag

>>> action tag (액션태그)
* JSP페이지에서 특별한 기능을 제공한다.
* 선언하지 않아도 기본으로 제공된다.
ex> MyPage.jsp 파일에 count 값을 보낸 결과를 인클루드 시킨다.
<%@ include file="/MyPage.jsp" %>
<jsp:include page="/MyPage.jsp">
   <jsp:param name="TEST" value="100" /%>
</jsp:include%>
>>> custom tag (커스텀태그)
* JSP페이지에서 특별한 기능을 제공한다.
* 개발자 원하는 기능을 구현해서 사용할 수 있다.
* JSP에서 중복되는 코드를 모듈화하거나 복잡함을 없애기 위해 사용한다.
ex> 개발자가 정의한 기능을 사용한다.
<%@ taglib prefix="mytag" uri="/taglib/mytag"%>
<mytag:echo name="TEST" value="100" /%>
>>> JSTL(JSP Standard Tag Library)
ex> cookie 값에 따른 자바스크립트 실행
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${empty cookie.uuid.value}">
   <script type="text/javascript">
      alert("Hello !");
   </script>
</c:if>

<기본제공 객체>

선언없이 JSP페이지에서 사용할 수 있는 객체들의 종류이며 <JEE6-API> 에서 해당 객체에 대한 설명을 확인 할 수 있다.

> 1. application

* web application 전체의 정보 객체
* javax.servlet.ServletContext

> 2. config

* 현재 페이지의 설정정보 객체
* javax.servlet.ServletConfig

> 3. session

* 현재 사용자의 세션정보 객체
* javax.servlet.http.HttpSession

> 4. request

* 클라이언트로부터 전송받은 요정정보 객체
* javax.servlet.ServletRequest의 서브클래스

> 5. response

* 클라이언트에게 전송할 응답정보 객체
* javax.servlet.ServletResponse의 서브클래스

> 6. page

* 현재 페이지를 구현한 자바클래스 인스턴스 객체
* java.lang.Object

> 7. pageContext

* 현재 페이지의 정보 객체
* javax.servlet.jsp.PageContext

> 8. out

* 현재 페이지에서 생성한 결과를 출력할때 사용되는 객체
* javax.servlet.jsp.JspWriter

> 9. exception

* 현재 페이지에서 발생한 익셉션, 에러처리 객체
* java.lang.Throwable

<참고문서>

> JSP 페이지에서 사용되는 각종 태그와 사용샘플이 정리된 문서를 확인하도록 하자.

* 다운로드 링크 : <Java Server Pages Syntax version 1.2>

[JSP & Servlet 배경지식] 6. JSP – concept 2014-10-24

> JSP(Java Server Page)는 Servlet의 확장된 기술로 브라우저에 표현하기 위한 HTML코드에 JAVA 코드를 혼용하여 사용할 수 있게 한다. 이로써 디자인과 로직 개발을 분업화시켜 효율적인 코드를 생산해 낼 수 있게한다.

>>> JSP가 동작하는 구조
jspContainer
① 클라이언트가 브라우저를 통해 서버에 HTTP 프로토콜로 요청한다.
② 서버는 컨테이너에게 처리를 요청하고 컨테이너는 해당 파일을 찾는다.
③ 찾은 파일을 서블릿으로 변환한다. 만약 이미 변환 되어있는 파일이 있다면 그 파일을 바로 실행⑤한다.
④ 서블릿 파일을 실행가능한 class파일로 컴파일 한다.
⑤ 컴파일된 class파일을 메모리에 적재하고 실행한 결과를 웹서버에 넘겨준다.
⑥ 웹서버는 브라우저가 인식할수 있는 정적페이지를 구성하여 클라이언트에게 응답한다.
>>> JSP기술을 활용한 개발 구조화 와 업무 분업화

MVC-model

* 분업화를 위하여 MVC(Model-View-Controller)패턴 이라는 개념이 생겨났고 효율적인 코드의 생산이 가능해졌다.
* MVC - Model 1, Model 2의 2가지 모델이 존재하며 장단점을 고려하여 시스템을 구성해야 한다.
* Model 1
-- JSP, Servelt, Bean 등으로 구성되는 형태로 JSP에는 프리젠테이션 레이어 & 비즈니스 레이어를 포함하고 업무부분을 JavaBean이나 Servlet에서 구현하기도 한다.
-- Model - View - Controller로 구분하기 모호하긴하지만 궂이 따지자면 그림과 같이 JSP에서는 주로 View와 Controller의 역할을 JavaBean / Servlet에서는 주로 Model의 역할을 하지만 Controller의 역할을 하기도 한다.
-- 장점
---> 페이지 흐름이 단순해 개발팀원의 수준이 높지 않아도되 중소형 프로젝트에 적합하다.
-- 단점
---> 웹어플리케이션이 복잡해 질수록 유지 보수가 힘들어진다.
---> 완벽히 분리되지 않아 디자이너와 개발자가 원활히 의사소통 되지 않으면 충돌이 발생한다.
* Model 2
-- 사용자 Request(①)에 대하여 Controller는 Model에게 데이터 조회, 비즈니스 로직의 처리를 요청(②)하고 Model로 부터 정보를 받아 View에게 전달(③)한다. 최종적으로 View는 정적데이터를 구성하여 사용자에게 Response(⑥)한다.
-- 장점
---> 효과적으로 분리되어 구성된다면 개발자와 디자이너의 작업이 분리되어 역할과 책임 구분이 명확해진다.
---> 로직과 디자인 개발의 분리로 인해 웹어플리케이션이 구조화되어 유지보수 및 확장이 용이해진다.
-- 단점
---> 구조화를 위해 개발의 복잡도가 증가함에 따라 개발기간도 증가한다.
---> 개발팀원이 MVC구조에 대한 높은 수준의 이해가 요구되 고급개발자가 필요하다.