728x90

session오브젝트

앞의 예제는 웹브라우저가 요청하면 웹서버가 응답하는 간단한 구조로 되어 있다.

이러한 웹의 구조는 손님이 가게에 가서 물건을 찾아 달라고 요청하면
가게 주인이 그 물건을 찾아 주는것과 비슷하다.

웹에서는 어떤 물건을 클릭하고
잠시후 다른 물건을 클릭하더라도 
웹서버는 같은 사용자가 요청했는지
다른 사용자가 요청했는지
구별하지 않는다는 것이다.

이렇게 누가 요청을 했는지 구별하지 않고 
단순하게 요청한 파일만 읽어서 서비스 하므로 
웹서버 부담을 줄일수 있다는 장점도 있지만,

쇼핑몰 같이 구매 제품을 클릭할 때마다 누가 클릭했는지 기억해야 하는
사이트에서는 웹서버쪽에 사용자별 기록을 남겨야만 할 것입니다.

웹 서버쪽에 기억 시키는 것을 세션이라고 하고
JSP파일에서는 session오브젝트을 통하여 이용할 수 있습니다.


session오브젝트 메소드

//putValue(name,value)..... session에 name, value 값의 항목를 추가
//getValue(name) ...... session에서 name에 해당하는 value값 읽어오기

setAttribute(name,vlaue) ... session에 name,value값의 항목을 추가 한다 ( 저장 )
getAttribute(name) ... session에서 name 해당하는 value을 읽어 온다 

long getCreateTime() ... 해다 세션을 생성한 시간을 리턴한다 
long getLastAccessedTime() ... 윕 브라우저의 요청이 시도된 마지막 접근 시간을 리턴한다 

String getId() ...해당 세션의 고유한 세션 ID를 리턴한다 

void setMaxInactiveInterval(time) ... 세션 유지 시간을 설정 한다 ( 초 단위로 )
int getMaxIncactiveInterval() ... 세션 유지 시간을 얻는다 

isNew () ..... session이 이번 요청시 새로 생성 되었는지 여부를 리턴 
invalidate() ...... session을 없애기( 세션 무효화)

Jsp파일에서는 session오브젝트는 자동으로 생성되며
page지시자에 session="false" 라고 지정함으로써 
session오브젝트을 생성되지 않게 할 수 있다.

HttpSession getSession() ...세션객체가 추가/삭제 될때 세션을 리턴합니다 

req.getSession(true)...true는 새로운 세션을 create 하고
req.getSession(false)...false 는 현재 세션을 그대로 리턴 해주고 
req.getSession().... 세션 존재 여부를 확인하여 session이없으면 새로이 세션을 생성해주고
                     session이 있다면 그대로 return 해준다. 위위 2개의 장점을 취한 것이다 
728x90

web.xml 파일 수정

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

  <display-name>Init Parameter Test</display-name>
  <description>Inint Parameter</description>
 
  <context-param>
  <description>로그인 여부</description>
  <param-name>logEnabled</param-name>
  <param-value>true</param-value>
 </context-param>
 
 <context-param>
  <description>디버깅레벨</description>
  <param-name>debugLevel</param-name>
  <param-value>5</param-value>
 </context-param>
</web-app>

InitParameterTest.jsp 파일 작성


<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.Enumeration" %>
<html>
 <body>
  <h2>초기파라미터 예제</h2>
  로긴여부 : <%= application.getInitParameter("logEnabled")%><br>
  디버깅레벨 : <%= application.getInitParameter("debugLevel")%><br>
 </body>
</html>

출력결과

초기파라미터 예제

로긴여부 : true
디버깅레벨 : 5
728x90
====================
application 오브젝트
====================

application 내장 객체는 서블릿 또는 어플리케이션 외부환경정보(context)를 나타내는 내장 객체이다

application 객체는 javax.servlet.Servletcontext 객체 타입으로 제공된다
 
---------------------------------
메소드                       설명
---------------------------------
 String  getServerInfo()   서버정보를 구한다.( 웹 컨테이너 이름과 버전 리턴,JSP컨테이너에 대한 정보 )

 String getMimeType(fileName)  지정한 파일의 MIME 타입을 리턴한다

    String fn= request.getParameter("filename");
    String contentType = application.getMimeType(fn);


 String getMajorVersion()  서버가 지원하는 서블릿규약의 메이저 버전을 리턴한다.(정수부분)

 String getMinorVersion()  서버가 지원하는 서블릿규약의 마이너 버전을 리턴한다.(소수부분)

 String getRealPath(url) - 지정된 url 실제 경로 알아내기
 
 void  log(message)    - message 내용을 파일에 기록하기  ( C:\Tomcat 5.0\logs 에 저장 )
                         로그 파일에 메세지를 기록한다 

-----에제-* application.jsp---------------------------------------
<%@ page
contentType="text/html;charset=euc-kr"
import="java.io.*"
%>

<html>
	<body>
		<%
		String serverInfo=application.getServerInfo();
                String mimeType=application.getMimeType("RequestTest.jsp");
		String realPath=application.getRealPath("/");
		
		int major=application.getMajorVersion();
		int minor=application.getMinorVersion();
		
		application.log("로그기록");
		
		%>
		서버 정보: <%= serverInfo %><br>
                MIME Type : <%= mimetype%>
		도큐먼트루트의 실제 경로: <%= realPath %><br>

		major 버전 :<%= major%><br>
		minor 버전 :<%= minor%><br>

	</body>
</html>


===========================================================================
pageContext 내장 객체
---------------------------------------------------------------------------

pageContext 객체는 현재 JSP페이지의 context를 나타내며

pageContext내부 객체를 통해서 다른 내부 객체에 접근할 수 있다 


예를 들어 out 내장 객체를 구하고자 할 경우의 코드는 다음과 같다 
JspWriter pageOut=pageContext.getOut();


----------------------------------------------------------------------------
리턴형                메서드                           설명
----------------------------------------------------------------------------
ServletRequest   getRequest()           request 기본객체를 구한다.

ServletResponse  getResponse()           response 기본객체를 구한다.

JspWriter            getOut()                 out 기본객체를 구한다.


HttpSession      getSession()           session 기본객체를 구한다.

                                        요청한 클라이언트의 세션 정보를 담고 있는 객체를 반환 


ServletContext    getServletContext()    application 기본객체를 구한다.

                                        페이지에 대한 서블릿 실행 환경 정보를 담고 있는 객체를 반환 


ServletConfig    getServletConfig()     config 기본객체를 구한다.

                                        페이지의 서블릿 초기정보의 설정 정보를 담고 있는 객체를 반환 


Exception      getException()            exception 기본객체를 구한다.

Object         getPage()                  page 기본객체를 구한다.




================================================================================
config  내장 객체  (javax.servlet.ServletConfig)
---------------------------------------------------------------------------------

Enumeration  getInitParameterNames()   모든 초기 파라미터 이름을 리턴

String    getInitParameter(name)     이름이 name인 초기 파라미터의 값 리턴

String   getServletName()         서블릿의 이름을 리턴

ServletContext getServletConfig()   실행하는 서블릿 ServletContext 객체를 리턴

=====예제 ======

<%= config.getServletName()%><p>
<%= config.getServletContext()%><p>

출력결과
jsp
org.apache.catalina.core.ApplicationContextFacade@e41d4a


=====================================================================
page 내장 객체 : 

jsp 객체는 JSP페이지 그 자체를 나타내는 객체이다 

그래서 this 키워드로 자기 자신을 참조할 수 있다 

javax.servlet.jsp.HttpJspPage 클래스 타입으로 제공하는 JSP 내부 객체이다 
---------------------------------------------------------------------
메서드 

getServletInfo() :info 속성값을 얻어낸다
 
=====예제 ======

<%@ page info="예제"%>

<h2> page 내장 객체</h2>

현재 페이지에 대한 정보 :
<%= this.getServletInfo()%>


<h2> config  내장 객체 </h2>

<%= config.getServletName()%><p>
<%= config.getServletContext()%><p>


<h2> pageContext  내장 객체 </h2>

요청 : <%= pageContext.getRequest()%><p>

세션 : <%= pageContext.getSession()%><p>

예외 : <%= pageContext.getException()%><p>


======================================================================
exception  내장 객체 

exeption 내부 객체는 프로그래머가 JSP페이지에서 발생한 예외를 처리하는 

페이지를 지정한 경우 에러 페이지에 전달되는 예외 객체이다 

----------------------------------------------------------------------

String getMessage()         발생된 예외 메시지를 리턴한다

String toString()           발생된 예외 클래스명과 메세지 리턴

String printStackTrace()    발생된 예외를 역추척하기 위해 표준 예외 스트림을 출력한다
728x90
내장 객체 -  JSP 컨테이너 가 자동으로 생성해주는 객체

 JSP 페이지에 관련된 내장 객체 : page, config

 페이지 입출력에 관련된 내장 객체 : request, response, out

 context에 관련된 내장 객체 : session, application, pageContext

 Error에 관련된 내장 객체 : exception

 - request (javax.servlet.http.HttpServletRequest ) : 웹브라우저 요청 정보
 - response (javax.servlet.http.HttpServletResponse ) : 웹 서버 응답 정보
 - out (javax.servlet.jsp.JspWriter ) : 페이지 내용 출력 스트림
 - session (javax.servlet.http.HttpSession ) : 세션 정보를 가지고 있는 객체
 - application (javax.servlet.ServletContext ) : 어플리케이션 공유 정보를 가지고 있는 객체

 - page ( javax.servlet.jsp.HttpJspPage ) : JSP 서블릿에 대한 인스턴스
 - config( javax.servlet.ServiceConfig ) : JSP 서블릿 configration data
 - pageContext ( javax.servlet.jsp.PageContext ) : JSP 컨텍스트 정보
 - exception ( javax.lang.Throwable ) : 예외 상황에 대한 정보를 담고 있는 객체

request, session, application, page 내부 객체는 임의 속성값(attribute)를 저장하고, 읽을 수 있는 메서드를  제공한다.
속성을 저장하고 읽을 수 있는 기능은 JSP페이지 등 또는 서블릿간의 정보를 주고 받을 수 있도록 해줍니다.

내부 객체의 속성을 저장하고 읽어내는 공통 메서드
 1. setAttribute(String key, Object value ) : 주어진 key(이름)에 속성값을 연결한다.
 2. getAttributeNames() : 모든 속성의 이름을 얻어온다.
 3. getAttribute(key) : 주어진 key에 연결된 속성값을 얻어온다.
 4. removeAttribute(key) : 주어진 key에 연결된 속성값을 제거한다.

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

  메서드( JspWriter)
    1. isAutoFlush() : 출력 버퍼가 가득찼을 때 자동으로 밀어닐 것인지 여부를 지정(false/true)
    2. getBufferSize() : 출력 버퍼가 전체 size를 구함.
    3. getRemaining() : 출력 버퍼의 남아있는 size
    4. clearBuffer() : 출력 버퍼를 비운다.
    5. println() : String을 출력한다.
    6. flush() : 출력 버퍼 내용을 밀어낸다.
    7. close() : 출력 버퍼 내용을 밀어내고 출력 버퍼를 닫는다.

예제> OutTest.jsp
<%-- OutTest.jsp --%>
<%@ page contentType="text/html;charset=euc-kr" %>
<html>
 <body>
  <%
  int total=out.getBufferSize();
  int rate=out.getRemaining();
  
  out.println(" total Buffer : "+(total/1024)+"kb"+"<br>");
  out.println(" remain Buffer :"+rate+"byte"+"<br>");
  out.println(" 사용중인 버퍼 : "+(total-rate)+"byte"+"<br>");
  %>
  <br>
  
  total Buffer<%= total %><br>
  remain Buffer<%=rate %><br>
  사용중인 버퍼 : <%= (total-rate)%><br>
 </body>
</html>



request 내장 객체 (HttpServletRequest ) : Parameter를 포함한 요청정보를 담고있는 객체

 메서드
   1. getMethod() :요청 방식 알아내기(Get,Post)
   2. getRequestURI() : 요청 파일 경로 알아내기
      getRequestURL() : 요청 파일 경로 알아내기
  
   3. getQueryString() : URI와 함께 전달되는 입력정보 알아내기

   4. getRemoteHost() : 클라이언트 호스트 이름 알아내기
   5. getRemoteAddr() : 클라이언트 주소 알아내기
   6. getRemoteUser() : (기본 인증을 이용할 경우) 이용자 ID 알아내기

   7. getProtocol() : 사용중인 프로토콜 알아내기(HTTP/1.1)
   8. getServerName() : 서버 도메인 이름 알아내기
   9. getServerPort() : 서버 port 알아내기

  10. getHeader(name) : name에 해당하는 요청 헤더 항목 값을 알아내기

  11. getParameter(name) : name에 해당하는 파라미터 값 알아내기
  12. getParameterValues(name) : name에 해당하는 파라미터 값을 모두 알아내기
  13. getParameterNames() : 폼에 있는 모든 파라미터 이름을 모두 알아내기

예제> RequestTest.jsp

<%@ page contentType="text/html;charset=euc-kr" %>
<html>
 <body>
  <h1>request정보 </h1>
  <li>사용 method 방식 : <%= request.getMethod() %>
  <li>요청경로(URL) : <%= request.getRequestURL() %>
  <li>요청경로(URI) : <%= request.getRequestURI() %>
  <br>
  <li> getRemoteHost(사용자 컴퓨터이름) : <%= request.getRemoteHost() %>
  <li> getRemoteAddr(사용자 컴퓨터 주소) : <%= request.getRemoteAddr() %>
  <li> getRemoteUser : <%= request.getRemoteUser() %>
  
  <br>
  
  <li>프로토콜 :<%= request.getProtocol() %>
  <li>서버이름 :<%= request.getServerName() %>
  <li>서버포트 :<%= request.getServerPort() %>
  
  <%-- getHeader(name)--%>
  <li>현재 사용하는 브라우저 정보 : <%= request.getHeader("User-Agent") %>
  <li>브라우저가 지원하는 file의 MIME type 알아보기 : <%= request.getHeader("Accept") %>
  <li>이전 URL 알아보기 : <%= request.getHeader("referer") %>
  <br>
  <a href="RequestTest.jsp">이전 URL알아보기</a>
  <br>
 </body>
</html>

response객체 ( HttpServletResponse) :요청 객체에 대한 응답을 담고 있는 객체

 메서드
   1. setContentType() : 출력하는 문서의 contentType 지정
      예> response.setContentType("text/html");
   2. getCharacterEncoding() : 문자 인코딩 설정 알아보기
   3. setHeader( name, value) : 응답헤더 설정
       예> response.setHeader("Refresh", "3;URL=http://www.youtobe.com");  //3초후에 유튜브로 고고싱~
   4. sendRedirect("url") : 지정 url문서 보여주기  //자주사용함..
                                 "RequestTest.jsp"   "http://www.daum.net"  - 내부 외부 URL 모두 사용가능함.
       참고 - forward 액션 
                  <jsp: forward page="local url"/>
                                "RequestTest.jsp" 가능  "http://www.daum.net" 불가  -   내부 URL만 사용가능.
              - include 지시자 (외부문서 포함)
                   <%@ include file="파일명.확장자" %>
                                 외부 데이터(jsp,txt,html 등을 ) jsp페이지에 포함시키는 것.
              - include 액션 태그(처리결과를 포함)
                    <jsp:include file="파일명.확장자" %>

예제> ResponseTest.jsp
 
- sendRedirect()은 웹브라우저가 다른 페이지로 이동하는데, 이때 다른 페이지로 가기 위해서 웹브라우저는  
   웹 서버에 새로운 Http 요청을 보낸다. 즉 TCP네트워크 연결이 다시 만들어지는 것 입니다. 
- forward 액션테그는 JSP엔진에서 Http요청을 다른 페이지로 보내는 것이다. 즉, Http요청은 처음 만들어진 것 
  하나만 있는 것입니다. 
  이 차이점은 중요한 의미를 갖는다.
  sendRedirect()를 사용하면 웹브라우저에서 처음에 전송된 Http요청과  이 요청에 포함된 데이터들은 새로 이동된
  페이지에서 사용할수 없게 됩다.  반면에 forward 액션을 사용하면 Http요청은 하나만 사용하기 때문에 새로 이동된
  페이지에서도 클라이언트에서 전송한 데이터를 사용할 수 있다.

   forwart 액션 태그
   <jsp:forward page="로컬url"/>

   <jsp:forward page="로컬 url">
   </jsp:forward>
 
   <jsp:forward page="<%= expression %>"/>
 
   <jsp:forward page="로컬URL">
      <jsp:param name="id" value="kim"/>
      <jsp:param name="pwd" value="123"/>
      <jsp:param name="pwd" value="<%= value %>"/>
   </jsp:forward>


include 디렉티브 (지시자)

외부 파일을 포함하는 것  입니다. ( .jsp, .html, .txt)
포함될 파일은 헤더 부분을 쓰지 말아야 합니다.  ( 중복선언 되니까)

형식----------------------------
<%@ include file="파일.확장자" %>

+ Recent posts