#Spring - 3. Java Server Pages(JSP)
본문 바로가기
Programming/Spring

#Spring - 3. Java Server Pages(JSP)

by 권가 2019. 6. 11.

1. JSP 소개

Java Server Pages(JSP) 기술을 통해 동적으로 생성된 콘텐츠가 포함된 정적 HTML

동적 페이지는 다른 컨텍스트 또는 조건에 따라 변경될 수 있다.

Servlet 기술로의 확장 
- 서블릿의 모든 기능(암시적 객체, 미리 정의된 태그, 표현식 언어, 사용자 지정 태그)

 

쉬운 관리
- 비즈니스 로직을 프레젠테이션 로직으로 구분

 

쉬운 구축
- JSP 페이지가 수정된 경우 다시 배포할 필요가 없음 하지만 서블릿에 변화가 필요하다면, 전체 코드를 업데이트하고 다시 컴파일해야 한다.


2. Servlet vs JSP

Servlet은 데이터 처리에 능숙하다.
- 데이터 읽기 및 확인, 데이터베이스와의 통신, 비즈니스 논리 실행 등

JSP 페이지는 프레젠테이션에 능숙하다.
- 요청 결과를 나타내는 HTML 구축

JSP 문서는 뒤에서 자동으로 서블릿으로 변환됨

 

문제는 기술의 힘이 아니라 한 가지 혹은 다른 것의 편리성, 생산성, 그리고 유지 가능성이다.

 

Example(3개의 매개변수 읽기/출력)


3. JSP 구문

 

3.1 JSP Expression 사용

JSP Expression 요소의 값을 구하고 문자열로 변환되고, 암시적 아웃 객체에 삽입된다.

그것은 다음과 같은 형태를 가지고 있다.
(수식을 종료하기 위해 세미콜론을 사용할 수 없음)

형식: <%= Java Expression %>

예: 현재 시간: <%= new java.util.Date() % >

 

예제1

--출력 화면--

 

3.2 JSP Scriptlets 쓰기

간단한 식의 값을 출력하는 것보다 좀 더 복잡한 것을 하고 싶다면 JSP 스크립트에서 임의 코드를 삽입할 수 있다.

 

형식: <% Java Code %>

 

예: 

<%  String queryData = request.getQueryString();

  out.println("Attached GET data: " + queryData);  %>

 

예제1

--출력화면--

예제2

--출력화면--

3.3 JSP Declarations 사용

JSP 선언으로 서블릿 클래스의 본문에 삽입되는 방법 또는 필드를 정의할 수 있다.
JSP Scriptlet 태그는 메소드가 아닌 변수만 선언할 수 있는 반면, jsp 선언 태그는 메소드뿐만 아니라 변수를 선언할 수 있다. 

형식: <%! 필드 또는 방법 정의 %>


예:

<H1>Some Heading</H1>

<%!

  private String randomHeading() {

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

  }

%>

<%= randomHeading() %>

 

예제1

--출력화면--

3.4 JSP Directive

JSP directives는 Container에 대한 구조와 directions을 제공한다.
JSP 지시는 JSP 페이지의 전체 구조에 영향을 미친다.

 

형식: <%@ directive attribute="value" %>

<%@ directive attribute1="value1"

  attribute2="value2"

  ...

  attributeN="valueN" %>

directives에는 페이지, include, taglib 세 가지 종류가 있다.

 

3.4.1 Page Directive

page directive는 페이지 속성을 정의하는 데 사용된다. 관례상 page directive는 JSP 페이지 상단에 코드화된다.

형식: <%@ page attribute="value" %>

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

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

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

 

3.4.2 include Directive

변환 단계 동안 컨테이너에 다른 외부 파일의 내용을 현재의 JSP와 병합하도록 지시한다.

형식: <%@ include file="relative_url" >

 

3.4.3 taglib Directive

Java Server Pages API를 사용하면 HTML 또는 XML 태그와 같은 사용자 지정 JSP 태그를 정의할 수 있다.
태그 라이브러리는 사용자 정의 동작을 구현하는 사용자 정의 태그 집합이다.
taglib 지시어는 JSP 페이지가 사용자 지정 태그 집합을 사용하고, 라이브러리의 위치를 식별하며, JSP 페이지에서 사용자 지정 태그를 식별하기 위한 수단을 제공함을 선언한다.

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

<c:out value=“Hello World> </c:out>

<%= “Hello World” %>와 비슷한 작업


3.5 JSP Action

JSP 작업은 XML 구문의 구조를 사용하여 Servlet 엔진의 동작을 제어한다.
파일을 동적으로 삽입하고 JavaBeans 구성 요소를 재사용하고 사용자를 다른 페이지로 전달한다.

<jsp:useBean>: 먼저 기존 객체를 검색한다. 개체를 찾을 수 없는 경우 지정된 개체를 생성하려고 함
<jsp:setProperty>: setProperty 작업이 빈의 속성을 설정함
<jsp:getProperty>: getProperty 작업은 주어진 속성의 값을 검색하여 문자열로 변환한 후, 마지막으로 출력물에 삽입하는 데 사용된다.

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

  ...

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

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

예제:


4. Predefined Variables

implicit objects라고도 한다.
- 요청, HttpServletRequest 객체
- 응답, HttpServletResponse 객체
- 세션, HttpSession 객체
- Out, PrintWriter 객체
- application, ServletContext 객체. 이것은 웹 어플리케이션의 모든 Servlet과 JSP 페이지가 공유하는 데이터 구조로서 공유된 데이터를 저장하기에 좋다.
- …

예: 호스트 이름: <%= request.getRemoteHost() %>

예제: 


5. JSP에서 동적 코드 호출

- Java 코드를 직접 호출. JSP 페이지에 모든 Java 코드를 배치, 아주 적은 양의 코드에만 적합하다.

Java 코드를 간접적으로 호출. 별도의 유틸리티 클래스를 개발, 유틸리티 클래스를 호출하는 데 필요한 Java 코드만 JSP 페이지에 삽입하세요.

- bean을 사용. bean으로 구성된 별도의 유틸리티 클래스를 개발, 코드를 호출하려면 jsp:useBean, jsp:getProperty 및 jsp:setProperty를 사용하세요.

MVC 아키텍처를 사용. Servlet이 원래의 요청에 응답하도록 하고, 데이터를 찾아보고, 결과를 bean에 저장한다. 결과를 표시하려면 JSP 페이지로 전달, JSP 페이지는 bean을 사용한다.

JSP expression 언어를 사용. 줄임말 구문을 사용하여 개체 속성에 액세스하고 출력하십시오. 보통 bean과 MVC와 함께 사용된다.

사용자 지정 태그를 사용. 태그 처리기 클래스를 개발, XML과 유사한 사용자 지정 태그를 사용하여 태그 처리기를 호출하세요.

댓글