본문 바로가기
Programming/Java * Spring

[JSP] JSP의 주요 구성 요소(템플릿 데이터, JSP 지시자, 스크립트릿, JSP 선언문, JSP 표현식)

by 고막고막 2019. 6. 3.

1. 템플릿 데이터

    ; 클라이언트에 전송될 데이터를 가지고 있으며, JSP 엔진이 자동으로 자바 코드를 생성한다

<Calculator.jsp>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <h2>JSP 계산기</h2>
   <form action="Calculator.jsp" method="get">
   	  <!-- v1이 위에서 지정된 값으로 변환되어 전달됨 -->
      <input type='text' name="v1" size="4" value="<%=v1 %>"> 
      <select name="op">
         <option value="+" <%=selected[0] %>> + </option>
         <option value="-" <%=selected[1] %>> - </option>
         <option value="*" <%=selected[2] %>> * </option>
         <option value="/" <%=selected[3] %>> / </option>
      </select>
      <input type="text" name="v2" size="4" value="<%=v2 %>">
      <input type="submit" value="">
      <input type="text" size="8" value="<%= result %>"><br>
   </form>
</body>
</html>

<Calculator_jsp.java>

out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \n");
out.write("\t\"http://www.w3.org/TR/html4/loose.dtd\">\n");
out.write("<html>\n");
out.write("<head>\n");
out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
out.write("<title>계산기</title>\n");
out.write("</head>\n");
out.write("<body>\n");
out.write("<h2>JSP 계산기</h2>\n");

2. JSP 지시자 <%@    %>


    ; JSP에서 사용할 프로그래밍 언어 지정
    ; 인코딩 타입 지정
    ; JSP 페이지에 선언할 클래스 또는 패키지 정보

<Calculator.jsp>

<%@ page import="java.util.*,java.io.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8” %>

<Calculator_jsp.java>

response.setContentType("text/html; charset=UTF-8");
import java.util.*;
import java.io.*;

3. 스크립트릿 <%    %>

    ; 서블릿 클래스의 _jspService() 매서드에 그대로 복사되는 영역

<Calculator.jsp>

 <%
    String v1 = "";
    String v2 = "";
    String result = "";
    String[] selected = {"","","",""};
    
    // 브라우저로부터의 요청에 v1값이 있을 때만 실행
    if(request.getParameter("v1")!=null){ // _jspService에 이미 선언된 변수라서 가능
      v1 = request.getParameter("v1");
       v2 = request.getParameter("v2");
       String op = request.getParameter("op");
       result = calculate(Integer.parseInt(v1), Integer.parseInt(v2), op);
    }
 %> 

<Calculator_jsp.java>

public void _jspService(…) throws … {
…
try {
…
out.write('\n');
String v1 = "";
String v2 = "";
String result = "";
String[] selected = {"", "", "", ""};
// 브라우저로부터의 요청에 v1값이 있을 때만 실행
if (request.getParameter("v1") != null) {    // _jspService에 이미 선언된 변수라서 가능
v1 = request.getParameter("v1");
v2 = request.getParameter("v2");
String op = request.getParameter("op");
result = calculate(
Integer.parseInt(v1),
Integer.parseInt(v2),
op);
...

4. JSP 선언문 <%!    %>

    ; 필드(멤버변수), 메서드, 내부 클래스가 선언되는 영역
    ; 위치는 _jspService() 바깥, 즉 Calculator_jsp 클래스의 멤버 매서드로 선언된다

<Calculator.jsp>

 <%!
    private String calculate(int a, int b, String op){
      int r = 0;
      if("+".equals(op)){
         r = a + b;
      }else if("-".equals(op)){
         r = a - b;
      }else if("*".equals(op)){
         r = a * b;
      }else if("/".equals(op)){
         r = a / b;
      }
      return Integer.toString(r);
   }
 %> 

<Calculator_jsp.java>

private String calculate(int a, int b, String op) {
int r = 0;
if ("+".equals(op)) {
r = a + b;
} else if ("-".equals(op)) {
r = a - b;
} else if ("*".equals(op)) {
r = a * b;
} else if ("/".equals(op)) {
r = a / b;
}
return Integer.toString(r);

5. JSP 표현식 <%=    %>

    ; 템플릿 데이터 내에서 자바 출력문을 생성하는 영역

<Calculator.jsp>

<input type="text" name="v1" size="4" value="<%=v1%>">
<select name="op">
<option value="+" <%=selected[0]%>>+</option>
<option value="-" <%=selected[1]%>>-</option>
<option value="*" <%=selected[2]%>>*</option>
<option value="/" <%=selected[3]%>>/</option>
</select>
<input type="text" name="v2" size="4" value="<%=v2%>">
<input type="submit" value="=">
<input type="text" size="8" value="<%=result%>"><br>

<Calculator_jsp.java>

out.print(v1);
out.print(selected[0]);
out.print(selected[1]);
out.print(selected[2]);
out.print(selected[3]);
out.print(v2);