JSP 태그
- JSP는 html 문서를 기반으로 해서 JSP 프로그래밍을 하기 위한 각종 태그가 추가된 형태
- JSP도 태그 형태
- JSP는 각종 태그를 이용해 고유 문법을 기술하는 서버 프로그램 방식
스크립트 태그(Script Tag)
- <% ……. %>
액션 태그(Action Tag)
- <jsp: ….. />
커스텀 태그(Custom Tag)
- < ……… / >
스크립트 태그
- <% ….. %> 사용
- HTML 코드에 자바 코드를 넣어 프로그램이 수행하는 기능을 구현
- JSP 웹 페이즈를 어떻게 처리할 것인지에 대한 페이지 정보를 설정하여 웹 컨테이너인 아파치 톰캣에게 보낼 때 선언
- 용도에 따라 5가지 유형. 모두 <% ….. %> 사
- - _jspService() 안에서 변수가 선언되기 때문에 실행 될때 마다 선언된다.
- 선언문에서 변수 선언 시 전역변수표현문 뒤에는 세미클론이 안들어감
- - _jspService() 바깥에서 변수가 선언되기 때문에 전역변수가 된다 새로고침을 할 때마다 값이 올라간다
- 스크립틀릿에서 변수 선언 시 지역변수
주석문
- JSP 주석
- <%— 주석 — %>
- 클라이언트로 전달 되지 않는 주석
- JSP파일에서만 사용 가능한 주석으로 브라우저 소스보기를 해도 내용이 노출되지 않음
- <%— 주석 — %>
- HTML주석
- <!— 주석 —>
- 클라이언트로 전달되는 주석
- 일반적인 HTML 문서에서 사용 가능한 주석
- 화면에는 보이지 않지만 브라우저 소스보기를 하면 내용이 노출됨
- <!— 주석 —>
- 스크립트릿 부분 : 순수 자바코드 표시
- 순수 자바 문법에서 사용하는 모든 자바 주석 사용 가능
- 라인 주석 : //, 블록 주석 : /* */
서블릿 확인
/*
- 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
작성 순서) 선언문 태그에 문자형 전역 변수를 선언하여 출력할 문자열을 저장 문자형 변수 값을 반환하는 전역 메서드 getString() 작성 getString() 메서드를 호출하여 문자형 변수 값 출력 웹 브라우저에서 실행 결과 확인
결과
</head>
<%! String main = "Hello, Java Server Pages"; %>
<body>
<%!
public String getString() {
return main;
}
%>
<% out.println(getString()); %>
</body>
연습문제_2
표현식을 이용하여 구구단을 화면에 출력을 해봐라
<% 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">); %>
<% } %>
JSP 태그
- JSP는 html 문서를 기반으로 해서 JSP 프로그래밍을 하기 위한 각종 태그가 추가된 형태
- JSP도 태그 형태
- JSP는 각종 태그를 이용해 고유 문법을 기술하는 서버 프로그램 방식
스크립트 태그(Script Tag)
- <% ……. %>
액션 태그(Action Tag)
- <jsp: ….. />
커스텀 태그(Custom Tag)
- < ……… / >
스크립트 태그
- <% ….. %> 사용
- HTML 코드에 자바 코드를 넣어 프로그램이 수행하는 기능을 구현
- JSP 웹 페이즈를 어떻게 처리할 것인지에 대한 페이지 정보를 설정하여 웹 컨테이너인 아파치 톰캣에게 보낼 때 선언
- 용도에 따라 5가지 유형. 모두 <% ….. %> 사
- - _jspService() 안에서 변수가 선언되기 때문에 실행 될때 마다 선언된다.
- 선언문에서 변수 선언 시 전역변수표현문 뒤에는 세미클론이 안들어감
- - _jspService() 바깥에서 변수가 선언되기 때문에 전역변수가 된다 새로고침을 할 때마다 값이 올라간다
- 스크립틀릿에서 변수 선언 시 지역변수
주석문
- JSP 주석
- <%— 주석 — %>
- 클라이언트로 전달 되지 않는 주석
- JSP파일에서만 사용 가능한 주석으로 브라우저 소스보기를 해도 내용이 노출되지 않음
- <%— 주석 — %>
- HTML주석
- <!— 주석 —>
- 클라이언트로 전달되는 주석
- 일반적인 HTML 문서에서 사용 가능한 주석
- 화면에는 보이지 않지만 브라우저 소스보기를 하면 내용이 노출됨
- <!— 주석 —>
- 스크립트릿 부분 : 순수 자바코드 표시
- 순수 자바 문법에서 사용하는 모든 자바 주석 사용 가능
- 라인 주석 : //, 블록 주석 : /* */
서블릿 확인
/*
- 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
작성 순서) 선언문 태그에 문자형 전역 변수를 선언하여 출력할 문자열을 저장 문자형 변수 값을 반환하는 전역 메서드 getString() 작성 getString() 메서드를 호출하여 문자형 변수 값 출력 웹 브라우저에서 실행 결과 확인
결과
</head>
<%! String main = "Hello, Java Server Pages"; %>
<body>
<%!
public String getString() {
return main;
}
%>
<% out.println(getString()); %>
</body>
연습문제_2
표현식을 이용하여 구구단을 화면에 출력을 해봐라
<% 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">); %>
<% } %>