[JSP/SERVLET] JSP 구성요소

Posted by 신희준 on September 20, 2017


2017 - 09 - 20 (수)

  • 디렉티브
  • 스크립트
  • 기본 객체

  • 기본사항 정리

    1 . 디렉티브

    디렉티브는 JSP에 대한 설정정보를 저장할 때 사용된다.

    <%@ 디렉티브이름 속성:값; 속성:값%>
    

    디렉티브 선언은 위와같은 형식을 가지며, 현재 JSP가 제공하고 있는 디렉티브는 page, taglib, include가 있다.

    - page : JSP 페이지에 대한 정보 지정, 문서타입, 출력버퍼의 크기 지

    - taglib : JSP페이지에서 사용할 태그 라이브러리를 지정한다.

    - include : JSP 페이지의 특정 영역에 다른 문서를 포함시킨다.

    <%@ page contentType:"text/html"; charset="UTF-8"%>
    <%@ page import = "java.util.*" %>
    <%@ page pageEncoding = "UTF-8" %>
    <%@ page buffer = "4kb" %>   
    <%@ page buffer = "none" %>
    <%@ page buffer = "1kb" autoflush: "false" %> //autoflush가 true일 경우에는 JSP 페이지 가 생성하는 데이터 크기가 버퍼보다 커지면 출력한다.
    

    위는 page 디렉티브의 몇몇 속성을 사용한 예이다.

    - import : JSP페이지에서 사용할 클래스 임포트

    - session : JSP 페이지가 세션을 사용을 사용하는지의 여부를 알기위함. "true"일 경우에은 세션을 사용하고 "false"일 경우에는 세션을 사용하지 않는다.

    - buffer : JSP 페이지의 출력 버퍼 크기를 지정한다. "NONE"일 경우 출력 버퍼를 사용하지 않으며 Default 값은 8kb이다.(none으로 설정하면 기능을 사용 할 수 없으며 곧바로 전송되어 출력내용을 취소할 수 없다.)

    - autoFlush : 출력 버퍼가 가득 찼을 때 자동으로 버퍼에 있는 데이터를 출력 스트림에 보내고 비울지의 여부를 나타낸다.

    - info : JSP 페이지에 대한 설명을 입력한다.

    - pageEncoding : JSP 페이지 소스 코드의 캐릭터 인코딩을 지정한다.

    2 . 스크립트

    JSP에서 문서의 내용을 동적으로 생성하기 위해 사용되는 것이 스크립트 요소이다. 이 스크립트 요소를 사용하여 DB에 정보를 저장할 수 있다. 자바가 제공하는 다양한 기능을 사용할 수 있다.

    스크립트의 요소는 3가지로 나뉠 수 있다.
    1) 표현식 : 값을 출력
    2) 스크립트릿 : 자바 코드를 실행한다
    3) 선언부 : 자바 메서드를 만든다.

    
    
     <%
    	sum=0;
    	for(int i =0; i<10; i ++){
    		sum+=i;
    	}
    	%>
    ---------------------------------------------위는 스크립트릿 아래는 선언부
    	<%
    	public int multiply(int a, int b){
    		int c = a * b;
    		return c;
    	}
    	%>
    

    1부터 10까지의 합은 <%=sum %> 입니다.

    3 * 4는 <%=multiply(3,4)%> 입니다.

    위 코드의 for문 부분의 블록이 스크립트릿에 해당하고 p 태그 안에있는 <%=sum %> 부분이 표현식에 해당한다. 두번째 메소드를 선언한 블록을 선언부라고 한다.

    3 . 기본객체

    기본객체는 JSP 상에서 따로 객체를 선언하지 않아도 기본적으로 사용할 수 있는 객체이다.

    - request
    - response
    - session
    - out
    - exception


    - request 기본객체

    request 기본 객체는 웹 브라우저에 웹 사이트의 주소를 입력하면, 웹 브라우저는 해당 웹 서버에 연결한 후 요청 정보를 전송하는데, 이 요청 정보를 제공하는 것이 바로 request 기본 객체이다.

    
    //header 정보 메소드
    
    클라이언트 IP = <%= request.getRemoteAddr() %>
    요청정보길이 = <%= request.getContentLength() %>
    요청정보 인코딩 = <%= request.getCharacterEncoding() %>
    요청정보 컨텐츠타입 = <%= request.getContentType() %>
    요청정보 프로토콜 = <%= request.getProtocol() %>
    요청정보 방식 = <%= request.getMethod() %>
    요청 URL= <%= request.getRequestURI() %>
    컨텍스트 경로 = <%= request.getContextPath() %>
    서버이름 = <%= request.getServerName() %>
    서버포트 = <%= request.getServerPort() %>

    위의 JSP문장은 클라이언트와 서버의 정보를 보여주는 request의 메소드를 사용한것이다.

    
    //getParameter()메소드
    <%=request.getParameter("name")%>
    
    //getParameterValue()메소드
    <$
    String[] value = request.getParameterValue()
    if(value!=null){
    	for(int i= 0; i <values.length(); i++){
    		%>   <%=value[i]%>
    		<%
    	}
    }
    
    //getParameterName()메소드
    <%
    Enumeration paramEnum = request.getParameterNames();
    while(paramEnum.hasMoreElement())
    {String name = (String)paramEnum.nextElement();}
    %>
    <%=name%>
    
    //getParameterMap()메소드
    <%
    Map parameterMap = request.getParameterMap();
    String[] nameParam = (String[])parameterMap.get("name");
    if(nameParam!=null){
    %>
    name = <%= nameParam[0]%>
    <%
    }
    %>
    

    getParameter()메소드는 요청할때 받은 단일 값이다. 회원가입에 비유하자면 아이디, 주민등록번호 같은 값들을 각각 받을때 쓴다. getParameterValue()메소드의 경우 예를들어 어떤 사람이 회원가입을 할 떄 자격증 항목의 경우 배열로 받을 필요가 있다. 이 때 사용하면 될 것 같다. getParameterName()은 "속성 : 값"으로 되어있는 오브젝트가 있다면 속성을 받아오는 메소드이다. getParameterMap()은 "속성 : 값" 을 Map형식으로 받는다.

    -response 기본객체
    request와 반대의 기능을 수행한다. 브라우저에 보내는 response메시지에 대한 정보를 담는다.
    response 객체가 제공하는 헤더 추가 메서드


    addDateHeader(String name, long date) : 헤더에 date를 추가한다.
    addHeader(String name, String value) : name 헤더에 value 값으로 추가한다.
    addintHeader(String name, int value) : name 헤더에 정수 값 value를 추가한다.
    containsHeader(String name) : 이름이 name인 헤더를 포함하고 있을 경우 true를, 그렇지 않을 경우 false를 반환한다.
    Cache-control : HTTP 1.1버전에서 지원하며 헤더의 값을 no-cache로 지정하면 웹 브라우저는 응답 결과를 캐시하지 않는다. no-cache로 설정하더라도 응답내용을 보관할 수 있다. 응답결과가 캐시에 저장되지 않기 위해서는 헤더에 no-store를 추가해야한다.


    redirect : response 객체가 제공하는 메서드로 두번의 요청을 함. (전날 포스팅한 내용을 참조)

    
    <%
      response.sendRedirect("이동할 페이지"); //
    %>