본문 바로가기
  • 실행력이 모든걸 결정한다
Spring 사전 준비/JSP Servlet

[JSP Servlet] JSP 태그 종류 / JSP 동작 원리

by 김코더 김주역 2020. 11. 26.
반응형

1. JSP 태그

JSP는 HTML코드에 java언어를 삽입하여 동적 문서를 만들 수 있다.

 

JSP 태그의 종류

  • 주석 : <%--    --%>
  • 선언 : <%!    %> (reload 해도 변하지 않음)
  • 지시자(페이지 속성, ex) page, include, taglib) : <%@    %>
  • 표현식(결과값 출력) : <%=    %>
  • Scriptlet(JAVA 코드, 문장 뒤 세미콜론) : <%    %>
  • Javabean 연결 : <jsp:action> </jsp:action>

선언 태그에서 선언 -> 전역

Scriptlet 에서 선언 -> 지역

 

* 지시자 속성 종류

1) page : 해당 페이지의 전체적인 속성 지정

2) include : 별도의 페이지를 현재 페이지에 삽입

3) taglib : 사용자가 만든 tag들을 태그 라이브러리라고 하는데, 이러한 태그 라이브러리를 사용하기 위해 사용하는 지시자. uri(태그 라이브러리의 위치값) 및 prefix(태그를 가리키는 이름 값) 속성이 있다.

 

* action 태그 : JSP페이지 내에서 어떤 동작을 하도록 지시하는 태그 -  예) URL 이동, Page include 등 

1) <jsp:forward page=페이지 파일/> : 특정 페이지로 이동, 이전 페이지는 지워지고, 이전 페이지의 URL은 유지

2) <jsp:include page=페이지 파일 flush="false/> : 특정 페이지를 삽입, flush는 일반적으로 false로 설정함. flush는 출력 버퍼를 비울지 결정하는 속성, true로 지정한다면 출력 버퍼가 비워지고 모든 헤더 정보를 웹 브라우저에 전송하게 되는데, 이렇게 되면 나중에 헤더정보를 추가하게 되어도 반영이 안된다.

3) <jsp:param name=이름 vaule=값 /> : forward나 include 태그에 데이터 전달을 목적으로 사용되는 태그

 

 

( JSP 태그 예제 1 - Scriptlet ) 1~10까지 출력하기

JSP태그가 서로 떨어져 있더라도 JAVA 코드가 공유되는 모습,

JAVA 코드와 HTML 코드를 같이 쓸 수 있는 모습(<br>) 을 확인 할 수 있다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
    int i=0;
    while(true){
        i++;
        out.println("("+i+"/10)"+"<br>");
%>
    ============ <br>
<%
        if(i>=10) break;
    }
%>
</body>
</html>

 

 

( JSP 태그 예제 2 - 선언, 표현식 ) 변수, 메소드 선언하기

첫 번째 선언 태그에서는 두 변수 a,b 를 선언하고,

두 번째 선언 태그에서는 두 변수 a,b 를 더한 것을 반환해주는 메소드를 선언하고,

표현식 태그에서는 세미콜론 없이 add() 를 호출한 모습을 볼 수 있다. 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
    int a = 3;
    int b = 7; 
%>

<%!
    public int add() {
        return a+b;
    }
%>

<%=
    add()	
%>

</body>
</html>

 

 

 

( JSP 태그 예제 3 - 지시자 ) 언어 지정, Arrays import 하기

1~3줄에서 해당 페이지의 전체적인 속성을 지정해준 모습을 볼 수 있다.

import도 아래와 같은 방법으로 진행하면 된다.

<%@ page import="java.util.Arrays"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
    int[] arr = {1,2,3,4,5};
%>

<%=
    Arrays.toString(arr)
%>
</body>
</html>

 

 

( JSP 태그 예제 4 - 지시자2, include ) test2.jsp 파일 삽입하기

test1.jsp의 두 <h1> 태그 사이에 test2.jsp 페이지를 삽입한 모습을 볼 수 있다.

test2.jsp는 submit 버튼을 포함한다.

<test1.jsp>

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1> 1 </h1>
<%@ include file="test2.jsp" %>
<h1> 2 </h1>
</body>
</html>

 

<test2.jsp>

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <input type="submit" value="새치기 버튼"></input>
</body>
</html>

 

 

( JSP 태그 예제 5 - 주석 ) 주석 걸기

주석을 사용하면 컴파일 되지 않고 화면상에 출력되지 않는다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%--
이것이 출력 된다면 취두부를 먹겠습니다.
 --%>
</body>
</html>

 

아무것도 출력되지 않음

 

( JSP 태그 예제 6 - action 태그 ) 과일 값 데이터 전송하기

jsp:param 태그 데이터들을 jsp:forward 태그에 실어 test2.jsp로 전송한다.

test2.jsp에서는 getParameter() 메소드로 value값을 반환받았으며,

forward 태그 특성상 URL은 이전 페이지의 URL을 유지한 모습을 볼 수 있다.

<test1.jsp>

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="test2.jsp">
    <jsp:param name="apple" value="1350" />
    <jsp:param name="banana" value="650" />
</jsp:forward>
</body>
</html>

 

<test2.jsp>

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
    int apple_cost;
    int banana_cost;
%>

<%
    String coststr1 = request.getParameter("apple");
    int cost1 = Integer.parseInt(coststr1);
    String coststr2 = request.getParameter("banana");
    int cost2 = Integer.parseInt(coststr2);
%>

Apple : <%= cost1 %>Won<br>
Banana : <%= cost2 %>Won
</body>
</html>

 

 

 

 

2. JSP 동작 원리

사용자가 jsp 파일을 요청하게 되면 JSP 컨테이너가 JSP파일을 Servlet 파일(.java)로 변환한다. 이 과정에 JSP 내부 객체도 생성 된다.

그리고 이 Servlet 파일은 컴파일 된 후 클래스 파일(.class)로 변환되고, 요청한 사용자에게 html파일 형태로 응답 해준다.

.jsp -> .java -> .class

 

첫 요청시에는 .java, .class가 최초로 생성되고, 그 이후부터는 재활용되는 식이다.

 

* JSP 내부 객체 : 개발자가 객체를 생성하지 않고 사용할 수 있는 객체

 

JSP 내부 객체 종류

  • 입출력 객체 : request, response, out
  • 서블릿 객체 : page, config
  • 세션 객체 : session
  • 예외 객체 : exception

 

 

 

 

 

 

반응형

댓글