1. 내장 객체  implicit object

👩🏻‍💻  JSP 페이지에서 사용할 수 있도록 JSP 컨테이너에 미리 정의된 객체

👩🏻‍💻  JSP 페이지가 서블릿 프로그램으로 번역될 때 JSP 컨테이너가 자동으로 내장 객체를 멤버 변수, 메소드 매개변수 등의 각종 참조 변수(객체)로 포함

👩🏻‍💻  JSP 페이지에 별도로 import 문 없이 자유롭게 사용할 수 있음

        ➡️ 스크립틀릿 태그나 표현문 태그에 선언을 하거나 객체를 생성하지 않고도 직접 호출하여 사용

 

내장 객체의 종류
내장객체 반환유형 설명
request  javax.servlet.http.HttpServletRequest 웹 브라우저의 HTTP 요청 정보를 저장
response javax.servlet.http.HttpServletResponse 웹 브라우저의 HTTP요청에 대한 응답 정보 저장
out  javax.servlet.jsp.jsp.jspWriter JSP 페이지에 출력 할 내용을 담고 있는 출력스트림
session  javax.servlet.http.HttpSession 웹 브라우저의 정보를 유지하기 위한 세션 정보를 저장
application javax.servlet.ServletContext 웹 애플리케이션의 콘텍스트 정보를 저장
pageContext  javax.servlet.jsp.PageContext JSP 페이지의 정보를 저장
page 
java.lang.Object JSP 페이지를 구현한 자바 클래스로 JSP 페이지 자체를 나타냄
config javax.servlet.ServletConfig JSP 페이지의 설정 정보를 저장
exception
java.lang.Throwable JSP 페이지의 예외 발생을 처리

 

  ⚡️  내장 객체는 서블릿 프로그램에서 모두 _jspService() 메소드 내부에 있음

  ⚡️  메소드 매개변수인 request, reponse를 비롯해 pageContext, session, application, config, out, page 등은 메소드 내에 서 참조할 수 있는 참조 변수 

  ⚡️ 모든 내장 객체는 JSP 컨테이너가 관리하는 객체로, 이 중 request, session, application, pageContext를 이용하여 속성을 관리 할 수 있음

  ⚡️  속성은 각각의 내장 객체가 존재하는 동안 JSP 페이지 사이에서 정보를 주고받거나 공유하는데 사용

 

메소드 반환 유형 설명
setAttribute(String name, Object value) void 해당 내장객체의 속성 이름이 name인 속성 값을 value로 저장
getAttribute(String name) Object 해당 내장객체의 속성 이름이name인 속성 값을 반환
removeAttribute(String name) void 해당 내장객체의 속성 이름이 name인 속성을 삭제
getAttributeNames() java.util.Enumeration 해당 내장객체의 모든 속성 이름을 가져옴

 


1)  request 내장 객체의 기능과 사용법 

 

출처 : https://download.oracle.com/

 

request 내장 객체는 JSP 페이지에서 가장 많이 사용되는 기본 내장 객체로, 웹 브라우저에서 서버의 JSP 페이지로 전달하는 정보를 저장. 즉 폼 페이지로부터 입력된 데이터를 전달하는 요청 파라미터 값을 JSP 페이지로 가져옴. 

 

JSP 컨테이너는 웹 브라우저에서 서버로 전달되는 정보를 처리하기 위해 javax.servlet.http.HttpServletRequest 객체 타입의 request 내장 객체를 사용하여 사용자의 요구 사항을 얻어냄

 

요청 파라미터 관련 메소드 

 

  📍  요청 파라미터는 사용자가 폼 페이지에 데이터를 입력한 후 서버에 전송할 때 전달되는 폼 페이지의 입력된 정보 형태.

  📍  이러한 요청 파라미터는 <name=value> 형식으로 웹 브라우저에서 서버의 JSP 페이지로 전송

  📍  요청 파라미터는 폼 페이지에서 <input type="text" ...> 처럼 입력 양식이 텍스트 유형인 경우 값을 입력하지 않으면 서버로 빈 문자열이 전송. 하지만 체크 박스와 라디오 버튼 유형인 경우 선택하지 않고 전송하면 요청 파라미터 자체가 전달되지 않음.

 

메소드 반환 유형 설명
getParameter(String name) String 요청 파라미터 이름이 name인 값을 전달
요청 파라미터 값이 없으면 null을 반환
getParameterValues(String name) String[] 모든 요청 파라미터 이름이 name인 값을 배열 형태로 전달
요청 파라미터 값이 없으면 null을 반환
getParameterNames() java.util.Enumeration 모든 요청 파라미터의 이름과 값을 Enumeration 객체 타입으로 전달
getParameterMap() java.util.Map 모든 요청 파라미터의 이름과 값을 Map 객체타입으로 전달
Map 객체 타입은(요청 파라미터 이름,값) 형식으로 구성

 


요청 HTTP 헤더 관련 메소드 

 

  📍 웹 브라우저는 HTTP 헤더에 부가적인 정보를 담아 서버로 전송. request 내장 객체는 헤더 정보나 쿠키 관련 정보를 얻을 수 있는 메소드를 제공

메소드 반환 유형 설명
getHeader(String name) String 설정한 name의 헤더 값을 가져옴
getHeaders(String name) Enumeration 설정한 name의 헤더 목록 값을 가져옴
getHeaderNames() Enumeration 모든 헤더이름을 가져옴
getIntHeader(String name) int 설정한 name의 헤더 값을 정수로 가져옴
getDateHeader(String name) long 설정한 name의 헤더 값을 시간 값으로 가져옴
getCookies() javax.servlet.http.Cookie 모든 쿠키값을 가져옴

 

request 내장 객체로 모든 HTTP 헤더 정보 값 출력하기 

 

   1) 모든 헤더 이름을 가져오도록 request 내장 객체의 getHeaderNames() 메서드를 호출하고,

       이를 모두 저장하도록 Enumeration 객체 타입의 변수 en을 작성.

   2) Enumeration 객체 타입 변수 en의 hasMoreElements() 메서드를 통해 저장된 헤더 이름이 있을 때까지

       반복하도록 while문 작성.   

  3) 현재 헤더 이름을 가져오도록 Enumeration 객체 타입 변수 en의 nextElement() 메서드를 작성.

  4) 설정된 헤더 이름의 값을 가져오도록 request 내장 객체의 getHeader() 메소드를 작성.

        예) user-agent : 사용자의 브라우저 정보.

              referer : 현재페이지로 이동해오기 바로 전 페이지의 주소.

<body>
    <%
      Enumeration<String> en = request.getHeaderNames();
      while (en.hasMoreElements()) {
        String headerName = (String) en.nextElement();
        String headerValue = request.getHeader(headerName);
    %>
    <%=headerName%> : <%=headerValue%><br>
    <%
      }
    %>
</body>

웹 브라우저/서버 관련 메소드 

 

  📍 request 내장 객체는 웹 브라우저의 요청 및 서버 관련 정보를 얻을 수 있는 메소드를 제공

 

메소드 반환유형 설명
getRemoteAddr() String 웹브라우저의 IP 주소를 가져옴
getContentLength( ) long 웹 브라우저의 요청 파라미터 길이를 가져옴
getCharacterEncoding()  String 웹 브라우저의 문자 인코딩을 가져옴
getContentType()  String 웹 브라우저의 콘텐츠 유형을 가져옴
getProtocol() String 웹 브라우저의 요청 프로토콜 을 가져옴
getMethod() String 웹 브라우저의 HTTP 요청 메소드(GET, POST)를 가져 옴
getRequestURI() String 웹 브라우저가 요청한 URI 경로를 가져옴
getContextPath()  String 현재 JSP 페이지의 웹 애플리케이션 콘텍스트 경로를 가져 옴
getServerName()  String 서버 이름을 가져옴
getServerPort() int 실행 중인 서버 포트 번호를 가져옴
getQueryString()
String 웹 브라우저의 전체 요청 파라 미터 문자열[물음표(?) 다음 URL에 할당된 문자열]을 가져 옴

 

request 내장 객체로 모든 웹 브라우저 및 서버 정보 값 출력하기
<body>

    <%-- 웹 브라우저의 IP 주소 반환 --%>
    <p>클라이언트 IP : <%=request.getRemoteAddr()%>
        
    <%-- 웹 브라우저의 요청 정보 길이 반환 --%>
    <p>요청 정보 길이 : <%=request.getContentLength() %>

    <%-- 웹 브라우저의 요청 정보 인코딩 반환 --%>
    <p>요청 정보 인코딩 : <%=request.getCharacterEncoding() %>

    <%-- 웹 브라우저의 요청 정보 콘텐츠 유형 반환 --%>
    <p>요청 정보 콘텐트 유형 : <%=request.getContentType() %>

    <%-- 웹 브라우저의 요청 정보 프로토콜 반환 --%>
    <p>요청 정보 프로토콜 : <%=request.getProtocol() %>

    <%-- 웹 브라우저의 요청 정보 방식 (GET, POST)을 반환 --%>
    <p>요청 정보 전송방식 : <%=request.getMethod() %>

    <%-- 웹 브라우저에 요청한 URI 경로를 반환 --%>
    <p>요청 URI : <%=request.getRequestURI() %>

    <%-- 현재 JSP 페이지의 웹 애플리케이션 콘텍스트 경로를 반환 --%>
    <p>컨텍스트 경로 : <%=request.getContextPath() %>

    <%-- 서버 이름을 반환 --%>
    <p>서버 이름  : <%=request.getServerName() %>

    <%-- 실행 중인 서버 포트 반환 --%>
    <p>서버 포트  : <%=request.getServerPort() %>

    <%-- 웹 브라우저의 전체 요청 파라미터 문자열(쿼리문) 반환 --%>
    <p>쿼리문  : <%=request.getQueryString() %>

</body>

request 내장 객체로 폼 페이지에서 아이디와 비밀번호를 전송받아 출력하기

 

    1) 폼 페이지에서 입력한 한글을 처리하도록 request 내장 객체의 setCharacterEncoding() 메서드에

        문자 인코딩 유형을 utf-8로 작성 

    2) 입력된 아이디와 비밀번호를 폼 문으로부터 전송받도록 request 내장 객체의 getParameter() 메서드를 작성

<body>
    <form action="request01_process.jsp" method="post">
          <p> 아 이 디 : <input type="text" name="id">
          <p> 비밀번호 : <input type="password" name="passwd">
          <p> <input type="submit" value="전송" />
    </form>
</body>
// request01_process.jsp 파일
<body>

    <%
      request.setCharacterEncoding("utf-8");
      String userid = request.getParameter("id");
      String password = request.getParameter("passwd");
    %>
    <p> 아이디 : <%=userid%>
    <p> 비밀번호 : <%=password%>

</body>

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1.  객체

🚀   개발을 하다 보면 정수나 실수 또는 문자열 등 기본적인 자료형으로 표현하기 힘든 것들이 존재
         ➡️  예를 들어 어떤 게시글을 파이썬으로 표현을 한다면 [게시글 번호, 제목, 작성자, 비밀번호, 내용, 최초작성일자, 최종수정일자, 조회수]가 필요한데 이를 손쉽게 관리 하려면 8개의 항목을 하나의 이름을 가진 객체 object로 만들어서 사용

 


2. 클래스

🚀  클래스 class를 한 마디로 정의하면 객체를 만드는 도구
🚀  하나의 클래스를 만들어 두면 그 클래스를 통해서 (동일한 구조를 가진) 여러 개의 객체를 만들수 있다
        ➡️  같은 클래스로 만든 객체라 하더라도 객체들은 서로 다른 값을 가질수 있음
        ➡️  인스턴스 instance 역시 클래스를 이용해서 생성한 객체를 가르키는 용어

 

    💡  객체와 인스턴스의 미묘한 차이
            a. 와플머신 클래스로 만든 와플은 객체 object
            b. 와플은 와플머신 클래스의 인스턴스 instance


1) 클래스의 구성

👾  클래스의 기본 구성
    -  객체를 만들어내는 클래스는 객체가 가져야 할 값과 기능을 가지고 있어야 함
         ▶️  값은 변수, 기능은 함수
    -  클래스를 구성하는 변수는  a. 클래스를 기반으로 생성된 모든 인스턴스들이 공유하는 변수인 '클래스 변수'
                                                    b. 모든 인스턴스들이 개별적으로 가지는 변수인 '인스턴스 변수'로 분리됨
    -  클래스를 구성하는 함수는 메소드 method라고 하고
         a) 클래스 메소드 b) 정적 메소드 c) 인스턴스 메소드로 분리


2) 클래스 정의방법

👾 class 키워드로 클래스를 정의
👾 클래스 이름은 Upper Camel Case 규칙을 따름
👾
파이썬은 변수나 함수의 이름을 네이밍할 때 언더바(_)를 이용해 단어를 연결하는 Snake Case 방식을 사용하지만

     클래스는 Upper Camel Case 규칙을 따름
      ex. print + member : printmember 1) print_member 2) printMember 3) PrintMember

# 클래스는 다음과 같은 형식으로 정의
class 클래스 :
    본문

3. 객체 생성

# 클래스가 정의되었다면 다음과 같은 형식으로 객체를 생성
객체 = 클래스()

# 2개의 객체를 만들고 싶으면
객체1 = 클래스()
객체2 = 클래스()

# 클래스 정의와 객체 생성
class WaffleMachine : # WaffleMachine이라는 클래스 정의
    pass  # 내부코드를 작성하지 않을 때 쓰임

waffle1 = WaffleMachine()  # WaffleMachine 이라는 클래스를 이용해 waffle이라는 객체 생성
waffle2 = WaffleMachine()

print(waffle1)  # <__main__.WaffleMachine object at 0x102beee60>
# 메모리의 0x102beee60번지에 저장된 WaffleMachine의 객체라는 의미
print(waffle2)

4. 인스턴스 변수와 인스턴스 메소드

🚀  인스턴스 변수란 클래스를 기반으로 만들어지는 모든 인스턴스들이 각각 따로 저장하는 변수
      ⚡️ 모든 인스턴스 변수는 self라는 키워드를 앞에 붙여줌
🚀  인스턴스 메소드란 인스턴스 변수를 사용하는 메소드
      ⚡️ 인스턴스 메소드는 반드시 첫 번째 매개변수로 self를 추가해야 함

class Person :  # Person 클래스를 정의
    # 첫 번째 매개변수가 self이므로 인스턴스 메소드
    # 모든 인스턴스는 who_am_i() 메소드를 호출할 수 있음
    # 매개변수 self에는 메서드를 호출하는 인스턴스가 전달
    # self를 제외한 나머지 매개변수에 실제로 사용될 데이터가 전달
    def who_am_i(self, name, age, tel, address):
        # 인스턴스 변수 = 매개변수. 모든 인스턴스 변수는 최초에 값이 대입되는 시점에 알아서 생성.
        self.name = name
        self.age = age
        self.tel = tel
        self.address = address

boy = Person()  # 인스턴스 boy가 생성. 클래스의 생성자가 호출
#print(boy.name)  # 'Person' object has no attribute 'name'
boy.who_am_i('john', 15, '123-1234', 'toronto')  #인스턴스 메소드 호출
print(boy.name)  # john
print(boy.age)  # 15
print(boy.tel)  # 123-1234
print(boy.address)  # toronto

# 클래스에 없는 속성도 추가가 가능함. 다른 언어의 객체와는 다른 방식.
boy.email = 'test@test.com'
print(boy.email)  # test@test.com

 

 


 

5. 생성자  constructor

 

🚀  클래스 이름과 같은 함수를 생성자라고 한다.  

🚀  값을 가진 인스턴스를 생성하기 위해 생성자를 이용
🚀  생성자는 인스턴스를 생성할 때 자동으로 호출되는 특별한 메소드

 

    ⚡️  모든 클래스는 __init__() 이라는 이름을 가진 함수를 가지고 있음
            ➡️  인스턴스가 생성될 때 자동으로 호출되기 때문에 인스턴스 변수의 초기화 용도로 사용

class Candy:
    def __init__(self, shape, color):
        print('실행이 될까?')
        self.shape = shape
        self.color = color

satang = Candy('circle', 'brown')
print(satang.color) 
# 실행이 될까?
# brown

 


 

6. 소멸자  destructor

🚀  인스턴스가 생성될 때 자동으로 호출되는 생성자와 마찬가지로 인스턴스가 소멸될 때 자동으로 호출되는 메소드
🚀  소멸자는 __del__()

class Sample:
    def __del__(self):
        print('인스턴스가 소멸됩니다')

sample = Sample()

del sample  # 인스턴스가 소멸됩니다


# 매직 메서드 샘플
class Sample:
    def __int__(self):
        pass

    def __len__(self):
        return 6

    def __str__(self):
        return 'what?'

li = [1, 2, 3]
print(len(li))  # 3

sample = Sample()
print(len(sample))  # 6
print(sample)  # what?

 

7.  메소드  method

🚀  클래스가 가지고 있는 함수를 말한다.

🚀  파이썬 프로그래밍에서는 멤버 함수(member funcion) 혹은 인스턴스 함수(instance function) 등의 용어를 더 많이 사용함

class 클래스 이름:
    def 메소드 이름(self, 추가적인 매개변수):
        pass

 

 

 

 

[ 내용 참고 : IT 학원 강의 및 책 '혼자 공부하는 파이썬' ]

+ Recent posts