4 장. JSP 의구성요소와스크립팅요소 제 4 장
스크립팅요소 (Scripting Element) 1) 지시문 (Directive) 1. JSP 구성요소소개 JSP 엔진및컨테이너, 즉 Tomcat 에게현재의 JSP 페이지처리와관련된정보를전달하는목적으로활용 (6 장 ) <%@ page contenttype="text/html;charset=utf-8" 2) 스크립트릿 (Scriptlet) 가장많이활용되는 JSP 구성요소로서 JSP 페이지내에서코드구현을위해사용 <% for (int i=0; i<=10; i++) { out.println("hello World" + i + "<br/>"); 2/21 제 4 장
스크립팅요소 (Scripting Element) 3) 표현식 (Expression) 1. JSP 구성요소소개 간단한데이터출력이나메소드호출을통한데이터출력을위해활용 코드마지막에세미콜론 (;) 이없다는것에주의 <%= result + resultsum() 4) 선언 (Declaration) JSP 페이지전체에서활용할변수및메소드를선언 <%! String name="gildong Hong"; public boolean isexist() { return true; 3/21 제 4 장
스크립팅요소 (Scripting Element) 5) 주석 (Comment) 코드상에부가적인설명을덧붙이기위해사용 JSP에서활용할수있는주석의종류는총 3가지 1. JSP 구성요소소개 <%-- This is JSP Comment -- 4/21 제 4 장
XML 태그 1) 액션태그 (Action Tag) 1. JSP 구성요소소개 JSP 페이지간의흐름제어및자바빈즈컴포넌트와 JSP의상호작용을위해사용 <jsp:include page="heading.jsp" /> 2) JSTL (Java Standard Tag Library) 개발자가 JSP 페이지를구성할때많이활용하는기능을모아서 XML 태그들로구성하여라이브러리화해놓은것 <c:if test="${1+1==2"> </c:if> Always true. 3) 커스텀태그 (Custom Tag) JSP 페이지개발자가많이활용되는로직처리및프리젠테이션기능을직접개발하여활용하는 XML 태그 <user:getusershoppinglist userid="13" /> 5/21 제 4 장
독립언어 1) 표현언어 (Expression Language, EL) 1. JSP 구성요소소개 서버측의다양한상태정보를개발자로하여금손쉽게프리젠테이션할수있도록해주는용도로개발된언어 JSP 의기본문법을보완하는역할로서서버가지니고있는다양한값들에대한표현을하기위한언어 스크립팅요소의표현식 (Expression) 과혼동하면안된다. 보통 JSTL 및커스텀태그와함께사용된다. ${. 로표기된다. ${colorbean.red <c:if test="${1+1==2"> </c:if> Always true. 6/21 제 4 장
스크립트릿 (Scriptlet) JSP 의파워가강한이유 : 스크립트릿을활용하여 JSP 페이지내에 Java 코드를넣을수있기때문 <% 과 사이에 Java 코드위치 코드블록내의각문장은 Java 문법을따르기때문에반드시마지막에세미콜론 (;) 을넣어야한다. <% Java 코드 1; Java 코드 2; Java 코드 3;...... 7/21 제 4 장
스크립트릿 (Scriptlet) 1 부터 100 까지의합을구하는 JSP 페이지를스크립트릿 I [ 예제 4.1] jspbook\ch04\plus100.jsp 01 02 03 04 05 06 07 08 <%@ page contenttype="text/html;charset=utf-8" <html> <head> <title>1부터 100까지의합구하기 </title> </head> <body> <% // 스크립트릿을나타내는기호 int sum = 0; 09 10 11 12 for (int i = 1; i <= 100; i++) { sum = sum + i; // 스크립트릿을나타내는기호 Java 코드 ( 문장별로세미콜론기입요 ) 13 14 15 1+2+3+...+99+100=<%= sum // 표현식을이용한 sum 출력 </body> </html> 8/21 제 4 장
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 스크립트릿 (Scriptlet) 1 부터 100 까지의합을구하는 JSP 페이지를스크립트릿 II-1 <%@ page contenttype="text/html; charset=utf-8" <html> <head> <title>1 부터 100 까지의합구하기 </title> </head> <body> <% int sum = 0; for (int i = 1; i <= 100; i++) { 스크립트릿블록 1 sum = sum + i; <% for (int i = 1; i <= 99; i++) { 스크립트릿블록 2 <%= i + // 표현식을이용한출력 1 <% 스크립트릿블록 3 <%= 100 = <%= sum // 표현식을이용한출력 2 </body> </html> [ 예제 4.2] jspbook\ch04\plus100-2.jsp 9/21 제 4 장
스크립트릿 (Scriptlet) 1 부터 100 까지의합을구하는 JSP 페이지를스크립트릿 II-2 01 02 03 04 05 06 07 08 <%@ page contenttype="text/html;charset=utf-8" <html> <head> <title>1부터 100까지의합구하기 </title> </head> <body> <% int sum = 0; 09 10 11 12 13 14 for (int i = 1; i <= 100; i++) { sum = sum + i; <% for (int i = 1; i <= 99; i++) { 스크립트릿블록 1 15 out.print(i + " + "); // out 객체를활용한출력 스크립트릿블록 2 16 17 18 out.print(100 + " = " + sum); // out 객체를활용한출력 19 20 </body> 10/21 제 4 장 </html> [ 예제 4.3] jspbook\ch04\plus100-3.jsp
스크립트릿 (Scriptlet) 복잡한스크립트릿기호남용을더욱줄이기 <% int sum = 0; for (int i = 1; i <= 100; i++) { sum = sum + i; for (int i = 1; i <= 99; i++) { out.print(i + " + "); out.print(100 + " = " + sum); 이책의후반부에서다루는 JSTL 및 EL (Expression Language) 과커스텀태그를활용하면스크립트릿의남발을더욱잘방지할수있다. 11/21 제 4 장
표현식 (Expression) 간단한데이터출력을위하여사용 <%= 로시작하여 로끝나며이둘사이에출력해야할값을적는다. 출력할수있는값 단순한문자열및숫자 변수 수식 메소드호출 마지막에세미콜론 (;) 을붙이지않는다 <%= 값 12/21 제 4 장
표현식 (Expression) 관련예제 [ 예제 4.4] jspbook\ch04\expression.jsp 01 <%@ page contenttype="text/html;charset=utf-8" 02 <html> 03 <head> 04 <title> 표현식예제 </title> 05 </head> 06 <body> 07 단순한문자열출력 : <%= "<b> 표현식예제 </b>" 08 <hr/> 09 <% 10 int i = 10; 11 java.util.calendar cal = java.util.calendar.getinstance(); // Calendar 객체생성하여 cal 변수에할당 12 13 변수값출력 : <%= i 14 <hr/> 15 수식값 (1부터 10까지의합 ): <%= 1+2+3+4+5+6+7+8+9+10 16 <hr/> 17 메소드호출에의한결과값 : <%= cal.gettime() // 오늘의날짜와현재시각출력 18 <hr/> 19 변수 i를활용한문자열과연산의결합 : <%= "i+10=" + (i+10) // i와 10을더한값을문자열과결합 20 13/21 21 </body> </html> 제 4 장
선언 (Declaration) JSP 페이지의스크립트릿이나표현식에서사용할수있는멤버변수및멤버메소드를작성할때사용 <%! 멤버변수선언은보통하나의문장으로끝나기때문에반드시뒤에세미콜론 (;) 필요 <%! 멤버변수선언 ; 멤버메소드선언 <%! public 리턴타입메소드이름 ( 파라미터리스트 ) { Java 코딩문장 ; Java 코딩문장 ;...... (return 값 ;) 14/21 제4장
선언 (Declaration) 관련예제 [ 예제 4.5] jspbook\ch04\decl.jsp 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 <%@ page contenttype="text/html;charset=utf-8" <%! // 선언블록기호 String str = " 선언예제 "; // 멤버변수 str 선언 public double calculator(double num1, double num2, String operator) { // 멤버메소드 calculator 선언 double result = 0.0; if (operator.equals("+")) { result = num1 + num2; else if (operator.equals("-")) { result = num1 - num2; else if (operator.equals("*")) { result = num1 * num2; else if (operator.equals("/")) { result = num1 / num2; return result; 15/21 제 4 장
선언 (Declaration) 관련예제 ( 계속 ) [ 예제 4.5] jspbook\ch04\decl.jsp 19 20 21 22 23 24 25 26 27 28 29 30 31 <html> <head> <title> 선언예제 </title> </head> <body> <%= str // 선언된 str 출력 <hr/> 10 + 5 = <%= calculator(10, 5, "+") <br/> 10-5 = <%= calculator(10, 5, "-") <br/> 10 * 5 = <%= calculator(10, 5, "*") <br/> 10 / 5 = <%= calculator(10, 5, "/") </body> </html> 선언된 calculator 메소드호출에의한결과값출력 16/21 제 4 장
선언 (Declaration) 이전 JSP 예제가변환된.java 파일내용 package org.apache.jsp.jspbook.ch04; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class decl_jsp extends org.apache.jasper.runtime.httpjspbase implements org.apache.jasper.runtime.jspsourcedependent { String str = " 선언예제 "; public double calculator(double num1, double num2, String operator) { double result = 0.0; if (operator.equals("+")) { result = num1 + num2; else if (operator.equals("-")) { result = num1 - num2; else if (operator.equals("*")) { result = num1 * num2; else if (operator.equals("/")) { result = num1 / num2; return result; JSP 선언블록 17/21 제 4 장
선언 (Declaration) 이전 JSP 예제가변환된.java 파일내용 ( 계속 ) private static final JspFactory _jspxfactory = JspFactory.getDefaultFactory(); private static java.util.list _jspx_dependants; private javax.el.expressionfactory _el_expressionfactory; private org.apache.annotationprocessor _jsp_annotationprocessor; public Object getdependants() { return _jspx_dependants; public void _jspinit() { _el_expressionfactory = _jspxfactory.getjspapplicationcontext(getservletconfig().getservletcontext()).getexpr essionfactory(); _jsp_annotationprocessor = (org.apache.annotationprocessor) getservletconfig().getservletcontext().getattri bute(org.apache.annotationprocessor.class.getname()); public void _jspdestroy() { _jspservice 멤버메소드의위치 public void _jspservice(httpservletrequest request, HttpServletResponse response) throws java.io.ioexception, ServletException {... 중간생략... JSP 선언블록에서선언된요소들은해당클래스의멤버변수와멤버메소드로정의된다. 18/21 제 4 장
JSP 주석 3. 주석 JSP 소스코드를올바르게이해하도록하기위하여코드자체에설명을달아주는것 종류 1) JSP 주석 <%-- JSP 코드에대한설명 -- JSP 주석은실행시에 JSP 엔진및컨테이너가아무런처리없이바로무시해버린다. 주의 : JSP 주석이중첩이되는일은없어야한다 <%-- JSP 코드에대한설명 <%-- 또다른설명 -- -- 19/21 제 4 장
JSP 주석 종류 2) Java 주석 JSP 의스크립트릿, 표현식, 선언블록내부에는 Java 언어를사용하여코딩을하기때문에그러한블록내부에사용가능한주석 // Java 주석첫번째 /* Java 주석두번째 */ /** Java 주석세번째 */ 3. 주석 종류 3) HTML 주석 HTML 코드자체에주석을다는것 다른주석들과다르게출력결과에포함되어지기때문에 JSP 수행결과브라우저에서 소스보기 를하면 HTML 주석이함께보인다. <!-- HTML 주석 --> 아래코드에서 JSP 표현식 ( <%= username ) 은 JSP 엔진에서처리가된결과가브라우저의 소스보기 에서보인다. <!-- <%= username 이작성하는코드입니다. --> 20/21 제 4 장
JSP 주석 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 3. 주석 21/21 제 4 장 25 <%@ page contenttype="text/html;charset=utf-8" <%! /** Java 주석세번째것입니다 (plus: num1과 num2를더한값을리턴한다.) */ // Java 주석 public int plus(int num1, int num2) { return num1+num2; <html> <head> <title> 주석예제 </title> </head> <!-- HTML 주석을사용합니다. --> // HML 주석 <body> <%-- JSP 주석을사용합니다. -- // JSP 주석 <% // Java 주석첫번째것입니다. // Java 주석 int num1 = 10; int num2 = 20; /* Java 주석두번째것입니다. // Java 주석 num1과 num2를더해서 result에할당한다. */ int result = plus(num1, num2); <%= num1 과 <%= num2 를더한값은 <%= result 입니다. </body> </html> [ 예제 4.6] jspbook\ch04\comment.jsp [ 브라우저의소스보기 ] <html> <head> <title> 주석예제 </title> </head> <!-- HTML 주석을사용합니다. --> <body> 10과 20를더한값은 30입니다. </body> </html>