티스토리 뷰

수업/└JSP

[CH02]스크립트 태그

onlyun 2022. 2. 11. 11:51

※JSP 처리 과정 ※

[ JSP 컨테이너 ] : JSP 페이지(A.jsp) -(번역)→ (A.jsp.java) -(컴파일)→ (A.jsp.class)

└자바 코드가 삽입되어 있는 태그를 처리하고 나머지는 HTML 코드나 일반 텍스트로 간주

└태그 : 스크립트 태그(Script Tag), 디렉티브 태그(Directive Tag), 액션 태그(Action Tag)

스크립트 디렉티브 태그 액션 태그
프로그램 구행하는 기능 구현 JSP페이지 처리 방법 설정 페이지 제어

 

1. 스크립트 태그(Script Tag)

HTML 코드에 자바 코드를 넣어 프로그램 수행하는 기능을 구현

JSP페이지가 서블릿프로그램 → 서블릿클래스 변환(컴파일)할 때,

JSP컨테이너가 자바 코드가 삽입되어 있는 스크립트 태그를 처리하고 나머지는 HTML 코드나 일반 텍스트로 간주.

 

(1) 스크립트 태그 <% ... %>

선언문(declaration) 스크립틀릿(scriptlet) 표현문(expression)
<%!  ...  %> <%  ...  %> <%=  ...  %>
변수, 메소드 정의 자바 로직 코드 작성 호출 결과 출력
세미콜론(;) 생략

-선언문 : 자바 변수나 메소드 정의. 전역 변수, 전역 메소드로 사용. 서블릿프로그램으로 번역시 jspServie() 외부 배치.

-스크립틀릿 : 서블릿프로그램으로 번역시 jspServie() 내부 배치.

-표현문 : 웹 브라우저에 출력할 부분 표현. 숫자, 문자, 불린 등의 기본 데이터 타입과 자바 객체 타입 사용 가능.            세미콜론(;) 생략

 

(2-1) 선언문 사용 예시

-새로운 JSP 파일 생성 : declaration01.jsp → 코드작성

-선언문, 스크립틀릿

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Scripting Tag</title>
</head>
<body>
	<%!
		int data = 50;
	%>
	<%
		out.println("Value of the variable is: "+data);
	%>
</body>
</html>

 

-실행(Run As) 하면, 결과가 웹브라우저로 뜸(설정한 브라우저 값으로_내부브라우저 선택)

 

-생성된 자바 파일 확인(?)

(2-2) 스크립틀릿 사용 예시

(3-1) 스크립틀릿 태그 <%  자바코드 %> 자바 코드로 이루어진 로직 부분 표현

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Scripting Tag</title>
</head>
<body>
	<%
		//10보다 작은 짝수 출력문
		for(int i=0; i<=10; i++){
			if(i%2 == 0){
				out.println(i+"<br>");
			}
		}
	%>
</body>
</html>

-띄워놓은 내부 브라우저에서 파일 이름만 변경하면 결과를 확인할 수 있다.

 

(2-3) 표현문 태그 사용 예시 <%=  자바코드  %>

기본 데이터 타입(숫자, 문자, 불린)과 자바 객체 타입 사용 가능. 세미콜론 사용하지 않음.

_오늘날짜 출력

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Scripting Tag</title>
</head>
<body>
	<p>Today's date : <%= new java.util.Date() %></p>
	
</body>
</html>

※ 오늘 날짜 출력하는 메소드

<!--java-->
Date today = new Date();
System.out.println(today);

<!--jsp - 스크립트 태그-표현문 태그-->
<%= new.java.util.Date() %>

_간단한 더하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		int a = 10;
		int b = 20;
		int c = 30;
	%>
	<%=
    	a+b+c
	%>
</body>
</html>

 

 

(2-4) 선언문, 스크립틀릿, 표현문사용 예시

└스크립틀릿에서 System.out이 아니라 out을 씀. 웹 서버 출력이기 때문에.

└표현식에서만 세미콜론(;) 사용하지 않음.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Scripting Tag</title>
</head>
<body>
	<h2>Scripting Tag</h2>
	<%! //선언문 - 변수나 메소드 정의
	int count = 3; //전역 변수 선언. 
	String makeItLower(String data){
		return data.toLowerCase();
	}
	%> 
	
	<% //스크립틀릿(scriptlet) - 자바 로직 코드 작성
	for(int i=1; i<= count; i++){
		out.println("Java Server Pages"+i+".<br>"); //웹 서버 출력이기 때문에 System.out이 아님.
		//줄바꿈 : HTML 태그 <br> 사용. println의 ln 안 먹힘(?)
	}%>
	
	<%= //표현문 - 변수, 계산식, 메소드 호출 결과를 문자열 형태로 출력
	makeItLower("Hello World") //세미콜론(;) 사용하지 않음.
	%>
</body>
</html>

-실행 후 생성된 자바 파일을 열어보면 다음과 같이 뜬다.

더보기
 * Generated by the Jasper component of Apache Tomcat
 * Version: Apache Tomcat/9.0.58
 * Generated at: 2022-02-11 02:17:31 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 scripting_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

 //선언문 - 변수나 메소드 정의 //jspService()외부 윛
	int count = 3; //전역 변수 선언. 
	String makeItLower(String data){
		return data.toLowerCase();
	}
	
  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() { // 3. 로딩
  }

  public void _jspDestroy() { //5. 종료
  }
  //4. 실행 스크립틀릿은 내부 위치
  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      final java.lang.String _jspx_method = request.getMethod();
      if ("OPTIONS".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        return;
      }
      if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP들은 오직 GET, POST 또는 HEAD 메소드만을 허용합니다. Jasper는 OPTIONS 메소드 또한 허용합니다.");
        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=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _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("<!DOCTYPE html>\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("<meta charset=\"UTF-8\">\r\n");
      out.write("<title>Scripting Tag</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("	<h2>Scripting Tag</h2>\r\n");
      out.write("	");
      out.write(" \r\n");
      out.write("	\r\n");
      out.write("	");
 //스크립틀릿(scriptlet) - 자바 로직 코드 작성
	for(int i=1; i<= count; i++){
		out.println("Java Server Pages"+i+".<br>"); //웹 서버 출력이기 때문에 System.out이 아님.
		//줄바꿈 : HTML 태그 <br> 사용. println의 ln 안 먹힘(?)
	}
      out.write("\r\n");
      out.write("	\r\n");
      out.write("	");
      out.print( //표현문 - 변수, 계산식, 메소드 호출 결과를 문자열 형태로 출력
	makeItLower("Hello World") //세미콜론(;) 사용하지 않음.
	);
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>");
    } 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);
    }
  }
}

 

 

'수업 > └JSP' 카테고리의 다른 글

[CH05]내장객체  (0) 2022.02.14
[00]주석  (0) 2022.02.13
[04]액션태그  (0) 2022.02.11
[CH03]디렉티브 태그  (0) 2022.02.11
[CH01]JSP웹 프로그래밍  (0) 2022.02.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함