'JSP/Jsp 내장객체'에 해당되는 글 6건

  1. 2013.08.16 JSP 내장객체의 스코프
  2. 2013.08.16 HTML 문서에서 인자로 사용
  3. 2013.08.16 EL 개요
  4. 2013.07.29 Session
  5. 2013.07.29 Request
  6. 2013.07.29 JSP 개요
2013. 8. 16. 09:54

JSP 페이지의 내부 객체

 : 내부 객체는  JSP 페이지가 사용자의 브라우저에게 요청될 때 자동으로 생성되는 객체로 특정한 자

바 클래스 또는 인터페이스의 형태를 가지고 있다.


기본 객체 (implicit object, 내장 객체)

■ request : 클라이언트의 요청 정보를 담고 있는 객체

⋅스코프  :  request

⋅실제 타입  :  javax.servlet.http.HttpServletRequest 또는  javax.servlet.ServletRequest


■ response : 요청에 대한 응답 정보를 담고 있는 객체

⋅스코프  :  page

⋅실제 타입  :  javax.servlet.http.HttpServletResponse 또는  javax.servlet.ServletResponse


■ out : 페이지 내용을 담고 있는 출력 스트림 객체

⋅스코프  :  page

⋅실제 타입  :  javax.servlet.jsp.JspWriter


■ pageContext : JSP 페이지 실행에 필요한 Context 정보를 담고 있는 객체

⋅스코프  :  page

⋅실제 타입  :  javax.servlet.jsp.PageContext


■ session : 세션 정보를 담고 있는 객체

⋅스코프  :  session

⋅실제 타입  :  javax.servlet.http.HttpSection


■ application : Context의 모든 페이지가 공유할 데이터를 담고 있는 객체

⋅스코프  :  application

⋅실제 타입  :  javax.servlet.ServletContext


■ config : JSP 페이지의 서블릿 설정 데이터 초기화 정보 객체 

⋅스코프  :  page

⋅실제 타입  :  javax.servlet.ServletConfig


■ page : JSP 페이지를 구현한 자바 클래스 객체

⋅스코프  :  page

⋅실제 타입  :  java.lang.Object


■ exception : JSP 페이지의 서블릿 실행 시 처리하지 못한 예외 객체

⋅스코프  :  page

⋅실제 타입  :  java.lang.Throwable




Scope, 스코프

 : 웹 어플리케이션은  page,  request,  session,  application 이라는  4개의 영역을 가지고 있으며 기본

객체의 영역은 객체의 유효기간이라고도 불리며, 객체를 누구와 공유할 것인가를 나타낸다.

■ page 영역

 한 번의 웹브라우저(클라이언트)의 요청에 대해 하나의  JSP 페이지가 호출되며 웹브라우저의 

 요청이 들어오면 이때 단 한 개의 페이지만 대응 된다. 

 생성된 객체는 PageContext 에 저장된다.

 쉽게 말해 service()를 벗어나면 죽는다. 

 servlet → jsp 으앙 주금 //void service()


■ request 영역

 한 번의 웹브라우저(클라이언트)의 요청에 대해 같은 요청을 공유하는 페이지가 대응되며 

 웹브라우저가 한 번의 요청에 단지 한 개의 페이지만 요청될 수 있고, 같은  request 영역이면 

 두개의 페이지가 같은 요청을 공유 한다.  include 액션 태그,  forward 액션 태그를 사용 시 공유가능

 생성된 객체는 HttpServletRequest 에 저장


■ session 영역

 하나의 웹브라우저 당 1 개의 session 객체가 생성된다. 

 같은 웹브라우저 내에서는 요청되는 페이지 들은 같은 객체를 공유한다.

 생성된 객체는 HttpSession 에 저장된다.

 동일한 클라이언트만 사용가능


■ application 영역

 하나의 웹 어플리케이션 당  1개의  application 객체가 생성된다. 같은 웹 어플리케이션에 

 요청되는 페이지들은 같은 객체를 공유한다.

 생성된 객체는 실질적으로는  ServletContext 에 저장된다.




내부 객체의 속성

  : request,  session,  application,  pageContext 내부 객체는 임의 속성(attribute) 값을 저장하고 읽을  

수 있는 다음의 메소드를 제공 한다.

■ 메소드

⋅void setAttribute(String  key, Object  value)

  주어진  key속성의 값을  value로 지정한다.


⋅Enumeration getAttributeNames()

  모든 속성의 이름을 구한다.


⋅Object getAttribute(String  key)

  주어진  key속성의 값을 얻어낸다.


⋅void removeAttribute(String  key)

  주어진  key속성의 값을 제거한다.

'JSP > Jsp 내장객체' 카테고리의 다른 글

HTML 문서에서 인자로 사용  (0) 2013.08.16
EL 개요  (0) 2013.08.16
Session  (0) 2013.07.29
Request  (0) 2013.07.29
JSP 개요  (0) 2013.07.29
Posted by 1+1은?
2013. 8. 16. 09:51

● 3항 연산자 활용 태그 속성바꾸기

 


  서블릿에서 넘긴 parameter에 따라 다음처럼 html 소스가 바뀐다.



● 자바스크립트에서 문자열

 





'JSP > Jsp 내장객체' 카테고리의 다른 글

JSP 내장객체의 스코프  (0) 2013.08.16
EL 개요  (0) 2013.08.16
Session  (0) 2013.07.29
Request  (0) 2013.07.29
JSP 개요  (0) 2013.07.29
Posted by 1+1은?
2013. 8. 16. 09:43

EL, Expression Language


목차

■ 개요
■ 작성규칙
■ 연산자
■ 내장객체


■ 개요

 EL은 JSTL 1.0 스펙에서 소개되었던 것으로 JSP 2.0부터 공식적으로 포함되었으며,  JSP 페이지에 사용되는 자바코드를 대신해서 액션태그 엘리먼트

(예:<jsp:setProperty>)의 속성에 값을 지정하는  역할을 한다. 


${object}


request 객체에 전달한 vo라는 자바빈즈에 getEmail() 메소드가 존재할 때 JSP의 스크립릿으로


<%Test vo = (Test)request.getAttribute("vo");%>

<%= vo.getEmail()%>


라 작성했다면 EL은 다음과 같다 :


${vo.address};


졸라 편하다.



■ 작성규칙

EL은 숫자, 문자열, boolean 값과 null 같은 상수 값(리터럴) 들도 포함할 수 있다.⋅

EL은 $ 와 표현식 그리고 브레이스 { }를 사용해서 표현한다.


- 표현 언어(EL)는 항상 『${』 로 시작해서 『}』로 끝난다.

- JSP 스크립트 내부에서 쓸 수 없다. 즉, <%  %>, <%!  %>, <%=  %> 안에는 사용할 수 없다.

- 표현식 안에 연산식도 작성이 가능 하다. 

   ${num  +  1}

- 프로퍼티 접근 연산자 닷(dot(.)) 은 표현 언어(EL)에게 자바 빈이나 컬렉션 객체에서 다음에 오는 이름과 같은 프로퍼티를 찾게 한다.

   ${article['num']  +  1}  or  ${article["num"]  +  1}

- 브라켓 연산자(bracket([ ]) operator) 를 사용해도 된다. 닷(dot(.)) 과 같다. 즉, 브라켓 연산자의 배열 형태로 객체의 변수에 접근한다.



■ 연산자 

.

 빈의 프로퍼티나  맵(Map)의  엔트리 접근 

[]

 배열이나  리스트(List)  엘리먼트 접근 

()

 괄호. 표현식의  연산 순서를  바꿔서 연산하게 할  때

a ? b : c

 EL의 삼항연산자. a가 true면 b, false면 c 

+    -

*   /

%   !

==   !=

<   >

<=   >=

&&   ||

 자바와 같다.

empty

 빈 변수값 체크. null 혹은 빈문자열, 빈배열, 엔트리가 없는 맵이나 컬렉션이면 true 

func(args)

 함수 호출 



■ EL에서 제공하는 내장객체 

● pageScope, requestScope, sessionScope, applicationScope
 : 각 영역 객체들에 대한 컬렉션
${scope.데이터_명}
예를 들어 session 객체로 전달받은 email에 접근할 때, 구문이 다음과 같다면 :
session.setAttribute("email", "noname@site.com"); 

전달받은 데이터에 접근하려면 :
${sessionScope.email} 라고 작성한다.

scope를 명시하지 않으면 requestScope에서 찾는다.

● param
 : 모든 request  파라미터들을  문자열로 가진 컬렉션(request.getParameter() 메소드) 
${param.데이터_명} 
혹은 ${param["데이터_명"]}
param은 html의 form을 통해 입력된 데이터를 가져올 때 사용한다.  

<form action="test2.jsp" method="post">
<input type="text" name="num"><br/>
<input type="submit" value="보내기">

위 폼에서 넘어온 num을 찾으려면 :
${param.num}

● paramValues 
 : 모든 request 파라미터들을 파라미터당 문자열 배열로 가진 컬렉션 
${paramValues.데이터_명[0]},  ${paramValues["데이터_명"][0]})
form을 이용한 입력 중 checkbox, select 등 같은 name 애트리뷰트를 가진 데이터를 가져올 때는 paramValues를 사용한다. 
사용 형식은 param과 비슷하나 여러 개의 입력 값이 있으므로 배열 형태가 된다

<form action="test2.jsp" method="post">
<input type="checkbox" value="first_value" name="ck"/>
<input type="checkbox" value="first_value" name="ck"/>
<input type="submit" value="보내기">

위 폼에서 넘어온 첫번째 값을 찾으려면 :
${paramValues.ck[0]}

배열 순서는 form 태그에 작성 된 순서를 따른다.

● cookie
 : cookie는 웹 브라우저가 웹 서버로 보낸 쿠키를 가져올 때 사용한다.
${cookie.쿠키_명}  
혹은 ${cookie["쿠키_명"]}
주의 할 것은 반환되는 타입이 쿠키의 값이 아니라 쿠키 객체라는 점이다.  
따라서 쿠키의 값을 출력하기 위해서는 :

${cookie.쿠키_명.value  }  
혹은  ${cookie["쿠키_명"]["value"]} 
라고 해주어야 한다. 
쿠키의 값 대신 쿠키의 다른 정보를 얻기 위해 쿠키명 뒤에  .domain  .path  .maxAge 등을 사용할 수도 있다.

● initParam
  : 모든 어플리케이션의 초기화 파라미터의 이름의 컬렉션
 ${initParam.파라미터_명} 
혹은 ${initParam["파라미터_명"]}
initParam은 웹 애플리케이션의 초기화 파라미터를 가져오는데 사용한다. 
이 값을 얻기 위해서는 해당 이름의 초기화 파라미터가 web.xml 에 등록되어 있어야 한다.

● pageContext
  : 현재 페이지를 위한  javax.servlet.jsp.PageContext.  JSP 페이지의 환경 정보
${pageContext.메서드_명}
혹은 ${pageContext.메서드_명}
⋅pageContext는 java.servlet.jsp.PageContext 클래스 타입의 객체로, 이 클래스에 속하는 get 메소드들의 호출에 사용된다. 
그 중에서도 파라미터가 사용되지 않는 메소드들만 실행할 수 있다. 사용 형식은  pageContext 뒤에 마침표나 대괄호를 붙혀 사용하나, 메소드 명에서 get을 버리고 난 후, 가장 첫 문자를 소문자로 고쳐 사용한다.

PageContext 클래스의  getRequest 메소드를 사용한다고 하면 :

${pageContext.request} 
혹은 ${pageContext["request"]} 
의 형식이 된다. 각 메소드의 리턴 값은 각각의 객체가 돌아오므로 필요한 필드를 불러와 출력할 수 있다.

⋅request.getContextPath() 가져오기  :  ${pageContext.request.contextPath}
⋅URI : ${pageContext.request.requestURI}

● header, headerValues
 : HTTP 요청 헤더들을 문자열이나 문자열배열로 가진 컬렉션 
 ${header["헤더_명"]}
자바의 식별자 명명규칙을 따르지 않는 헤더는 반드시 위의 형식으로 가져와야 한다.
HTTP 요청 메시지 안에 같은 이름의  HTTP 헤더가 둘 이상 있는 경우는  headerValues 내장 객체를 사용한다. 사용 형식은 paramValues 의 형식과 같다.


'JSP > Jsp 내장객체' 카테고리의 다른 글

JSP 내장객체의 스코프  (0) 2013.08.16
HTML 문서에서 인자로 사용  (0) 2013.08.16
Session  (0) 2013.07.29
Request  (0) 2013.07.29
JSP 개요  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 29. 13:56

session 내부 객체



   session 객체는 클라이언트 용처에 관한 context 정보의 세션과 관련된 정보(데이터)를 저장하고 관리하는 내부 객체로 

   javax.servlet.http.HttpSection 클래스 타입이다.

session 객체는 웹브라우저(클라이언트) 당 1개가 할당되며, 사용자가 로그인후 세션을 설정 일정시간이 지난 경우 다시    사용자가 인증을 요구하거나 쇼핑몰에서 장바구니 기능 구현시, 사용자가 다녀간 페이지 확인 및 웹페잊 트래킹 구현 시 

사용된다.

또한 session 객체를 사용하는데 page지시어의 session 속성 값을 false로 설정하면 에러가 발생한다.

 


* JSP는 session에 직접 접근, 서블릿은 request가 갖고 있다.


서블릿에서 session에 접근

HttpSession session = req.getSession(); //세션에 클라이언트의 정보를 저장

session.setMaxInactiveInterval(60*30); //클라이언트의 요청이 없으면 (60초*30) 후 로그아웃

session.setAttribute("userId", dto.getUserId());
session.setAttribute("userName", dto.getUserName());
resp.sendRedirect(cp);
return;


EL에서 서블릿이 전달한 session에 접근

sessionScope.속성명


   ..로그아웃 상태 시 표시할 태그



   ..로그인 상태 시 표시할 태그


로그아웃

//세션에 저장된 정보를 삭제한다.
session.removeAttribute("userId");
session.removeAttribute("userName");

//세션의 모든 정보를 삭제하고 세션을 초기화
session.invalidate();

resp.sendRedirect(cp);



■ 주요 메소드

⋅String  getId()

각 접속에 대한 세션 고유  ID 를 문자열 형태로 반환

⋅long  getCreationTime()

세션이 생성된 시간을  January  1  ,1970 GMT 부터  long 형 밀리세컨드 값으로 반환

⋅long  getLastAccessedTime()

웹 브라우저의 요청이 마지막으로 시도된 시간을  long 형 ms 값으로 반환

⋅int  getMaxInactiveInterval()

세션 유지 시간을 초로 반환. 기본 값은  30분으로 지정된다.

⋅void  setMaxInactiveInterval(int  interval)

세션을 유지할 시간을  interval에 설정된 초 값으로 설정

⋅void  invalidate()

현재 세션을 종료. 세션관련 모든 값 삭제

⋅boolean  isNew()

클라이언트 세션  ID를 할당하지 않은 경우  true 값을 리턴 한다.



'JSP > Jsp 내장객체' 카테고리의 다른 글

JSP 내장객체의 스코프  (0) 2013.08.16
HTML 문서에서 인자로 사용  (0) 2013.08.16
EL 개요  (0) 2013.08.16
Request  (0) 2013.07.29
JSP 개요  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 29. 13:50


String method = request.getMethod();
//: method 확인(get|post)
//: GET
 
String ip = request.getRemoteAddr();
//: 클라이언트 아이피주소
//: 127.0.0.1
 
String cp = request.getContextPath();
//: ContextPath(문맥경로)
//: /study
 
String url = request.getRequestURL().toString();
//클라이언트가 요청한 전체주소
//: http://localhost:9090/study/0222/test3_ok.jsp

String uri = request.getRequestURI();
//URI : cp부터 나머지 주소
//: /study/0222/test3_ok.jsp

String path = request.getScheme() + "://" + request.getServerName()
     + ":" + request.getServerPort() + request.getContextPath();
//path
//http://localhost:9090/study
 
String referer = request.getHeader("Referer");
if(referer==null)
 referer="";
//클라이언트의 이전 주소
//: http://localhost:9090/study/0222/test3.jsp

String lang = request.getHeader("Accept-Language");
//언어정보 : ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4

String bw = request.getHeader("User-Agent");
//브라우저, 운영체제정보
//Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17



여부 (true/false 값)
       Secure Channel : <%= request.isSecure() %>

 □ 요청에 대한 URI, 컨텍스트 경로, 서블릿 경로, GET/POST 등의 메소드
  // User-Agent : 유저 에이전트는 브라우저 명 알기
  // Referer : 래퍼러는 전페이지 주소를 얻으며 전페이지가 없으면 null

String method = request.getMethod();

StringBuffer url = request.getRequestURL();
String uri = request.getRequestURI();

  /*
     // Tomcat 5.5 이후 forward 된 jsp 에서 getRequestURI() 메소드나 getRequestURL()
            //메소드의 값이 이상해진 경우
     
     예를 들어 서블릿 에서
     uri : cp/bbs/list.ation
     jsp 위치(포워딩 jsp) : /WEB-INF/views/bbs/list.jsp 인경우

     포워딩된 jsp에서 위 메소드를 사용하면

     /cp/WEB-INF/views/bbs/list.jsp
           http://localhost:8080/cp/WEB-INF/views/bbs/list.jsp 로 jsp가 존재하는 경로가 표시된다.
           
     하지만 서블릿에서 위 메소드를 사용하면

           /cp/bbs/list.ation
           http://localhost:8080/cp/bbs/list.ation 로 표시된다.

           만약 포워딩된 jsp에서 브라우저 주소를 가져오기 위해서는 다음 방법을 이용한다.

     String url=request.getAttribute("javax.servlet.forward.request_uri");

           - 기타 속성
             javax.servlet.forward.request_uri
             javax.servlet.forward.context_path
             javax.servlet.forward.servlet_path
             javax.servlet.forward.path_info
             javax.servlet.forward.query_string

         -  http://localhost:8080/study/jsp/test.jsp?name="hong" 에서의 출력 결과
            javax.servlet.forward.request_uri -> /study/jsp/test.jsp
            javax.servlet.forward.servlet_path -> /jsp/test.jsp
            javax.servlet.forward.context_path -> /studt
            javax.servlet.forward.path_info -> null
            javax.servlet.forward.query_string -> name="hong"
  */

String cp = request.getContextPath();
String path =request.getScheme()
+"://"+request.getServerName()+":"+request.getServerPort()+cp;
 String useBrowser = request.getHeader("User-Agent");
 String fileType = request.getHeader("Accept");
 String referer = request.getHeader("Referer");
 if(referer==null)
  referer="";


 □ include 된 페이지 uri가져올 경우
    <%= request.getAttribute( "javax.servlet.include.request_uri" ) %>

    기타 include 된 페이지 정보 구하기
    
    request.getAttribute("javax.servlet.include.query_string")
    request.getAttribute("javax.servlet.include.path_info")
    request.getAttribute("javax.servlet.include.servlet_path")
    request.getAttribute("javax.servlet.include.context_path")
    request.getAttribute("javax.servlet.include.request_uri")


 □ 세션 ID에 대한 정보
       Session ID : <%= request.getRequestedSessionId() %>
       Session ID from Cookie : <%= request.isRequestedSessionIdFromCookie() %>
       Session ID from URL : <%= request.isRequestedSessionIdFromURL() %>
       Session ID is still valid : <%= request.isRequestedSessionIdValid() %>

 □  Header 정보 보는 방법
       <%
           Enumeration eHeader = request.getHeaderNames();
       
           while(eHeader.hasMoreElements()) {
               String hName = (String)eHeader.nextElement();
               String hValue = request.getHeader(hName);
               
               out.println(hName + " : " + hValue);
           }
       %>
       
 □ Request 객체를 통해서 쿠키 정보 보는 방법
       <%
           Cookie cookies[] = request.getCookies();
       
           for(int i=0 ; i
       
  □ HTML 폼을 통해 넘어온 데이터를 받는 부분
       <%
           Enumeration eParam = request.getParameterNames();
       
           while(eParam.hasMoreElements()) {
               String pName = (String)eParam.nextElement();
               String pValue = request.getParameter(pName);
               
               out.println(pName + " : " + pValue);
           }
       %>

 □  attribute를 가져오는 부분
       <%
           Enumeration eAttr = request.getAttributeNames();
       
           while(eAttr.hasMoreElements()) {
               String aName = (String)eAttr.nextElement();
               String aValue = (String)request.getAttribute(aName);
               
               out.println(aName + " : " + aValue);
           }
       %>


 □  [[request로 넘어오는 데이타들]], form 에서 enctype="multipart/form-data" 인경우 만 사용 가능
    <%
         DataInputStream dis = new DataInputStream(request.getInputStream());
         String str;
         while((str = dis.readLine()) != null){
               out.println(new String(str.getBytes("ISO-8859-1"), "euc-kr")+"
"); // utf-8로 전송된 한글은 깨짐 } %>

■ request header 정보


□ Accept : 브라우저나 기타 클라이언트가 다룰 수 있는 MIME 형식들을 지정하는 것이다.

 

□ Accept-Charset : 브라우저가 사용할 수 있는 문자셋(ISO-8859-1)을 의미한다.

 

□ Accept-Encoding :  클라이언트가 원하는 인코딩 방식들을 의미한다. 문서를 네트웍 너머로 보내기에 적합한 형태로 

변환하는것 을 의미한다.

 

□ Accept-Language : 클라이언트가 원하는 기본 언어를 의미한다.  

 

□ Authorization : 헤더는 패스워드로 보호된 웹 페이지에 접근하려 하는 클라이언트가 자신의 신원 정보를 보내는 용도로 쓰인다.

 

□ Cache-Control : 프록시 서버에서의 캐시 설정을 의미한다.  

 

□ Connection : 클라이언트가 영속적 HTTP 연결을 처리할 수 있는지의 여부를 뜻한다.

 

□ Content-Length : post만 해당하는 것으로, post 데이터에 담긴 데이터의 크기를 의미한다.

 

□ Content-type : 주로 응답에서 쓰이지만, 클라이언트가 post나 put을 이용해서 어떤 문서를 첨부했다면 클라이언트 요청 안에 

포함되기도 한다.

 

□ Cookie : 서버가 브라우저에게 보냈던 쿠키를 다시 서버로 돌려 보낼 때 쓰인다.

 

□ Expect : 클라이언트가 바라는 서버의 행동이 어떤 것인지를 의미하는 헤더로 별로 쓰이지는 않는다.

 

□ From : HTTP 요청에 대해 책임이 있는 사람의 전자 우편주소이다.

 

□ Host : URL안에 호스트와 포트 번호로 브라우저는 반드시 이 헤더를 포함해야함. 브라우저가 원하는 구체적인 자원을 정확하게 

돌려주기 위한 용도로 쓰임.

 

□ If-Match : put요청에 해당하는 헤더

 

□ If-Modified-Since : 어떤 페이지의 최종 수정일시가 특정항 일시 이후인 경우만 그 페이지를 돌려 받기 원하는 경우 이헤더에 

그 일시를 헤더에 설정해서 요청한다.

 

 □ If-None-Match : If-Match와 반대

 

□ If-Range : 다운로드 관리자의 이어받기 기능에서 주로 이용된다. 어떤 하나의 문서의 일부분만을 가지고 있을 때 수정 일시를 

지정해서 그 일시 이후에 변한 것이 없으면 이미 가지고 있는 부분 이외의 것만 받게하고 아니면 문서 전체를 받는 용도로 쓰인다.

 

□ If-Unmodified-Since : If-Modified-Since 반대

 

□ Pragma : 헤더 값이 no-catch이면 프록시 서버 또는 하나의 프로시로서 작동하는 서블릿은 캐시에 복사본이 있다고 해도 

서버에서 처리한 response를 전달한다.

 

□ Procy-Authorization

 

□ Range : If-Range 와 비슷하다.

 

□ Referer : 이전 url정보를 얻을 때 사용하지만, 너무 믿으면 곤란하다.

 

□ Upgrade : 클라이언트가 서버에게 HTTP1.1 이상의 어떠한 프로토콜을 지정하는 용도로 쓰인다.

 

□ User-Agent : 브라우저의 소프트웨어 종류와 버전을 의미한다.   

 

□ Via : 요청이 거쳐간 중간 사이트들을 의미한다 주로 게이트웨이나 프록시 서버가 설정한다.  

 

□ Warning : 클라이언트가 캐싱이나 내용 변환 관련 에러게 대해 경고 할 때 쓰이는 헤더로 자주 쓰이지 않는다.   

'JSP > Jsp 내장객체' 카테고리의 다른 글

JSP 내장객체의 스코프  (0) 2013.08.16
HTML 문서에서 인자로 사용  (0) 2013.08.16
EL 개요  (0) 2013.08.16
Session  (0) 2013.07.29
JSP 개요  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 29. 13:48

■ 주석(comment) 처리

● HTML 주석 : 클라이언트에게 전달된다.

<!-- 주석내용 -->


● JSP 주석 : 클라이언트에게 전달하지 않는다.

<%-- 주석내용 --%>


● 스크립릿 에서의 주석 

/** 주석내용 */

/* 주석내용 */

// 주석내용


■ directive, 디렉티브(지시어)  링크_디렉티브

디렉티브는 페이지에  대한 설정  정보를 지정하거나 클래스의 속성을  변경한다. 

<%@  디렉티브_이름 속성1="값1" 속성2="값2"  ... %>


● 주로 쓰이는 설정

 

<%@ Page import="java.util.Calendar" %>   // JSP의 import
 
<%@ page contentType="text/html; charset=UTF-8" %> 
// contentType = 생성할 문서 타입. 기본 값 
// "text/html" 서버가 클라이언트에 전송하는 문자인코딩
 
<%@ page trimDirectiveWhitespaces="true" %>
//JSP 2.1 버전에서는 page 디렉티브에 새롭게 추가된 속성으로
//불필요하게 생성되는 줄 바꿈 공백 문자를 제거 할 수 있다. 기본 값 : "false"
 
<%   String cp = request.getContextPath();  // ContextPath(문맥경로) : ex) .../study
    request.setCharacterEncoding("utf-8"); %>
// 페이지 자체의 캐릭터 인코딩 지정. 기본 값 : "ISO-8859-1"



● page 디렉티브와 속성

 : page는 페이지에 대한 기본 정보 입력(생성하는 문서의 타입, 출력 버퍼의 크기, 에러 페이지등. 현재 문서를 나타내는 객체다.

- language : 스크립트 코드에서 사용되는 프로그래밍 언어 지정. 기본 값 : "java"

- contentType : 생성할 문서 타입. 기본 값 : "text/html"

- import : 사용할 자바 클래스 지정

- session : 세션 사용 여부 지정("true" : 사용, "false" : 미사용). 기본 값 : "true"

- buffer : 출력 버퍼 크기 지정("none" : 미사용, "12kb" : 출력 버퍼 12kb 사용). 기본 값 : "8kb"

- autoFlush

 : 출력 버퍼가 다 찼을 경우 자동으로 버퍼에 있는 데이터를 출력 스트림에 보내고 비울지의 여부 

  ("true" : 버퍼의 내용을 웹 브라우저에 보 낸 후 버퍼 비움, "false" : 에러 발생시킴. 기본 값 : "true")

- info : 페이지에 대한 설명

- errorPage : 실행 도중 에러 발생 시 보여줄 페이지 지정

                     <%@ page contentType="text/html; charset=UTF-8" errorPage="e.jsp"%>

    //에러 발생 시 클라이언트에 e.jsp 를 보여준다. 안쓴다.

    // 이 방법으로 에러처리를 하게 되면 모든 페이지에 설정을 해야 함.

- isErrorPage : 현재 패이지가 에러가 발생할 때 보여 지는 페이지 인지의 여부("true" : 에러, "false" : 에러아님). 기본 값 : "false"

- pageEncoding : 페이지 자체의 캐릭터 인코딩 지정. 기본 값 : "ISO-8859-1"

- isELIgnored

 : JSP 2.0에 새롭게 추가된 내용 ("true" : EL 무시, "false" : EL 사용). 기본 값 : web.xml 파일이 사용하는 JSP 버전 및 설정에 따라 다름

- extends : JSP 페이지가 Servlet 소스로 변환되는 시점에서 자신이 상속 받을 클래스를 지정할때 사용. 거의 사용되지 않는 속성

- isThreadSafe : 하나의 JSP 페이지가 동시에 여러 브라우저의 요청을 처리할 수 있는지 여부를설정. 기본 값 : "true"

- trimDirectiveWhitespaces

 : JSP 2.1 버전에서는 page 디렉티브에 새롭게 추가된 속성으로 불필요하게 생성되는 줄 바꿈 공백 문자를 제거 할 수 있다. 기본 값 : "false"


● taglib

 : 태그 라이브러리(tag library). 사용자가 만든 태그 모음. taglib는 JSTL 항목 참조 바로가기


● include

 : 다른 문서를 포함하는 기능. include 지시어는 JSP에서 서블릿 코드를 생성할 때 텍스트나코드를 jsp 파일 안으로 포함 시키며 포함되는 파일의 내용은   include  지시어가 있는 위치에 삽입된다.  

<%@  include file="URL"%>  

include 디렉티브의 처리과정은 정적으로 include 지시자를 사용한 JSP 페이지가 컴파일 되는 과정에서 include 되는 JSP 페이지의 소스 내용을 그대로 포함해서 컴파일 한다.  즉, 복사 & 붙여넣기 방식으로 두개의 파일이 하나의 파일로 구성된 후 같이 변환되고 컴파일 된다.


하지만 다른 문서를 포함해야 한다면 디렉티브로 사용하는것보다는 액션태그에서 사용하는편이다. 디렉티브의 include는 jsp파일을 그대로 복사하는 반면 액션태그의 include는 jvm이 랜더링한 결과, 즉 html 소스만 가져온다. 액션태그의 include는 액션태그 페이지에서 다룬다.


어찌됐건 디렉티브 사용방법은 다음과 같다.

1
2
3
4
5
//test1.jsp
<%
    String name = "홍길동";
%>
<%=name%>


위와 같은 페이지가 있을때 아래처럼 작성하면 문서포함이 완료된다.

1
2
3
4
5
6
//test2.jsp
<body>
include 지시어 예제<br/>
<%@include file="test3_inc.jsp" %>
<%=name%>님
</body>




■ Declaration, 선언부

 스크립트릿이나 표현식에서 사용할 수 있는 메소드나 변수를 정의한다. 선언 부에 선언된 변수는 서블릿으로 바뀔 때 멤버 변수로 변경되며 전역 변수의 성격을  가진다.  또한 _jspInit(), _jspDestory()와 같은 생명주기 운영을 위한 메소드를 재정의 할 수 있다. 선언부의 변수와 스크립릿의 변수는 생존주기가 다른데 가령 스크립릿 변수는 service()메서드의 멤버변수로 페이지가 로딩될 때마다 초기화된다.


<%! 자바_메소드정의 %> 

또는 

<%! 자료형 변수명 [= 초기)값]; %> 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%! int a = 0;%>
<%! int a,  b; double  c;%>
<%!
    public int add(int a, int b) {
        return a+b;
    }
%>
<html>
    <head><title>선언부예제</title></head>
    <body>
        10 * 25 = <%=mutiply(10, 25)%>
    </body>
    .
    .
    .



■ Scriptlet, 스크립릿

 JSP문서 내에 자바코드를 기술하는 부분으로 순수 자바 코드만 올수 있다. 그리고 스크립릿에  선언 된 변수는 로컬 변수의 성격을 가지며 자바에서의  메소드 내에서 선언된 변수와 비슷하다. (실제로 service()메서드의 멤버변수로 포함된다)

<%  자바코드1; 자바코드2;  자바코드3;  ... %> 

1
2
3
4
5
6
7
8
9
10
<% //: 스크립릿은 java 파일로 변경되면서 service() 메소드 안에 추가된다.
    int sum=0, i=1;
    while(i<=100)
    {   sum += i;
        i++;       }
 
out.print(sum);
 
out.print("<tr bgcolor='#ffffff' height='25'>");
%>



■ Expression, 표현식

HTML 문서 결과 값에 포함시키고자 할 때 사용 한다. 

<%=출력할_값 %> 


위는 아래와 같다.

<% out.print(출력할_값) %>

1
2
3
4
5
6
7
8
<%
    String str = "메롱";
%>
<html><head></head>
<body>
    <%=str%>
</body>
</head></html>

이 JSP 문서는 화면에 "메롱"을 출력한다.



■ JSP 예제 - form으로 전달받은 프로퍼티 처리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<%
    request.setCharacterEncoding("utf-8");
          //클라이언트에서 전송되는 문자셋 지정. 설정하지 않으면 한글 깨짐
    //데이터를 전송받기 전에 반드시 해야한다.
    String name = request.getParameter("name");
    String gender = request.getParameter("gender");
 
 
    //String hobby = request.getParameter("hobby");
    //동일한 이름을 가진 파라미터를 getParameter() 메소드로 전달받으면 오직 하나만 받을 수 있다.
    String hobby = "";
    String[] h = request.getParameterValues("hobby");
    if(h!=null)
    {
        for(String s:h){
            hobby+=s+", ";
        }
        hobby = hobby.substring(0, hobby.lastIndexOf(", ")); //마지막 쉼표 제거
    }
             
    String hak = request.getParameter("hak");
    String bigo = request.getParameter("bigo");
     
    bigo = bigo.replaceAll("\n", "<br/>"); //엔터 -> 태그
    bigo = bigo.replaceAll(" ", " "); //공백 -> 태그
%>
<html>
<head></head>
<body>
 
출력 첫번째 방법 : <% out.print(bigo); %>
 
출력 두번째 방법 : <%=bigo%>
 
</body>
</html>


'JSP > Jsp 내장객체' 카테고리의 다른 글

JSP 내장객체의 스코프  (0) 2013.08.16
HTML 문서에서 인자로 사용  (0) 2013.08.16
EL 개요  (0) 2013.08.16
Session  (0) 2013.07.29
Request  (0) 2013.07.29
Posted by 1+1은?