19.04.26 JSP 기본 문법 (교재)

Back-End/JSP 2019. 4. 26. 10:24
728x90
반응형

-JSP-


스크립트의 요소란 JSP 프로그래밍에서 사용되는 문법의 표현 형태.
JSP에서는 동적인 페이지를 생성하기 위해서 다양한 형태를 제공하여 각각 필요한
곳에 적절히 사용할 수 있도록 하고 있다.




-JSP 스크립트 요소-


 

  1. 선언문


  2.스크립트릿


  3.표현식


  4. 주석




-예제 및 출력 결과-


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
32
33
34
35
<%@ page contentType="text/html; charset=EUC-KR"%>
<html>
<title>JSP스크립트 Example</title>
<body>
    <h1>Script Example</h1>
    <%!String declaration = "Declaration";%>
    <%!public String decMethod() {
        return declaration;
    }%>
    <%
        String scriptlet = "Scriptlet";
        String comment = "Comment";
        out.println("내장객체를 이용한 출력 : " + declaration + "<p>");
    %>
    선언문의 출력1 :
    <%=declaration%><p>
        선언문의 출력2 :
        <%=decMethod()%>
    <p>
        스크립트릿의 출력 :
        <%=scriptlet%>
    <p>
        <!-- JSP 주석부분 -->
        <!-- JSP 주석 1: <%=comment%>-->
    <p>
        <%-- JSP 주석 2<%=comment%>--%>
        <%
            /* 주석
            (여러줄 주석)
            */
        %>
        <%//주석(한줄 주석) %>
    
</body>
</html>
cs





-이클립스와 브라우저창에서 각각 [페이지 소스 확인]-


브라우저에서의 [페이지 소스보기]는 HTML, Javscript, CSS 코드만 보입니다.

JSP와 같은 서버 스크립트(asp, php, jsp) 들의 코드는 서버(톰캣) 에서 동적으로 처리가 되고

처리된 내용들을 브라우저로 응답을 하기 때문에 클라이언트의 브라우저에서는 보이지 않습니다.


(지금 이 예제는 html로 만들었기 때문에 브라우저와 이클립스에서 확인한 [페이지 소스 확인]의 값이 동일하다.)







-선언문-


JSP 프로그램의 스크립트 요소 중 선언문은 JSP에서 사용될 변수나 메소드를 선언할 수 있는
영역의 요소를 의미합니다.
jsp 페이지 내에서 변수 및 메소드를 선언을 하고 선언된 변수나 메소드를 이용하여
필요한 동적인 HTML 코드를 생성하는데 사용한다.

하지만 스크립트 요소중에서 선언문은 잘 사용되지 않는다.

왜냐하면 jsp 페이지에서 선언된 메소드는 자신의 페이지에서만 반복적으로 사용 할 수가 있고 다른

jsp 페이지에서는 사용 할 수 없기 때문에 차라리 반복적으로 사용할 기능의 메소드가 필요하다면

자바 파일로 만들고, 모든 jsp 페이지에서 참조하여 사용하면 된다.

멤버변수 : 선언문에서 선언된 변수.



 

  ------선언문(Declaration)의 문법------


  <%!
   멤버변수 및 메소드를 선언하는 영역
  %>




 

  ------메소드(method) 문법------


  <%!
   String name = "Korea";
   public String getName() {
   return;
   }
  %>




-예제 및 출력-


team 변수는 늦게 선언이 되었지만 클래스 내부에 있는 멤버변수이기 때문에 전역변수인 name 변수를 참조할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
<%@ page contentType="text/html; charset=EUC-KR"%>
<h1>Declaration Example1</h1>
<%
    String name = team + "Fighting!!!"//name 보다 늦게 선언이 되었지만 team이라는 변수의 값을 참조하고 있다.
%>
 
<%!
    String team = "Korea";
%>
출력되는 결과는 ? <%=name%>
    
cs

-예제 및 출력 결과-

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page contentType="text/html; charset=EUC-KR"%>
<h1>Declaration Example2</h1>
<%!int one;
    int two = 1;
 
    public int plusMethod() {
        return one + two;
    }
 
    String msg;
    int three;%>
 
one 와 two의 합은 ?
<%=plusMethod()%><p>
    String msg의 값은 ?
    <%=msg%>
<p>
    int three의 값은 ?
    <%=three%>
cs


 

 

 

 

 


 

-스크립트릿(Scriptlet)-


가장 일반적으로 많이 사용되는 스크립트 요소로 jsp 페이지가 서블릿으로 변환되고
요청될 때 jspService (Tomcat 기준으로 설명) 메소드 안에 선언이 되는 요소입니다.
스크립트릿은 선언문과 달리 선언된 변수는 지역 변수로 선언이 되고 메소드 선언은 할 수가 없습니다.
변수를 선언할 수 있는 영역이지만 멤버 변수가 아니라 지역 변수라는 차이점이 있다.


 

  ------스크립트릿 문법------


  <%
   이곳에 필요한 자바코드를 삽입합니다. (지역 변수 선언, for, while, if 등...)
  %>


 

 

-예제 및 출력결과-

 

1
2
3
4
5
6
7
8
9
10
<%@ page contentType="text/html; charset=EUC-KR"%>
<h1>Scriptlet Example1</h1>
<%!int one;
    String msgOne;%>
<%
    int two = 31;
    String msgTwo = "Scriptlet Example";
%>
<%=two + " : " + msgTwo%><br />
<%=application.getRealPath("/")%> //현재 jsp파일의 경로를 출력하는 메소드
cs

 

 

-예제 파일 서블릿 코드 (jsp -> jsp.java로 변환된 코드)-

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 * Generated by the Jasper component of Apache Tomcat
 * Version: Apache Tomcat/8.5.40
 * Generated at: 2019-04-26 13:50:13 UTC
 * Note: The last modified time of this file was set to
 *       the last modified time of the source file after
 *       generation to assist with modification tracking.
 */
package org.apache.jsp;
 
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
 
public final class scriptlet1_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {
 
    int one;      //선언문에서 선언한 변수들 (멤버변수)
    String msgOne;
  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();
 
  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
 
  private static final java.util.Set<java.lang.String> _jspx_imports_packages;
 
  private static final java.util.Set<java.lang.String> _jspx_imports_classes;
 
  static {
    _jspx_imports_packages = new java.util.HashSet<>();
    _jspx_imports_packages.add("javax.servlet");
    _jspx_imports_packages.add("javax.servlet.http");
    _jspx_imports_packages.add("javax.servlet.jsp");
    _jspx_imports_classes = null;
  }
 
  private volatile javax.el.ExpressionFactory _el_expressionfactory;
  private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
 
  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
    return _jspx_dependants;
  }
 
  public java.util.Set<java.lang.String> getPackageImports() {
    return _jspx_imports_packages;
  }
 
  public java.util.Set<java.lang.String> getClassImports() {
    return _jspx_imports_classes;
  }
 
  public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
    if (_el_expressionfactory == null) {
      synchronized (this) {
        if (_el_expressionfactory == null) {
          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        }
      }
    }
    return _el_expressionfactory;
  }
 
  public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
    if (_jsp_instancemanager == null) {
      synchronized (this) {
        if (_jsp_instancemanager == null) {
          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
        }
      }
    }
    return _jsp_instancemanager;
  }
 
  public void _jspInit() {
  }
 
  public void _jspDestroy() {
  }
 
  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {
 
    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
      return;
    }
 
    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;
 
 
    try {
      response.setContentType("text/html; charset=EUC-KR");
      pageContext = _jspxFactory.getPageContext(this, request, response,
                  nulltrue8192true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
 
      out.write("\r\n");
      out.write("<h1>Scriptlet Example1</h1>\r\n");
      out.write('\r');
      out.write('\n');
 
    int two = 31;                       //스크립트릿에서 선언한 변수들 (지역변수)
    String msgTwo = "Scriptlet Example";
 
      out.write('\r');
      out.write('\n');
      out.print(two + " : " + msgTwo);  //표현식으로 출력된 JSP 코드들
      out.write("<br />\r\n");
      out.print(application.getRealPath("/"));
    } catch (java.lang.Throwable t) {
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try {
            if (response.isCommitted()) {
              out.flush();
            } else {
              out.clearBuffer();
            }
          } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}
 
 
 
cs

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-jsp 페이지가 실행될 때 서블릿 코드로 변환이 되는 위치-

 

 

  Tomcat에서 실행을 했을 때와는 다른 위치에 만들어 진다.

  application 객체의 getRealPath("/") 메소드를 통해서 이클립스로 실행시 실질적으로 실행되는 JSP 코드가 있는 위치

  (C:\Users\hansub\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\) 파악을 한 후에 이 위치에서

  두 단계 상위로 올라가면 (C:\Users\hansub\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0)

  work 폴더에서 8단계 하위로 들어가면 서블릿 코드로 변환된 소스를 찾을수 있다.

 

  jsp 페이지가 서블릿 코드로 변환되는 소스는 개발시에 상당히 중요하다.

  디버깅 작업을 할 때 서블릿 코드가 참조되는 경우가 많기 때문에 반드시 이 위치를 알아놓아야 한다!!

 



 


-표현식-


표현식은 말 그대로 동적인 jsp 페이지를 브라우저로 표현을 하기 위한 요소입니다.
표현식은 변수를 출력하거나 메소드의 결과 값을 브라우저에 출력 할 수 있습니다.
스크립트릿 코드 내에서 out이라는 내장객체를 통해서 브라우저에 출력도 가능합니다.
그리고 표현식에서는 스크립트릿과 달리 변수나 메소드를 출력하고 할 때는 세미콜론(;)은
표기하지 않습니다.
내부적으로 서블릿(Servlet) 코드로 변환될 때 자동적으로 세미콜론이 붙여지기 때문입니다.

그리고 결과로만 출력을 할 수 있고, 조건적인 문장은 (if/else)는 표현식으로는 사용 할 수 없다.

그러나 삼항 연산자는 조건 검사의 결과 값을 리턴하기 때문에 표현식에서 사용 할 수 있다.

 

  ------표현식 문법------


  <%=변수 혹은 메소드%>


 

 

 


-예제 및 출력 결과-

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page contentType="text/html; charset=EUC-KR"%>
<h1>Expression Example1</h1>
<%!String name[] = { "Java""JSP""Android""Struts" };%> //문자배열 선언 및 값 할당
<table border="1" width="200"> //border은 테이블 외곽선의 두께, width는 테이블 칸의 길이 
    <%
        for (int i = 0; i < name.length; i++) { //문자의 길이만큼 루프돌려 문자 하나씩 출력
    %>
    <tr>
        <td><%=i%></td>
        <td><%=name[i]%></td>
    </tr>
    <%
        }
    %>
</table>
cs

 

-예제 및 출력 결과-

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page contentType="text/html; charset=EUC-KR"%>
<h1>Expression Example2</h1>
<%
    java.util.Date date = new java.util.Date();
    int hour = date.getHours(); //Date 클래스에서 getHours() 메소드를 사용하여 시간(hour) 값만 반환을 한다.
    int one = 10;
    int two = 12;
%>
<%!public int operation(int i, int j) {
        return i > j ? i : j;
    }%>
지금은 오전일까요 오후일까요?
<%=(hour < 12) ? "오전" : "오후"%><p>
    one 와 two 둘 중에 큰 숫자는?
    <%=operation(one, two)%>

cs

 


-주석-


프로그램에 직접적인 영향을 미치지는 않지만 개발자들이 소스 분석 내용 및
파일 설명 처리를 위해서 없어서는 안 될 꼭 필요한 요소.


 

  ------HTML 형식 주석------


  <!-- Fighting <%=name%> -->




 

  ------JSP 형식 주석------


  <%-- Fighting <%=name%> --%>




 

  ------스크립트 형식 주석------


  <% /*주석...여러 줄 주석 및 부분 주석)*/ %>


  <% //주석....(한줄 주석)%>


 

 

 

-예제 및 출력 결과-

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<h1>Comment Example1</h1>
<%
    String name = "Korea";
%>
<!-- 주석 부분입니다. '소스보기'에서 보이지요 -->
<%--
    이 부분은 jsp 페이지에서만 보이고 '소스보기'를 해도 보이지 않습니다.
    브라우저에 보내지 않는 문장입니다.
--%>
<!-- <%=name%> 주석에서도 동적인 변수은 가능하지만 출력은 되지 않는다. -->
<%=name/* 표현식에 주석 부분 입니다 */%>
Fighting!!!
 
cs

 


 

728x90
반응형
: