JSP & Servlet - jsp script

|

개인적인 연습 내용을 정리한 글입니다.
더 좋은 방법이 있거나, 잘못된 부분이 있으면 편하게 의견 주세요. :)


Servlet vs JSP

개발자가 웹 서버 프로그래밍을 구현할때 servlet과 jsp를 이용해 만들었다.

서블릿은 순수자바코드로만 이루어진 것으로 개발자가 어떤 자바파일을 만들고 코딩을 할때 만들어진 서블릿은 반드시 httpServlet 클래스를 상속받아 만들어져야 했다. 이렇게 만들어진 서블릿은 컴파일을 통해 클래스파일이 만들어지고 이 클래스파일은 컨테이너에서 사용자 요청에 따라 동작을 하게 된다.

jsp는 개발자가 jsp파일을 만들어놓는데, jsp또한 자바계열이기 때문에 jvm이 해석할 수 있게 자바코드로 만들어져야 한다. 다만, 이를 개발자가 만들필요는 없는것이고 개발자는 오로지 jsp파일만 만들고 이 만들어진 파일은 컨테이너가 알아서 자바파일로 만들어준다. 이렇게 생성된 자바파일은 컴파일러를 통해 클래스파일로 만들어지게 되며 이는 사용자에 의해 동작이 수행된다.

따라서 우리가 servlet과 jsp로 나누어 보고있지만 사실 jsp도 자바/클래스 파일로 만들어지기 때문에 결국 jsp도 servlet 파일이라고 볼 수 있다.

JSP 주요 스크립트

선언태그

  • jsp페이지(html페이지)에서 자바의 멤버변수 또는 메서드를 선언
  • 즉, 자바코드를 넣을 때 멤버 또는 메서드를 선언하기 위한 태그
<%!
  int num = 10;
  String str = "jsp";
  ArrayList<String> list = new ArrayList<String<();

  public void jspMethod() {
    System.out.println(" --jspMethod() --");
  }
%>

주석태그

  • 컴파일 시점에 컴파일 대상에서 제외되는 코드
  • 따라서, 실제로 사용자 혹은 결과물에는 영향을 미치지 않는다.
  • jsp 주석은 jsp파일이 서블릿 파일로 변환될 때 제외된다.
<%-- 주석태그 입니다 --%>
  • 실제 화면에 출력을 해보면 html 주석태그들은 보이지만, jsp 주석태그는 사라진다.
  • 이유는 jsp주석태그들은 jsp파일이 자바>클래스파일로 변환될때 컴파일 대상에서 제외되기 때문
  • html 파일은 컴파일할것도 없이 html 코드이기 때문에 빠지지않음

스크립트릿 태그

  • jsp 페이지에서 자바 코드를 넣기 위한 태그
  • 전체는 html 코드지만 그 안에 자바코드만 넣어주고 싶을 때 사용한다.
  • 실제로 jsp에서 가장 많이 쓰이는 태그지만 자바코드와 html코드와 뒤섞임
  • 따라서, 사용자에게 결과물을 보여주는 뷰 페이지를 만들때 주로 사용되며 규모가 큰 로직을 구현하는 코드에는 사용되지 않음
<%
  if (num > 0) {
%>
  <p> num > 0 </p>
<%  
  } else {
%>
  <p> num <= 0 </p>
<%
  }
%>

표현식 태그

  • 자바의 변수 및 메서드의 반환값을 출력하는 태그
  • html코드 하에 자바의 메서드 반환값 혹은 변수의 출력값을 나타내기 위해 사용한다.
num is <%= num %>
  • 즉, 자바에 있는 num값을 출력하라는 의미이다.
  • 내가 출력하고자하는 변수, 반환값을 적어주면 화면상으로 나타남

이렇게 선언을 한 뒤 서버를 보면 모든 값들이 올바르게 화면에 출력되어 보여지는 것을 알 수 있다.

그러나 소스를 살펴보면 화면에서 자바코드는 보이지 않고 오로지 html코드만 보인다. 그 이유는 자바코드들은 서버에서만 즉, 웹 컨테이너에서만 동작하는 코드로 자바파일에서 클래스파일로 변환이 되어 컨테이너에서 작업을 마치고 사용자에게 보여질때는 이 작업코드까지 굳이 보여줄 필요가 없어진다. 따라서 실제 뷰에서는 html 문법만 남겨지게 되는 것이다.


지시어

  • 개발중인 jsp파일이 서버에서 jsp페이지를 처리하는 방법에 대한 정의 부분

1) page: 페이지의 기본설정.

  • ‘이 페이지는 어떠어떠하게 흘러갑니다’를 서버에게 알려주기 위한 태그
  • 페이지의 기본설정을 알려주기 위한것으로 직접 개발자가 타이핑할 일은 없고 디폴트 설정이 되어있다.
<%@ page language="java" contentType="text/html" charset="UTF-8" pageEncoding="UTF-8" %>

2) include: 외부의 다른 파일을 가져올때 사용.

  • 현 jsp파일에서 다른 jsp파일을 가져와 삽입 사용하고 싶을때 사용
  • import도 사용이 가능하며 페이지 지시어에 들어가는 내용은 속성과 속성값이다.

개발자가 웹 페이지를 만든다고 할때 수많은 페이지마다 공통된 header와 footer가 들어가는 경우가 있는데 페이지마다 header와 footer를 계속해서 써주는 방식은 비효율적임으로 header.jspfooter.jsp를 만들어놓고 페이지마다 jsp파일을 include하는 것이 효율적이다.

<%@ include file="header.jsp" %>

3) taglib: 외부 라이브러리 태그 설정

  • 현재 개발중인 jsp파일에서 사용하는 라이브러리가 아닌 다른 곳에서 만든 라이브러리를 사용하고싶을때 사용
  • uri=”해당 라이브러리가 들어있는 속성값”
  • prefix=”라이브러리를 쓰기위한 프리픽스 값”
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>