Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

DeFacto-Standard IT

JSP 개론 본문

View Template/JSP

JSP 개론

defacto standard 2017. 11. 2. 00:22

1. Java Server Pages

 

JSP기술은 정규식 조합과, 동적으로 생성된 컨텐츠와 정적 HTML을 사용할 수 있게 한다.

 

동적페이지는 다른 컨텍스트 또는 파라미터에 따라 다른 페이지를 보여주는 것을 의미한다.

 

 

JSP는 서블릿 기술의 확장판이다.

서블릿의 모든 특징들은 물론, 추가적으로 암시적 객체(Implicit objects), 미리 정의된 태그(predefined tags), expression language, 커스텀 태그 등을 지원한다.

 

 

유지보수에 쉽다.

Business Logic과 Presentation Logic을 분리시킨다.

 

 

배포하기 쉽다.

만약 JSP pages가 수정되면, 재배포를 할 필요가 없다.

하지만, 서블릿안의 코드 변경이 필요한 경우에는, 전체 코드가 업데이트되고 재컴파일해야한다.

 

 

2. Servlets VS JSP

Servlet은 Data Processing에 좋다. HTML code in JAVA

reading, data checking, DB와의 커뮤니케이션, 비지니스 로직의 호출 등

 

JSP는 Presentation에 좋다. Java code in HTML

request에 대한 결과를 HTML을 빌드함으로서 표현한다.

 

JSP는 Servlet으로 수행할 수 없는 어떤 기능도 제공하지 않는다.

JSP문서는 뒷단에서 servlet으로 자동적으로 변환된다.

 

이슈는 기술의 성능이 아니다.

편의성, 생산성, 유지보수성이다.

 

 

Reading annd Print 3 Parameters

-> 둘 다 실사용에는 바람직하지 않다.

 

 

3. JSP Syntax

JSP Expression

<%= expressionn %>

Scriptlet

<% code fragment %>

JSP Delaration

<%! declaration %>

JSP Comment

<%-- comment --%>

JSP Directive

<%@ directive %>

JSP Action

<jsp:useBean .../>

<jsp:setProperty .../>

<jsp:getProperty .../>

<jsp:include .../>

<jsp:forward .../>

 

3.1 Using JSP Expression

JSP expression 요소는 판별된 후 String타입으로 변환된다. 그리고, servlet의 출력으로 삽입된다.

다음의 양식을 따르며, expression의 끝에는 세미콜론을 쓸 수 없다.

<%= Java Expression %>

 

 - Example

Current time : <%= new java.util.Date() %>

 

 

3.2 Writing JSP Scriptlets

만약 간단한 expression의 값을 출력하는 것 보다 더 복잡한 것을 수행한다면, JSP Scriptlet을 사용하여 임의의 코드를 작성하면 된다.

다음의 양식을 따르며, 세미콜론을 추가하여야 한다.

<% Java Code %>

 - Example

<%

String queryData = request.getQueryString();

out.printlnn("Attached GET data: " + queryData);

%>

 

 

 

3.3 Using JSP Declarations

JSP declaration은 servlet class의 main body안에 삽입 할 메서드 혹은 필드를 정의할 수 있게한다.

양식은 다음을 따르며, 세미콜론이 필요하다.

<%! Field or Method Definition %>

 

다음은 JSP Declarations를 사용하여 메서드를 정의하고, JSP Expression에서 이 메서드를 사용하는 예이다.

 - Example

<H1>Heading</H1>

<%!

private Strinng ranndomHeading() {

return("<H2>" + Math.ranndom() + "</H2>");

}

%> // JSP Declarations

<%= randomHeading() %> // JSP Expression

 

3.4 JSP Directive

JSP Directive는 JSP의 전체적인 구조에 영향을 준다.

다음과 같은 양식을 따르며, 세미콜론을 기술하지 않는다.

<%@ directive attribute = "value" %>

directives에서 사용하는 주요 3가지 타입은 page, include, taglib 이다.

 - Example

<%@ directive attribute1="value1"

attribute2="value2"

...

attributeN="valueN" %>

 

1) The 'page' Directive

page directive는 컨테이너에 instructions를 제공하는데 사용된다.

다음과 같은 양식을 따른다.

<%@ page attribute="value" %>

 - Example

<%@ page import = "java.util.*" %>

Date today: <%= new Date() %>

<%@ page contentType="text/html" %>

 

2) The 'include' Directive

include directive는 translation단계에서 외부 파일의 내용을 현재 JSP와 병합하도록 컨테이너에 지시한다.

다음과 같은 양식을 따른다.

<%@ include file="relative_url" >

 

3) The 'taglib' Directive

JSP API는 HTML 또는 XML태그와 같이 보이는 커스텀 jsp tag를 정의하는 것을 허용한다.

tag library는 유저가 정의한, 특정 동작을 구현한 태그의 집합이다.

taglib directive는 JSP page가 커스텀 태그의 집합을 사용하도록 정의하는 것이다.

따라서, 보통의 경우 자바코드를 사용하지 않고, taglib을 사용하여 동적페이지를 제작한다. prefix의 경우 편한대로 지정한다.

<%@ taglib uri=http://java.sun.com/jsp/jstl/core prefix="c" %>

<c:out value="Hello World"> </c:out> // <%= "Hello World" %>의 동작과 비슷하다.

 

 

3.5 JSP Actionn

JSP Action은 XML syntax의 구조를 사용하며, servlet엔진의 동작을 제어한다.

파일을 동적으로 삽입할 수 있으며, JavaBeans Components를 재사용할 수 있고, 다른 페이지로 유저를 이동시킬 수 있다.

 

// 한 jsp파일에서 다른 jsp 파일을 include

<jsp:include page="/jsp/common/uppermenu.jsp" flust="true"></jsp:include>

 

// WAS에 의해 해당 class객체 생성 후 customer라는 이름을 부여.

// 자바에서 Customer customer = new Customer();과 같은 역할.

<jsp:useBean id="customer" class="package.class" scope="request"></jsp:useBean>

 

//property : getter/setter를 통해 얻을 수 있는 class의 field

Email: <jsp:getProperty name="customer" property="email" />

 

// display.jsp로 포워딩

<jsp:forward page="/display.jsp" />

 

1) <jsp:useBean> Action

Bean은 Tomcat Containner에서 관리한다.

먼저 존재하는 객체를 찾는다. 만약 찾지 못한다면, 지정된 객체를 만드는 것을 시도한다. 즉, 한 개의 객체만 생성한다.

 

2) <jsp:setProperty> Action

setter에 해당한다. Bean의 properties를 세팅한다.

 

3) <jsp:getProperty> Action

getter에 해당한다. 주어진 property의 값을 탐색하고, String Type으로 변환한다. 마지막으로 출력으로 삽입한다.

 

<jsp:useBean id="myName" class="beans.user" />

...

<jsp:setProperty name="myName" property="someProperty" value="abc" />

<jsp:getProperty name="myName" property="someProperty" />

 

 - Example

 

4. Predefined Variables

사용자가 아닌 Tomcat에 의해 생성/제공되는 변수이다. 따라서, 선언 없이 바로 사용이 가능하다.

Implicit Objects라고도 한다.

 - request (HttpServletRequest 객체) : HTTP(request message), TCP(src:Port, des:Port), IP(src: IP, des: IP)

 - response (HttpServletResponse 객체)

 - session (HttpSession 객체) : session 안에서 reqeust, response 수신

 - out (PrintWirter 객체)

 - application (ServletContext 객체)

Web application의 모든 서블릿과 JSP페이지들에 의해 공유되는 자료구조이다. 공유된 데이터를 저장할 때 좋다.

모든 서블릿과 JSP가 공유할 데이터가 있는 경우에 사용한다.

 - 기타 등등

 

 - Example

Your hostname : <%= request.getRemoteHost() %>

 

5. JSP에서 동적인 코드를 호출하는 전략

위로 갈수록 간단하거나 소수의 프로그래머가 작업할 때 사용하며, 아래로 갈수록 복잡하거나 많은 프로그래머가 작업할 때 사용한다.

 1) 자바 코드를 직접적으로 호출

모든 자바 코드를 JSP에 넣는다. 코드의 양이 아주 적을 때만 적절하다.

 

 2) 자바 코드를 간접적으로 호출

utility classes를 분리하여 개발한다. utility classes를 사용해야 할 필요가 있을 때만 자바코드를 JSP에 삽입한다.

 

 3) beans를 사용

beans로 utility classes를 구성하여 개발한다.

jsp:useBean, jsp:getProperty, jsp:setProperty를 사용하여 코드를 사용한다.

 

 4) MVC 아키텍쳐를 사용

request가 오면 DB조회, 비즈니스 로직 수행 후 bean에 저장한다. 결과를 보여주기 위해서 JSP 포워딩을 한다.

 

 5) JSP Expression Language 사용

객체 properties를 접근하거나 출력할 때 shorthand syntax를 사용한다. 보통 beans와 MVC의 접속사 역할을 한다.

 

 6) 커스텀 태그 사용

tag handler classes를 사용하여 개발한다. XML같은 커스텀 태그 핸들러를 사용하여 호출한다.(taglib) 

Comments