JSP 정리 2

Updated:

JSP Directive Elements

Directive Elements에는 세가지 종류가 있다.

  • page directive
  • include directive
  • taglib directive

directive의 문법

<%@ directive attribute=”value” %>

page directive

Page directive는 JSP 페이지 전체에 적용되는 속성을 정의한다.

Page directive의 문법

<%@ page attribute=”value” %>

page directive
  • import

    • Class, interface, package import 할때 사용한다. 보통 파일의 맨 윗쪽에 import 코드들을 한꺼번에 올려놓는다.

      <%@ page import="java.util.Date" %>  
      Today is: <%= new Date() %>  
      
  • contentType

    • HTTP 응답의 MIME(Multipurpose Internet Mail Extension) type을 정의할 때 사용한다. 디폴트 값은 “text/html;charset=ISO-8859-1”이다.

      <%@ page contentType=application/msword %>  
      Today is: <%= new java.util.Date() %>  
      
  • extends

    • 만들어질 servlet에 의해 상속될 부모 class를 정의한다. 잘 쓰이진 않는다.
  • info

    • Servlet interface의 getServletInfo() 메서드를 이용해서 알 수 있는 JSP 페이지의 정보를 설정한다.

      <%@ page info="composed by Sonoo Jaiswal" %>  
      

      웹 컨테이너는 이후에 getServletInfo() 함수를 만들게 된다.

      public String getServletInfo() {  
        return "composed by Sonoo Jaiswal";   
      }  
      
  • buffer

    • 만들어진 JSP페이지의 버퍼 사이즈를 kilobyte단위 설정한다. 디폴트 값은 8Kb이다.

      <%@ page buffer="16kb" %>  
      
  • language

    • JSP 페이지 내에서 사용될 script 언어를 정의한다. 디폴트 값은 “java”이다.
  • isELIgnored

    • Expression Language (EL)를 무시할 수 있다. 디폴트 값은 “false”이다. 즉, EL은 디폴트로 활성화 되있다. (EL이 무엇인지 밑에서 다시 다룬다)

      <%@ page isELIgnored="true" %>//Now EL will be ignored  
      
  • isThreadSafe

    • Servlet과 JSP는 모두 멀티스레드로 구동된다. 하지만 만약에 사용자가 JSP 페이지의 멀티스레드 기능을 안쓰고 싶다면 이 속성을 이용하면 된다. 디폴트 값은 “true”이다. 만약에 “false”로 값을 바꾸면 웹 컨테이너는 여러 요청들을 serialize하게 된다.

      <%@ page isThreadSafe="false" %>
      

      이 경우 웹 컨테이너는 이런 servlet을 만들게 된다.

      public class SimplePage_jsp extends HttpJspBase   
        implements SingleThreadModel{  
      .......  
      }  
      
  • errorPage

    • 에러 페이지를 정의하는데 사용된다. 만약 현재 페이지에서 exception이 발생한다면 여기서 정의한 에러페이지로 리디렉션된다.

      <%@ page errorPage="myerrorpage.jsp" %>  
            
      <%= 100/0 %>  
      
  • isErrorPage

    • 현재 페이지가 에러페이지라는 것을 선언할 때 사용된다. 에러페이지인 경우에만 사용할 수 있다.

    • The isErrorPage attribute is used to declare that the current page is the error page.

      <%@ page isErrorPage="true" %>  
            
       Sorry an exception occured!<br/>  
      The exception is: <%= exception %>  
      

include directive

include directive는 다른 파일의 컨텐츠들(jsp, html, text file) 을 포함시킬 때 사용된다. JSP 페이지 전체에 적용되는 속성을 정의한다. JSP 페이지는 한번만 번역되기 때문에 include directive를 사용할 때는 정적인 파일을 사용하는게 좋다.

include directive의 문법

<%@ include file=”resourceName” %>

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

보통 include directive를 사용하는 이유는 페이지 내에서 공통적인 영역이 있을 수 있는데 그런 경우 매번 같은 코드를 쓰기 보다 중복되는 코드를 한 파일에다 넣어놓고 중복되는 코드가 존재하는 페이지에 해당 파일을 include하는 것이 더 효율적이기 때문이다. 이런 방법을 ‘웹 페이지 모듈화’라고 하는데 웹 페이지 모듈화를 하게 되면 코드의 길이도 더 짧아지고 유지보수성도 더 좋아지게 된다.

taglib directive

html코드들 사이에 자바 코드들이 들어가 있는게 보기가 좋지 않기 때문에(최대한 같은 코드들(CSS / HTML / JSP)끼리 뭉쳐놓는 것이 이상적) 자바 코드들을 html스타일로 일원화 해주기 위해 만들어졌다.

taglib directive는 여러 태그들이 정의되어 있는 태그 라이브러리를 정의할 때 사용된다. 요즘 흔히 사용되는 방법이다. (가장 많이 사용되는 태그 라이브러리는 JSTL 라이브러리이다.)

taglib directive의 문법

<%@ taglib uri=”taglib의 uri” prefix=”taglib의 prefix” %>

<%@ taglib uri="http://www.javatpoint.com/tags" prefix="mytag" %>  
<!-- 태그 라이브러리 주소 지정 -> 컨테이너가 태그에 대한 정보를 알 수 있도록 -->
<!-- prefix : 태그들을 사용할 때 쓸 이름 -->
  
<mytag:currentDate/>  
<!-- prefix로 정의한 태그 이름을 사용하여 이 라이브러리 안에 있는 변수나 함수들을 사용 -->

JSP Action Tags(Elements)

JSP에는 여러가지 action tag들이 있는데 각각 주어진 역할이 있다. Action tag들은 크게 두가지 역할을 하는데 첫번째 역할은 페이지들 사이에 흐름을 제어하고 두번째 역할은 Java bean을 사용할 수 있도록 해준다.

Action tag들은 다음과 같다.

JSP Action Tags Description
jsp:forward 요청과 응답을 다른 리소스로 전달한다.
jsp:include 다른 리소스를 포함시킨다.
jsp:useBean Bean 객체를 생성하거나 가져온다.
jsp:setProperty Bean 객체의 속성 값을 설정한다.
jsp:getProperty Bean 객체의 속성 값을 출력한다.
jsp:plugin Applet과 같은 다른 컴포넌트를 포함시킨다.
jsp:param Parameter값을 설정한다. 보통 전달하거나 포함시킬 때 사용된다.
jsp:fallback Plugin이 돌아가고 있다면 메세지를 출력하는데 사용될 수 있다. jsp:plugin에서 사용된다.
  • jsp:forward 사용 방법

  • jsp:include 사용 방법

  • Java Bean class 사용 방법**

    • Java Bean 은 다음의 규칙들을 따르는 Java class이다.

      • Argument가 없는 constructor를 가지고 있어야 한다.
      • Serializable이어야 한다.
      • 속성을 설정하고 가져올 수 있는 메서드를 제공해야 한다. 보통 setter와 getter 메서드라고 한다.
    • Java Bean을 사용하는 이유는 ‘reusable software component’이기 때문이다. 즉, 이 클래스로 만든 객체들은 여러 장소에서 접근이 가능하고 유지보수가 용이해진다.

      간단한 예시

      //Employee.java  
          
      package mypack;
          
      public class Employee implements java.io.Serializable {
      	private int id;
      	private String name;
          
      	public Employee() {
      	}
          
      	public void setId(int id) {
      		this.id = id;
      	}
          
      	public int getId() {
      		return id;
      	}
          
      	public void setName(String name) {
      		this.name = name;
      	}
          
      	public String getName() {
      		return name;
      	}
      }
      

      Java bean 접근 방법

      package mypack;
          
      public class Test {
      	public static void main(String args[]) {
      		Employee e = new Employee();// object is created
      		e.setName("Arjun");// setting value to the object
      		System.out.println(e.getName());
      	}
      }
      
    • Java Bean의 속성들은 두가지 method를 통해 read와 write가 지원된다.

      1. getPropertyName() : 예를 들어 속성 이름이 firstName이면 이 속성을 읽기 위한 메서드 이름은 getfirstName()이 된다.
      2. setPropertyName() : 예를 들어 속성 이름이 firstName이면 이 속성을 읽기 위한 메서드 이름은 setfirstName()이 된다.
    • Java Bean의 장점들

      • Java Bean의 속성들과 메서드들은 다른 application에 노출될 수 있다.
      • software components들을 쉽게 재사용할 수 있도록 해준다.
    • Java Bean의 단점들

      • Java Bean은 mutable이다. Immutable 객체의 장점을 가지지 못한다.
      • 각 속성에 대해 getter와 setter 메서드를 만드는 과정에서 boilerplate code(꼭 필요한 간단한 기능인데, 반복적인 코드를 필요로 하며, 이것이 중복되어 많은 양의 코드를 양산하는 것을 이야기함. 각 속성에 대해 getter와 setter를 만들기 때문에 속성의 개수에 비례하여 코드가 길어짐)가 되기 쉽다.
  • jsp:useBean 사용 방법

    • jsp:useBean은 bean class를 객체화하거나 찾을 때 사용된다. 만약 bean 객체가 이미 생성되었다면 범위에 따라 bean을 다시 생성하지 않는다. 만약 bean 객체가 생성되지 않았다면 bean 객체를 객체화시킨다.

      jsp:useBean action tag의 문법

      <jsp:useBean id= "instanceName" scope= "page | request | session | application"   
      class= "packageName.className" type= "packageName.className"  
      beanName="packageName.className | <%= expression >" >  
      </jsp:useBean>  
      

      jsp:useBean action tag의 속성과 사용 방법

      • id: 지정된 scope에서 bean을 identify할 때 사용된다.
      • scope: bean의 범위를 나타낸다. 범위는 page이거나 request이거나 session이거나 application일 수도 있다. 디폴트 범위는 page이다.
        • page: 한 JSP page안에서 bean을 쓸 수 있음을 나타낸다. 디폴트 범위이다.
        • request: 같은 request인 경우 이 bean을 어느 페이지에서도 사용할 수 있음을 나타낸다. page보다 더 넓은 범위이다.
        • session: 같은 request인지 여부에 관계없이 같은 세션인 경우 이 bean을 어느 세션에서도 사용할 수 있음을 나타낸다. request보다 더 넓은 범위이다.
        • application: 같은 application인 경우 이 bean을 application 내의 어느 페이지에서도 사용할 수 있음을 나타낸다. session보다 더 넓은 범위이다.
      • class: 특정 bean 클래스를 객체화시킨다. (즉, bean 클래스의 객체를 생성한다.) 하지만 반드시 argument나 constructor가 없어야 하고 abstract 하지 않아야 한다.
      • type: 범위 안에 이미 bean이 있을 경우 bean의 data type을 제공한다. class나 beanName 속성으로 사용된다. 만약 class나 beanName 없이 사용할 경우 bean이 객체화되지 않는다.
      • beanName: java.beans.Beans.instantiate() 메서드를 사용하여 bean을 객체화한다.
  • set & getProperty 사용 방법

  • displaying applet in JSP 사용 방법

JSP Expression Language

Expression Language(EL)는 Java Bean 안에 들어있는 데이터들과 request, session, application등 다른 객체들에 대한 접근을 간편하게 해준다. EL안에는 많은 내장객체들과 연산자(operator)들과 예약어(reserve words)들이 존재한다.

Expression Language (EL)의 문법

${ expression }  

Expression Language (EL)의 내장 객체들(Implicit objects)

Implicit Objects Usage
pageScope it maps the given attribute name with the value set in the page scope
requestScope it maps the given attribute name with the value set in the request scope
sessionScope it maps the given attribute name with the value set in the session scope
applicationScope it maps the given attribute name with the value set in the application scope
param it maps the request parameter to the single value
paramValues it maps the request parameter to an array of values
header it maps the request header name to the single value
headerValues it maps the request header name to an array of values
cookie it maps the given cookie name to the cookie value
initParam it maps the initialization parameter
pageContext it provides access to many objects request, session etc.
  • 예시 1 (param)

    • index.jsp

      <form action="process.jsp">  
      Enter Name:<input type="text" name="name" /><br/><br/>  
      <input type="submit" value="go"/>  
      </form>  
      
    • process.jsp

      Welcome, ${ param.name }  
      
  • 예시 2 (sessionScope)

    • index.jsp

      <h3>welcome to index page</h3>  
      <%  
      session.setAttribute("user","sonoo");  
      %>  
            
      <a href="process.jsp">visit</a> 
      
    • process.jsp

      Value is ${ sessionScope.user }  
      
  • 예시 3 (cookie)

    • index.jsp

      <h1>First JSP</h1>  
      <%  
      Cookie ck=new Cookie("name","abhishek");  
      response.addCookie(ck);  
      %>  
      <a href="process.jsp">click</a>  
      
    • process.jsp

      Hello, ${cookie.name.value}  
      

EL에서 연산자들의 우선순위

우선순위(위의 연산자들이 우선순위가 더 높음)
[] .
()
-(unary) not ! empty
* / div % mod
+ - (binary)
< <= > >= lt le gt ge
== != eq ne
&& and
|| or
?:

EL에서 예약어(Reserve words)

EL에서의 예약어들은 다음과 같다.

       
lt le gt ge
eq ne true false
and or not instanceof
div mod empty null

출처

Leave a comment