본문 바로가기
WEB/Servlet, JSP

[JSP] JSP 기본 문법 - JSP 스크립팅 요소, 내장 객체

by Amy IT 2022. 7. 16.

 

목차

     

    JSP 란?

    JSP(Java Server Page)는 서블릿과 마찬가지로 동적인 웹 어플리케이션을 개발할 때 사용 가능한 웹 컴포넌트입니다. 

     

    JSP 특징

    • 태그 기반의 웹 컴포넌트로서 jsp 확장자를 갖습니다.
    • 서블릿과 동일하게 클라이언트의 요청에 의해서 동적으로 실행됩니다.
    • html 파일 요청방식과 동일하게 JSP 를 요청할 수 있습니다.
    • 서블릿과 동일하게 JSP 의 응답결과는 html 형식으로 서비스됩니다.
    • JSP 는 최초 요청시 자바 소스로 변환되며, 변환 후 컴파일되어 클래스 파일이 만들어집니다. *.jsp -> *.java -> *.class 순으로 처리됩니다.
    • JSP 소스의 자바 소스 변환과 컴파일 작업은 JSP 컨테이너가 실행하며, 컴파일된 클래스 파일은 서블릿 컨테이너가 실행합니다.
    • JSP 는 자동으로 서블릿으로 변환되어 실행됩니다.
    • MVC 패턴의 View 역할로서 JSP 가 사용됩니다.

     

    Servlet과 JSP 비교

    • 서블릿은 자바 코드 내에 HTML 코드가 삽입되는 형태입니다. HTML을 작성하는 자바 코드 작업이 복잡하기 때문에, 자바 코드를 이용한 Business Logic 처리에 적합하며 MVC 패턴의 Controller 역할로 사용됩니다.
    • JSP는 HTML 코드 내에 자바 코드가 삽입되는 형태입니다. 서블릿에 비해서 HTML 코드 작업이 쉽기 때문에, tag를 이용한 Presentation Logic 처리에 적합하며 MVC 패턴의 View 역할로 사용됩니다.

     

     

     

    JSP 스크립팅 요소

    JSP에서는 HTML 요소, JSP 스크립팅 요소, JSP 표준 액션태그 요소, EL 요소, 커스텀 태그 라이브러리 요소를 사용 가능합니다. JSP 스크립팅 요소는 다음의 5가지 요소로 구성됩니다. 

     

    JSP 스크립팅 요소 사용법
    Directive tag <%@       지시자            %>
    Declaration tag <%!        자바 선언문      %>
    Scriptlet tag <%          자바 코드         %>
    Expression tag <%=       자바 표현식       %>
    Comment tag <%--       주석               --%>

     

    Directive tag

    Directive tag(<%@  %>)는 JSP 컨테이너가 JSP 페이지를 파싱하여 자바 소스로 변환하는 데 필요한 정보를 알려주기 위해 사용됩니다. 

     

    (1) page 지시어

    JSP 페이지에서 설정 가능한 속성을 지시하는 용도로 사용됩니다.

    <%@ page 속성명="속성값"  속성명2="속성값2" %>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>

     

    (2) include 지시어

    JSP 의 현재 페이지에서 다른 HTML 및 JSP 페이지를 동적으로 삽입할 수 있는 방법입니다. 일정한 자바 코드나 데이터가 여러 페이지에서 반복될 때, 반복되는 부분을 다른 파일로 저장하고 필요할 때 재사용할 수 있도록 합니다.

    <%@ include file="파일명" %>
    <%@ include file="include/top.jsp" %>
    <!-- 참고 -->
    <jsp:include page="include/top.jsp" flush="true"></jsp:include>

     

    (3) taglib 지시어

    JSP 에서 외부 라이브러리로 만든 태그를 지정할 때 사용하는 방법입니다. 대표적으로 JSTL(JSP Standard Tag Library)이 제공됩니다.

    <%@ taglib uri="TLD파일 URI" prefix="네임스페이스명" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

     

    Declaration tag

    Declaration tag(<%!  %>)는 JSP 페이지에서 자바의 멤버 변수와 메소드를 선언할 때 사용됩니다. 서블릿으로 변환될 때 자동으로 서블릿의 멤버로 변환시키기 때문에 JSP 페이지의 어느 위치에서도 참조가 가능합니다. 

    <% System.out.println(str); %> <!-- 콘솔에 출력 -->
    <% out.print(str); %> <!-- 브라우저에 출력 -->
    
    <%= sum(20,30) %> <!-- 브라우저에 출력 -->
    
    <%!
    	String str = "홍길동";
    
    	public int sum(int a, int b){
    		return a+b;
    	}
    %>

     

    Scriptlet tag

    Scriptlet tag(<%  %>)는 JSP 에서 가장 중요한 태그로서, JSP 페이지가 요청될 때마다 수행되어야 하는 자바 코드를 추가할 때 사용하는 태그입니다. <% %> 사이의 코드는 자바 소스로 변환시 _jspService() 메소드 내로 그대로 옮겨지기 때문에, Scriptlet tag 안에는 메소드 안에 들어갈 실행문을 지정하며 이 실행문은 클라이언트로부터 요청될 때마다 수행됩니다. 서블릿의 doGet 또는 doPost 메소드에서 처리했던 로직을 JSP 페이지에서는 Scriptlet tag 안에서 처리합니다. 대표적으로 사용자 입력 파라미터 얻기, 요청 포워드 리다이렉트, DB 연동 등과 같은 핵심 기능 처리를 담당합니다.

    <% int a = 10;
     if (a >= 10) { %>
     	크다 <br> <!-- HTML태그를 사용하려면 JSP태그를 열고 닫아주어야함 -->
    <% } else { %>
    	작다 <br>
    <% } %>

     

    Expression tag

    Expression tag(<%=  %>)는 Declaration tag 및 Scriptlet tag 에서 선언된 변수나 메소드에서 리턴된 값을 웹 브라우저에 출력하는 태그로서, 동적인 데이터를 응답 결과에 포함하기 위해 사용됩니다. 

    <%
    	List<String> list = Arrays.asList("홍길동", "이순신", "유관순");
    	for (String s : list) {
    %>
    	이름 : <%= s %> <br>
    <% } %>

     

     

     

    내장 객체

    내장 객체는 JSP 파일이 자바 소스 파일로 변환되면서 _jspService() 메소드 내에 자동으로 선언 및 초기화되는 변수들을 의미합니다. Scriptlet tag와 Expression tag에서 별도의 선언과 초기화 작업 없이 바로 사용할 수 있습니다.

     

    내장 객체 변수 이름 타입 설명
    request HttpServletRequest 요청정보 처리 객체
    response HttpServletResponse 응답정보 처리 객체
    session HttpSession 상태정보 유지 객체
    application ServletContext 상태정보 유지 객체
    config ServletConfig 서블릿정보 추출 객체
    out JspWriter 출력 처리 객체
    pageContext PageContext JSP 페이지 처리 객체

     

    request

    클라이언트에서 서버로 요청할 때 생성되는 HttpServletRequest 객체를 참조하는 내장 변수로서, 요청정보를 처리할 수 있습니다.

    <!-- loginForm.html -->
    <form action="login.jsp" method="post">
    아이디: <input type="text" name="userid"><br>
    비밀번호: <input type="text" name="passwd"><br>
    <input type="submit" value="로그인">
    <!-- login.jsp -->
    <%
    	request.setCharacterEncoding("utf-8");
    	String userid = request.getParameter("userid");
    	String passwd = request.getParameter("passwd");
    %>
    사용자id:  <%= userid %> <br>
    패스워드:  <%= passwd %>

     

    response

    서버에서 실행된 결과를 클라이언트에게 응답 처리할 때 사용되는 HttpServletResponse 객체를 참조하는 변수로서, 응답정보를 처리할 수 있습니다.

    <% 
    	response.sendRedirect("responseRedirect.jsp");
    %>

     

    session, application

    각각 HttpSession과 ServletContext 객체를 참조하는 변수로서, 상태정보를 유지하기 위해 사용됩니다. 

    <!-- test01.jsp -->
    <%
    	request.setAttribute("request", "홍길동");
    	session.setAttribute("session", "이순신");
    	application.setAttribute("application", "유관순");
    	response.sendRedirect("test02.jsp");
    %>
    <!-- test02.jsp -->
    <%
    	String v1 = (String) request.getAttribute("request");
    	String v2 = (String) session.getAttribute("session");
    	String v3 = (String) application.getAttribute("application");
    %>
    <%= v1 %><br> <!-- null -->
    <%= v2 %><br> <!-- 이순신 -->
    <%= v3 %><br> <!-- 유관순 -->

     

    out

    서블릿에서 응답 처리할 때 사용하는 PrintWriter 객체와 동일한 기능의 JspWriter 객체를 참조하는 변수로서, 웹 브라우저로 데이터를 출력할 때 사용합니다.

    <% 
    	out.print("홍길동"); 
    %>

     

     

     

    참고

    처음 해보는 Servlet&JSP 웹 프로그래밍 (오정임 지음, 루비페이퍼)

     

     

    'WEB > Servlet, JSP' 카테고리의 다른 글

    [JSP] JSTL 사용법  (0) 2022.07.18
    [JSP] EL 사용법  (0) 2022.07.17
    [Servlet] 필터 (Filter)  (0) 2022.07.10
    [Servlet] 요청 재지정 - sendRedirect(), forward(), include()  (0) 2022.07.10
    [Servlet] 상태 정보 유지 기술  (0) 2022.07.10

    댓글