ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [WEB : JSP] 내장객체
    비전공자 공부일기/:: WEB & Front-End 2019. 7. 9. 10:31

    내장객체는 미리 제공되지만, 문제는 '언제까지' 이 객체를 사용하는지가 중요해지는데, 이게 바로 객체의 scope이다.

    그래서 jsp문서에 어떤 객체가 제공되는 지를 알아야 한다.

     

     

    내장 객체 : jsp문서를 만들 때 was가 자동으로 제공해주는 객체. 

    • page : JSP 문서에 대한 서블릿 인스턴스 저장하여 제공 - this 키워드와 유사
    • config : JSP 문서에 컨텍스트 정보를 저장하여 제공 - web.xml 파일의 저장값을 제공받기 위해 사용
    • out : JSP 문서에 포함될 값을 전달하기 위한 출력스트림을 저장하여 제공
    • requset : JSP 문서에 클라이언트의 요청정보(리퀘스트 메세지)를 저장하여 제공
    • response : JSP 문서에 클라이언트의 응답정보(리스폰즈 메세지)를  저장하여 제공
    • session : JSP 문서에 클라이언트와의 연결 지속성 관련 정보를 저장하여 제공
    • application : JSP 문서에 WAS(Web Application Server) 정보를 저장하여 제공
    • pageContext : JSP 문서에 대한 모든 정보를 저장하여 제공 - 기본객체 제공
    • exception : JSP 문서에 다른 문서의 예외정보를 저장하여 제공 - page 디렉티브의 isErrorPage 속성값이 true인 경우에만 제공

     

    pageContext : 여러가지 인스턴스를 제공해서 저장하는 역할을 한다.

    --- 웹 어플리케이션 작성에 필요한 객체정보를 다 가지고 있다.

    --- 나머지 내장 객체들에 필요한 정보들도 사실 pageContext가 제공해주는 것임

    ----- getpageContext() 사용

     

     

    form.jsp가 

     

    URL주소에는 영문자, 숫자, 일부 특수문자만 가능 >> URLEncoder.encode()를 사용하면 다른 문자도 사용 가능 >> but! 더 좋은 방법이 있음.

     

     

    request

    getMethod()

    getParameter()

    setCharacterEncoding()

    등등 많음

     

    response

    sendError()

    sendRedirect()

    두 가지를 주요하게 씀

     

     

    jsp는 인스턴스가 이미 만들어져 있기 때문에 인스턴스 생성이 중요하지 않다. 중요한 건 그 인스턴스가 어떤 기능을 갖고 있고, 어떤 메소드를 가져다가 써야 하는지가 중요하다.

     

     

    session, application, pageContext는 메소드가 있긴 하지만 중요하지 않고, scope를 가지고 사용하는 게 중요하다.

     

     

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

     

    어플리케이션에서 만들어진 객체는 해당 객체 내부에서만 사용할 수 있다.

     

    만들어진 객체를 여러 어플리케이션끼리 서로 공유할 수 있는 것은>>??????

     

    어플리케이션은 하나, 클라이언트는 여럿 ?????? 

     

     

     

    인스턴스 사용범위(scope) : 객체를 사용할 수 있는 사용범위

    --- WAS(Web Application Server)에 의해 인스턴스 생명주기(생성, 사용, 소멸)가 관리되는 인스턴스에 필요한 정보를 공유하여 컨텍스트의 어플리케이션에서 사용하는 기능

     

    Page Scope : pageContext 인스턴스(PageContext 클래스)를 이용하여 정보 공유

    --- 공유한 JSP 문서에서만 공유된 정보를 반환받아 사용

    자기가 공유하고 자기만 씀

     

    Request Scope : JSP 문서의 request 인스턴스(HttpServletRequest 클래스)를 이용하여 정보 공유

    --- model2에서 아주 중요 *****

    --- 공유한 JSP 문서와 제어권이 이동된 jsp 문서에서 공유된 정보를 반환받아 사용

    --- 제어권을 이동시키는 방법은 2가지가 있음. 클라이언트에 의해서 문서가 이동되는 게 아니라, 서버측에서 이동시키는데 그게 제어권 이동, 정확히는 쓰레드 이동이다. 원래대로라면 서버가 클라이언트에게 필요한 자원을 요청하고, 그에 대한 응답을 한다.

    --- JSP 문서는 자바코드가 절대 안나옴. model2에서 사용해야 함??????????????

    현재 JSP를 많이 쓰는 이유는 model2 때문인데, mvc를 최적화해서 쓸 수 있는 게 스프링이다. 처리는 서블릿이 하고 출력, 응답은 jsp가 함.

     

    Session Scope : JSP 문서의 session 인스턴스(HttpSession 클래스)를 이용하여 정보 공유

    --- 컨텍스트의 모든 문서에서 공유된 정보를 반환받아 사용 (Application은 클라이언트마다 다른 정보를 공유) --- 브라우저가 닫히는 순간 소멸

    --- 세션은 클라이언트의 개수만큼 있음 / 클라이언트의 정보를 따로 저장

    ----- 모든 문서에서 정보를 반환받을 수 있는 이유는 >> ????????

     

    Application ScopeJSP 문서의 application 인스턴스(ServletContext 클래스)를 이용하여 정보 공유

    --- 컨텍스트의 모든 문서에서 공유된 정보를 반환받아 사용 (Application은 클라이언트마다 동일한 정보를 공유)

     

    ----- session scope와 application scope는 범위는 비슷하지만 소멸의 시기가 다르다. 세션은 종료가 되면(브라우저가 닫히면) 정보가 사라지지만, 어플리케이션은 WAS가 종료될 때까지 정보가 유지

     

     

     

    ScopeAttribute.setAttribute(String attributeName, Object attributeValue)
    : JSP 문서의 내장객체를 이용하여 정보(인스턴스)를 공유하는 메소드
    - 공유 속성명으로 인스턴스를 공유(공유속성명이 존재할 경우 공유 인스턴스가 변경)

    ScopeInstance.getAttribute(String attributeName)
    : JSP문서의 내장객체를 이용하여 공유된 정보(인스턴스)를 반환하는 메소드
    - 공유속성명의 공유 틴스턴스가 존재하지 않을 경우 null 반환
    - 공유 인스턴스를 Object클래스 타입으로 반환하므로 객체 형변환하여 사용

     

     

     setAttribute가 공유해주면, getAttribute가 사용

    ※ '컨텍스트'는 자바의 '프로젝트'를 인터넷에서 사용하는 개념이라고 보면 됨

     

     

     

    댓글

coding wanee