[JSP] 디렉티브 태그, 스크립틀릿, 내장객체

sang·2024년 3월 9일

Directive Tag

디렉티브 태그

Page Directive Tag

<%@ page 속성1 = "값1" 속성2 = "값2" ... %>

JSP 페이지의 전반적인 정보 설정
속성마다 한 번만 선언 가능 (import 속성 제외)

  • info: 설명
  • language: 언어
  • contentType: 출력 형식
  • import: 클래스 임포트
  • session: HttpSession 객체 사용 여부
  • buffer: 출력 버퍼 크기
  • autoFlush: 버퍼 용량 부족 시 수행할 동작
  • errorPage: 예외 처리 담당 JSP 페이지
  • isErrorPage: 현재 페이지를 예외 처리 담당 페이지로 지정
  • pageEncoding: 문자열 인코딩
  • isElIgnored: EL 사용 유무

pro11/WebContent/hello2.jsp

<%@ page contentType="text/html;charset=utf-8"
  import="java.util.*"
  language="java"
  session="true"
  buffer="8kb"
  autoFlush="true"
  isThreadSafe="true"
  info="(ShoppingMall................)"
  isErrorPage="false"
  errorPage="" %>
<!DOCTYPE html>

<html>
<head>
  <meta charset="UTF-8">
  <title>페이지 디렉티브 연습</title>
</head>

<body>
  <h1>쇼핑몰 구현 중심 JSP입니다.!!!</h1>
</body>
</html>

Include Directive Tag

<%@ include file = "공통기능.jsp" %>

공통 사용 페이지를 다른 페이지에 추가
높은 재사용성, 쉬운 유지관리
ex) 페이지마다 똑같이 들어가는 사이트 제목, 로고, 메뉴 등

  1. 다른 파일에 포함되는 jsp 파일, 다른 파일을 포함할 jsp 파일 (파일 2개)
  2. 두 jsp 파일 내용이 합쳐져서 java 파일로 변환 (파일 1개)
  3. class 파일로 변환 (파일 1개)

pro11/WebContent/duke_image.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>duke_image</title> 
</head> 
<body> 
  <img src="./image/duke.png" /> <!-- 이미지 띄우기 -->
</body> 
</html>

pro11/WebContent/include.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>인클루드 디렉티브</title> 
</head>
<body> 
  <h1>쇼핑몰 중심 JSP 시작입니다!!! </h1><br> 
  <%@ include file="duke_image.jsp" %><br> <!-- include 디렉티브 태그 -->
  <h1>쇼핑몰 중심 JSP 끝 부분입니다.!!!</h1> 
</body> 
</html>

Taglib Directive Tag

프레임워크에서 제공하는 태그 사용



Scripting Element

<% %> - 명칭: 스크립틀릿

스크립트 요소
JSP 페이지 내 여러가지 동적 처리 제공
서블릿 자바 코드로 변환되어 실행 (브라우저로 직접 전송 X)

선언문 declaration tag

<%! 멤버 변수/메소드 %>

JSP 페이지에서 사용할 멤버 변수/메소드 선언
선언문에서 선언된 변수는 어디서든 접근 가능

스크립틀릿 scriptlet

<% 자바 코드 %>

자바 코드를 이용해 화면의 동적 기능 구현
현재 사용 X

표현식 expression tag

<%= 값/변수/식 %>

값 출력
변환된 서블릿 코드: out.print(작성한 값);
세미콜론 포함 시 오류 발생

실습

pro12/WebContent/hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%!
  <!-- 선언문 -->
  String name = "이순신";
  public String getName(){ return name;}
%>
<!-- 스크립틀릿 -->
<% String age=request.getParameter("age"); %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
  <title>스크립트릿 연습</title>
</head>
<body>
  <!-- 표현식 -->
  <h1>안녕하세요 <%=name %>님!!</h1>
  <h1>나이는 <%=age %>살입니다!!</h1><h1>나이+10은 <%=Integer.parseInt(age)+10 %>살입니다!!</h1>
</body>
</html>


주석

JSP 페이지에 사용되는 주석

  • HTML 주석: <!-- HTML 주석 -->
  • 자바 주석: /* 자바 주석 */
  • JSP 주석: <%-- JSP 주석 --%>

JSP 주석

JSP 주석 시 서블릿 코드로 변환 안됨

pro12/WebContent/hello4.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<% /* [자바 주석] String age=request.getParameter("age"); */ %>

<!DOCTYPE html>
<!-- [HTML 주석] -->
<html>
<head>
  <title>주석문 연습</title>
</head>
<body>
  <h1>주석문 예제입니다!!</h1>
  <%-- [JSP 주석] <%=Integer.parseInt(age)+10%> --%>
</body>
</html>


내장 객체

내장 변수
JSP에서 서블릿으로 변환 시 컨테이너가 자동으로 생성시키는 서블릿 멤버 변수
자주 사용하는 객체의 자동 생성 가능

  • session: 세션 정보 - 같은 브라우저에서 공유
  • application: 컨텍스트 정보 - 같은 애플리케이션에서 공유
  • request: 클라이언트 요청 정보 - 같은 요청에서 공유
  • response: 응답 정보
  • out: JSP 페이지 출력
  • pageContext: JSP 페이지 정보
  • page: JSP 페이지 서블릿 인스턴스 - 하나의 JSP 페이지에서 공유
  • config: JSP 페이지 설정 정보
  • exception: 예외 처리

session

pro12/src/sec01/ex01/SessionTest.java

package sec01.ex01;
...
@WebServlet("/sess")

public class SessionTest extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter pw = response.getWriter();
    
    /* session 객체에 데이터1 바인딩 */
    HttpSession session = request.getSession(); 
    session.setAttribute("name", "이순신");
    
    pw.println("<html><body>");
    pw.println("<h1>세션에 이름을 바인딩합니다.</h1>");
    pw.println("<a href='/pro12/test01/session1.jsp'>첫 번째 페이지로 이동하기 </a>");
    pw.println("</body></html>");
  }
}

pro12/WebContent/test01/session1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
  /* 세션에 바인딩된 데이터1 가져온 후 데이터2 바인딩 */
  String name=(String)session.getAttribute("name");
  session.setAttribute("address","서울시 강남구");
%>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>session 내장 객체 테스트2</title>
</head>
<body>
  이름은 <%=name %>입니다. <br>
  <a href=session3.jsp>두 번째 페이지로 이동</a>
</body>
</html>

pro12/WebContent/test01/session2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
  /* 세션에 바인딩된 데이터1,2 가져오기 */
  String name = (String)session.getAttribute("name");
  String address = (String)session.getAttribute(“address”);
%>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>session 내장 객체 테스트3</title>
</head>

<body>
  이름은 <%=name %>입니다.<br>
  주소는 <%=address %>입니다. <br>
</body>
</html>

application

pro12/WebContent/test01/appTest1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
  /* application 객체에 데이터 바인딩 */
  application.setAttribute("name","이순신");
  application.setAttribute("address","서울시 성동구");
%>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>내장 객체 application</title>
</head>
<body>
  <h1>이름과 주소를 저장합니다.</h1>
  <a href=appTest2.jsp>두 번째 웹 페이지로 이동</a>
</body>
</html>

pro12/WebContent/test01/appTest2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
  /* application 객체에 바인딩된 데이터 가져오기 */
  String name=(String)application.getAttribute("name");
  String address=(String)application.getAttribute("address");
%>

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>내장 객체 application 2</title>
</head>
<body>
  <h1>이름은 <%=name %>입니다.</h1>
  <h1>주소는 <%=address %>입니다.</h1>
</body>
</html>

request

pro12/WebContent/request1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" import="javax.servlet.RequestDispatcher" pageEncoding="UTF-8" %>

<%
  /* request 객체에 데이터 바인딩 */
  request.setAttribute("name","이순신");
  request.setAttribute("address","서울시 강남구");
%>

<!DOCTYPE html>
<html>
<head></head>
<body>
<!-- request 객체를 다른 JSP로 포워딩 -->
<% RequestDispatcher dispatch = request.getRequestDispatcher("request2.jsp"); 
dispatch.forward(request, response); %>
</body>
</html>

pro12/WebContent/request2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
  /* 포워딩된 request 객체에 바인딩된 데이터 가져오기 */
  String name=(String)request.getAttribute("name");
  String address=(String )request.getAttribute("address");
%>

<!DOCTYPE html>
<html>
<head></head>
<body>
  <h1>이름은 <%=name %>입니다.</h1>
  <h1>주소는 <%=address %>입니다.</h1>
</body>
</html>

out

pro12/WebContent/test01/out1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head></head>
<body>
  <!-- 다른 JSP로 데이터 전송 -->
  <form method="post" action="out2.jsp">
    이름:<input type="text" name="name"><br>
    나이: <input type="text" name="age"><br>
  <input type ="submit" value="전송">
</form>
</body>
</html>

pro12/WebContent/test01/out2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
  request.setCharacterEncoding( "utf-8" );
  String name=request.getParameter("name");
  String age=request.getParameter("age");
%>

<!DOCTYPE html>
<html>
<head></head>
<body>
<% if(name!=null || name.length()!=0){ %>
    <h1> <!-- 표현식으로 출력 --> <%=name %>, <%=age %> </h1>
<% }else{ %>
    <h1>이름을 입력하세요</h1>
<% } %>

<% if(name!=null ||name.length()!=0) { %>
    <h1> <!-- out 내장객체로 출력 --> <% out.println(name+", "+age); %> </h1>
<% }else{ %>
    <h1>이름을 입력하세요</h1>
<% } %>
</body>
</html>


*자바 웹을 다루는 기술

profile
CS 메모장

0개의 댓글