[JSP]스크립트 태그

2023. 9. 10. 21:38· 공부/JSP
목차
  1. JSP 태그
  2. 스크립트 태그
  3. 주석문
  4. 스크립틀릿 태그
  5. 표현문 태그
  6. 선언문 스크립트 태그

 

JSP 태그

  • JSP는 html 문서를 기반으로 해서 JSP 프로그래밍을 하기 위한 각종 태그가 추가된 형태
  • JSP도 태그 형태
    • JSP는 각종 태그를 이용해 고유 문법을 기술하는 서버 프로그램 방식

스크립트 태그(Script Tag)

  • <% ……. %>

액션 태그(Action Tag)

  • <jsp: ….. />

커스텀 태그(Custom Tag)

  • < ……… / >

스크립트 태그

  • <% ….. %> 사용
    • HTML 코드에 자바 코드를 넣어 프로그램이 수행하는 기능을 구현
    • JSP 웹 페이즈를 어떻게 처리할 것인지에 대한 페이지 정보를 설정하여 웹 컨테이너인 아파치 톰캣에게 보낼 때 선언
    • 용도에 따라 5가지 유형. 모두 <% ….. %> 사
    Untitled.png
  •   - _jspService() 안에서 변수가 선언되기 때문에 실행 될때 마다 선언된다. 
  • 선언문에서 변수 선언 시 전역변수표현문 뒤에는 세미클론이 안들어감
  • - _jspService() 바깥에서 변수가 선언되기 때문에 전역변수가 된다 새로고침을 할 때마다 값이 올라간다
  • 스크립틀릿에서 변수 선언 시 지역변수

주석문

  • JSP 주석
    • <%— 주석 — %>
      • 클라이언트로 전달 되지 않는 주석
      • JSP파일에서만 사용 가능한 주석으로 브라우저 소스보기를 해도 내용이 노출되지 않음
  • HTML주석
    • <!— 주석 —>
      • 클라이언트로 전달되는 주석
      • 일반적인 HTML 문서에서 사용 가능한 주석
      • 화면에는 보이지 않지만 브라우저 소스보기를 하면 내용이 노출됨
  • 스크립트릿 부분 : 순수 자바코드 표시
    • 순수 자바 문법에서 사용하는 모든 자바 주석 사용 가능
    • 라인 주석 : //, 블록 주석 : /* */

Untitled.png

 

서블릿 확인

더보기

 

/*

- Generated by the Jasper component of Apache Tomcat
- Version: Apache Tomcat/10.1.13
- Generated at: 2023-09-01 02:39:11 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 jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.jsp.*;

public final class Scripting_005fTag_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports,
org.apache.jasper.runtime.JspSourceDirectives {

int count1 = 0; // 전역변수
private static final jakarta.servlet.jsp.JspFactory _jspxFactory =
jakarta.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("jakarta.servlet");
_jspx_imports_packages.add("jakarta.servlet.http");
_jspx_imports_packages.add("jakarta.servlet.jsp");
_jspx_imports_classes = null;
}

private volatile jakarta.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 boolean getErrorOnELNotFound() {
return false;
}

public jakarta.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 jakarta.servlet.http.HttpServletRequest request, final jakarta.servlet.http.HttpServletResponse response)
throws java.io.IOException, jakarta.servlet.ServletException {
if (!jakarta.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 jakarta.servlet.jsp.PageContext pageContext;
jakarta.servlet.http.HttpSession session = null;
final jakarta.servlet.ServletContext application;
final jakarta.servlet.ServletConfig config;
jakarta.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
jakarta.servlet.jsp.JspWriter _jspx_out = null;
jakarta.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>Insert title here</title>\\r\\n");
int count = 0; // 지역변수
  out.write('\\r');
  out.write('\\n');
  out.write("\\r\\n");
  out.write("</head>\\r\\n");
  out.write("<body>\\r\\n");
  out.write("	Page Count is\\r\\n");
  out.write("	");

out.println(++count);
out.println(++count1);

  out.write('\\r');
  out.write('\\n');
  out.write('	');
  out.print(application.getRealPath("/") );
  out.write("\\r\\n");
  out.write("</body>\\r\\n");
  out.write("</html>");
} catch (java.lang.Throwable t) {
  if (!(t instanceof jakarta.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에서 순수 자바 코드로 이루어진 로직 부분을 표현
    • UI(Swing 등) 를 제외한 거의 모든 자바 API 클래스 사용 가능
    • JSP의 큰 특징 중 하나
  • 초기 JSP 발전에 큰 기여, 현재는 권장 X
    • 5개의 언어(HTML, CSS, JavaScript, JSP, Java)가 함께 사용되어
    • 유지 보수가 힘들고 웹 디자이너와의 협업 어려움
    • 제한된 사용 필요
  • 대신 표현 언어, JSTL, 커스텀 태그 라이브러리, JSP 빈즈 사용 권장

system.out.println = 자바 콘솔 창에 출력

out.println : 서버에서 코드가 수행되어 클라이언트에게 보내질 html 문서 상에다가 출력

표현문 태그

<%= 자바 코드 %> - 각 행을 세미클론으로 종료할 수 없음

  • 웹 브라우저에 출력할 부분을 표현
  • 표현식의 결과 값을 출력
    • 간단한 데이터나 연산식의 결과값을 출력
    • 반환값을 갖는 메서드 호출 결과값을 출력
  • out.println(…)으로 처리되는 것과 같은 효과
    • out.println 메서드 인수로 적합한 형태의 사용 필요
    • 예) <% out.println(2+3) ; %>코드 마지막에 세미클론 사용하지 않
    • → <%= 2+3 %>

메서드를 호출해서 출력하는것도 가능하다.

<%= new java.util.Date() %>

= Thu Jul 05 15:33:40 KST 2023 …

선언문 스크립트 태그

<%! 자바 코드; %> - 각 행이 세미클론으로 끝나야 함

  • JSP 페이지는 자바 코드로 변환되어 컴파일 되어 클래스 파일이 실행됨
  • 클래스로 변환할 때 멤버 변수나 메서드 정의하고 싶을 때 사용
  • JSP 에서 멤버(전역) 변수나 메서드를 선언
    • 선언문 이외의 JSP 내용은 서블릿으로 변환시 _jspService() 메서드 내에 포함됨
    • 스크립트릿에 표현된 변수 선언과 메서드 정의는
      • 변수는 _jspService() 의 지역변수
      • 자바는 메서드의 중첩 구성이 불가하기에 메서드 정의 불가
  • 구조적으로 JSP 소스 코드에 자바 코드를 사용하는 것은 권장 X
    • 코드의 재활용 가능성이 떨어지고 유지보수가 어렵다
    • → 빈즈나 별도의 자바 클래스를 만들어 사용
    <body>
            <% int i = 0 ; %>
            <h2> 지역 변수 i = <%= ++i %></h2>
            <h2> 멤버 변수 m = <%= ++m %></h2>
            <%! int m=0; %>
    </body>

i 지역 변수 : i는 jspService() 호출될때마다 0으로 초기화

m 전역 변수 : 자바 소스 코드의 멤버 변수. 계속 누적해서 변화

연습문제_1

Untitled.png

작성 순서) 선언문 태그에 문자형 전역 변수를 선언하여 출력할 문자열을 저장 문자형 변수 값을 반환하는 전역 메서드 getString() 작성 getString() 메서드를 호출하여 문자형 변수 값 출력 웹 브라우저에서 실행 결과 확인

결과
</head>
    <%! String main = "Hello, Java Server Pages"; %>
    <body>
        <%!
        public String getString() {
            return main;
        }
        %>
        <% out.println(getString()); %>
    </body>

연습문제_2

표현식을 이용하여 구구단을 화면에 출력을 해봐라

Untitled.png

<% out.println("<h1>구구단 출력</h1>"); %>
<% for (int i=2; i< 10; i++) {%>
	<% for (int j=1; j<10; j++) {%>
		<%= i+ "*" + j + "=" + i*j %>
		<% out.println("<br>"); %>
	<% } %>
	<% out.println("<br">); %>
<% } %>
  1. JSP 태그
  2. 스크립트 태그
  3. 주석문
  4. 스크립틀릿 태그
  5. 표현문 태그
  6. 선언문 스크립트 태그
'공부/JSP' 카테고리의 다른 글
  • [JSP]내장 객체
  • [JSP]디렉티브 태그
  • [JSP]액션 태그
  • [JSP]JSP 개요
Future0_
Future0_
rm -rf /
Future0_
Luna Developer Blog
Future0_
전체
오늘
어제
  • 분류 전체보기 (111)
    • 프로그래밍 (4)
      • 알고리즘 (4)
    • 보안 (14)
      • Dreamhack (4)
      • Hackthebox (1)
      • Webhacking (9)
    • 프로젝트 (4)
    • 공부 (80)
      • Database (2)
      • Python (11)
      • System (4)
      • Java (13)
      • JSP (13)
      • Spring (11)
      • Kotlin (16)
      • 자료구조 (10)
      • 기계학습 (0)
    • Docker (4)
    • Github (2)
    • Tip (0)
    • 잡담 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 프로그래밍
  • 디버깅키해시
  • webhacking
  • SpringBoot
  • Python
  • Android Studio
  • spring
  • 컴퓨터
  • 자료구조
  • Java
  • android studio 삭제
  • api 통신
  • jsp
  • 알고리즘
  • Database
  • 1.9.22
  • 키 해시
  • cs
  • dreamhack
  • shared preference
  • Computer science
  • 코틀린기본문법
  • 자바빈즈
  • docker
  • native app
  • Kotlin
  • 상속
  • ViewModel
  • React
  • 보안

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
Future0_
[JSP]스크립트 태그
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.