[JSP] 내장 객체

이지현·2021년 12월 27일
0
post-thumbnail

💻 1. 내장 객체

  • 1-1 내장 객체란?

    💡 기본적인 요청과 응답, 화면 출력, 세션, 페이지와 애플리케이션 등 모든 웹 프로그래밍에 있어 필수적인 기능

  • 1-2 내장 객체 특징

    💡 내장 객체는 jsp 페이지가 실행될 때 컨테이너가 자동으로 생성해준다. 별도로 선언하거나 객체로 생성하지 않아도 즉시 사용할 수 있는데 그 이유는 jsp의 실행 과정에서 찾을 수 있다. jsp는 실행될 때 자바 파일인 서블릿으로 변환되어 컴파일된다. 이 변환 과정에서 _jspService()메서드가 생성이 되고 이 메서드안에 관련 코드가 삽입이된다.

    내장 객체의 참조 변수를 컨테이너가 생성하는 부분이다.

    • 컨테이너가 미리 선언해놓은 참조 변수를 이용해 사용한다.
    • 별도의 객체 생성 없이 각 내장 객체의 메서드를 사용할 수 있다.
    • JSP문서 안의 <% 스크립틀릿 %> 과 <%= 표현식 %> 에서만 사용할 수 있다.
    • <%! 선언부 %> 에서는 즉시 사용하는 건 불가능하고, 매개변수로 전달받아 사용할 수는 있다.
  • 1-3 내장 객체의 종류

    내장 객채타입설명
    requestHttpServletRequest클라이언트의 요청 정보를 저장한다.
    responseHttpServletResponse클라이언트의 요청에 대한 응답 정보를 저장한다.
    outJspWriterJSP페이지에 출력할 내용을 담는 출력 스트립이다.
    sessionHttpSession웹 브라우저 정보를 유지하기 위한 세션 정보를 저장합니다.
    applicationServletContext웹 애플리케이션 관련 컨텍스트 정보를 저장합니다.
    pageContextPageContextJSP 페이지에 대한 정보를 저장합니다.
    pageObjectJSP 페이지를 구현한 자바 클래스의 인스턴스입니다.
    configServletConfigJSP 페이지에 대한 설정 정보를 저장합니다.
    exceptionThrowable예외가 발생한 경우에 사용합니다.

💻2. request객체

  • 2-1 request 객체란?

    💡 클라이언트(웹 브라우저)가 전송한 요청 정보를 담고 있는 객체이다.

  • 2-2 request 주요 기능

    1. 클라이언트와 서버에 대한 정보 읽기
    2. 클라이언트가 전송한 요청 매개변수에 대한 정보 읽기
    3. 요청 헤더 및 쿠키 정보 읽기
  • 2-3 (1). 클라이언트와 서버에 대한 정보 읽기 예제

    💡 클라이언트는 웹 브라우저를 통해 서버 측으로 요청을 하게 됩니다.
    이때 요청은 "GET" 방식 혹은 "POST" 방식으로 구분되고,
    "URL / 포트번호 / 쿼리스트링 등" 을 명시할 수 있습니다.

📌 현재 이 코드는 클라이언트의 요청을 전송하기 위한 페이지로 html로만 이루어져 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
	<title>내장 객체- request</title>
</head>
<body>
	<h2> 1. 클라이언트와 서버의 환경정보 읽기</h2>
        <a href="./RequestWebInfo.jsp?eng=Hell&han=안녕">
    	   GET 방식 전송
        </a>----------📌 get방식으로 요청 (?뒤 파라미터값을 지정)
        <br />
        
        <form action="RequestWebInfo.jsp" method="post"> 
        	영어 : <input type="text" name="eng" value="Bye">
            	한글 : <input type="text" name="han" value="잘 가"><br>
                <input type="submit" value="POST 방식 전송">
        </form>----------📌 post방식으로 요청 
        
        
        
        <h2> 2. 클라이언트의 요청 매개변수 읽기</h2>
        <form method="post" action="RequestParameter.jsp">
        	아이디 : <input type="text" name="id" value=""><br>
            
            	성별 : 
            	<input type="radio" name="sex" value="man">남자
                <input type="radio" name="sex" value="woman" checked="checked">여자<br>
                
                관심사항 :
                <input type="checkbox" name="favo" value="eco">경제
                <input type="checkbox" name="favo" value="pol" checked="checked">정치<br>
                
                <input type="submit" value="전송하기">
        </form>----------📌 다양한 input태그 사용
        
        
        
        <h2> 3. HTTP 요청 헤더 정보 읽기</h2>
        <a href="RequestHeader.jsp">
        	요청 헤더 정보 읽기
        </a>----------📌 HTTP 요청 헤더 읽기
</body>
</html>
  1. 클라이언트와 서버의 환경정보 읽기
    → get 방식으로 요청을했기 때문에 클릭시 브라우저 url 뒷 부분에 ? input박스에 입력한 값이 담겨져 보이게됩니다.
  2. 클라이언트의 요청 매개변수 읽기
    → post 방식으로 요청을 했기 때문에 클릭시 브라우저 url에 노출이 되지않습니다.
  • 2-4 " (2). 클라이언트의 요청 매개변수 읽기" 에 대한 예제

    💡 주로 값이 하나만 전송되는 [type: text, radio, password] 경우 getParameter("name값")메서드를 이용하여 변수에 값을 저장할 수있습니다.[checkbox 경우 값이 하나일 경우는 가능]
    💡 checkbox 는 보통 다수 선택을 하기 떄문에 getParameterValues("name값")메서드를 이용하여 String배열에 저장을할 수있습니다.

  • 2-5 " (2). RequestParameter.jsp 변수에 반환값 저장 "

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
	<title>내장 객체- request</title>
</head>
<body>
	<%
    	String id = request.getParameter("id");
        ----📌 반환된 아이디값을 id변수에 대입한다.
        String sex = request.getParameter("sex");
        ----📌 반환된 성별값을 sex변수에 대입한다.
        String[] favo = request.getParmeterValues("favo"); 
        ----📌 반환된 관심사항값을 favo 배열변수에 대입한다.
        
        if(favo != null)
        {
        	String favoStr = "";
            for(int i=1; i<favo.length; i++)
            {
            	favoStr =+ favo[i] + " ";
            }
            return favoStr;
        }
        ----📌 반환된 관심사항값을 favo 배열변수에 대입한다.
        ----📌 대입된 favo배열을 일렬로 나열하기 위해 for문을 이용하여 favoStr변수에 대입한다.
    %>
    
    <ul>
    	<li>아이디 : <%= id %></li>
        <li>성별 : <%= sex %></li>
        <li>관심사항 : <%= favoStr %></li>
    </ul>
</body>
</html>

💻3. Response 객체

  • 3-1 Response 객체란?

    💡 클라이언트 요청에 대한 응답을 웹브라우저로 보내주는 역할을 한다.

  • 3-2 Response 주요기능

    1. 페이지 이동을 위한 리다이렉트 기능
    2. HTTP 헤더에 응답 헤더 추가 기능
      (그 외 기능도 있지만 JSP에서는 거의 사용하지 않는다.)
  • 3-3 Response-sendRedirect()

    💡 페이지 이동을 위한 리다이렉트 기능이다.

    • 페이지를 이동하기 위해 HTML은 <"a href"> 태그를 사용하고 ,
    • 자바스크립트에서는 location.href 객체를 사용하고,
    • JSP에서는 Response객체의 sendRedirect() 메서드를 이용한다.
  • 3-4 sendRedirect() 메서드를 이용한 로그인폼 예제

📌 ResponseMain.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
	<title>내장객체 - response</title>
<head>
<body>
	<h2>1. 로그인 폼</h2>
    <% String loginErr = request.getParameter("loginErr")
    if(loginErr != null)
    {
    	out.print("로그인 실패");
    }
    %>
    <form action="./ResponseLogin.jsp" method="post"> 
    // 📌로그인버튼 클릭시 ResponseLogin.jsp로 이동한다.
    
    	아이디 : <input type="text" name="user_id"><br>
        패스워드 : <input type="password" name="user_pwd"><br>
        <input type="submit" value="로그인">
    </form>
    
   
   	<h2>2. HTTP 응답 헤더 설정하기</h2>
    <form action="./ResponseHeader.jsp" method="get">
    	날짜 형식 : <input type="text" name="add_date" value="2021-10-25"><br>
        숫자 형식 : <input type="text" name="add_int" value="8282"><br>
        문자 형식 : <input type="text" name="add_str" value="홍길동"><br>
        <input type="submit" value="응답 헤더 설정 & 출력">
    </form>
</body>
</html>

📌 ResponseLogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
	<title><내장 객체 - REsponse</title>
</head>
<body>
    <%
    	String id = request.getParameter("user_id");
        String pwd = request.getParmeter("user_pwd");
        
        if(id.equalsIgnoreCase("must") && pwd.equalsIgnoreCase("1234"))
        {
        	response.sendRedirect("ResponseWelcome.jsp");
        //📌 요청하여 저장된 id,pwd값이 설정해 놓은must와 1234이 맞다면 ResponseWelcome.jsp로 이동한다.
        }
        else
        {
        	request.getRequestDispatcher("ResponseMain.jsp?loginErr=1")
            	.forward(request, response)
        //📌 id, pwd값이 일치하지 않다면 요청값(request)과 응답값(response)을 저장하여 
        //   ResponseMain.jsp?loginErr=1 경로로 이동을 하고 이 페이지에서 처리를 할 수 있도록 한다.
        }
    %>
</body>
</html>

💡 getRequestDispatcher 와 sendRedirect의 차이점은?

📌 공통점 : 페이지 이동 기능

📌 차이점

  • getRequestDispatcher : before.jsp에서 서블릿을 통해 after.jsp로 이동할 때 서블릿에서 처리한 데이터를 가지고 이동한다.
  • sendRedirect : 데이터를 가지고 가지 않고 페이지 이동만 한다.

📌 로그인성공 페이지 ResponseWelcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
	<title>내장 객체 - response</title>
</head>
<body>
	<h2>로그인 성공</h2>
</body>
</html>

💻 4. out 객체

  • 4-1 out 객체란?

    💡 웹 브라우저에 변수 등의 값을 출력할 때 사용한다.

    JSP 를 사용하면서 out 객체보다는 표현식<%= %> 을 더 많이 쓴다.

    하지만 스크립틀릿 내에서 변수를 웹 브라우저에 출력하려면 표현식 보다는 out 내장 객체를 사용하는게 더 좋다.

  • 4-2 out 객체 활용하는 예제

<<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
<head>
	<title>내장 객체 - out</title>
</head>
<body>
    <%
    	// 버퍼 내용 삭제하기
        out.print("출력되지 않는 텍스트");	// 버퍼에 저장
        out.clearBuffer();	// 버퍼를 비움(윗 줄의 출력 결과 사라짐)
        ↳ 📌 위에서 out.print로 출력했으나 clearBuffer()메서드로인해 버퍼 안의 내용을 지워서 
  	     위 문자열이 출력되지 않은 것
        
        out.print("<h2>out 내장 객체</h2>");
        
        // 버퍼 크기 정보 확인
        out.print("출력 버퍼의 크기 : " + out.getBufferSize() + "<br>");
        out.print("남은 버퍼의 크기 : " + out.getRemaining() + "<br>");
        
        // 버퍼 내용 출력
        out.flush();
        out.print("flush 후 버퍼의 크기 : " + out.getRemaining() + "<br>");
        
        // 다양한 타입의 값 출력
        out.print(1);
        out.print(false);
        out.print('가');
    %>
<body>
</html>

💻 5. application 객체

  • 5-1 application 객체란?

    💡 웹 애플리케이션당 하나만 생성되고, 모든 JSP 페이지에서 접근할 수 있습니다.

    • application객체는 ServletContext 타입입니다.
    • 주로 웹 애플리케이션 전반에서 이용하는 정보를 저장 하거나
      서버의 정보, 서버의 물리적 정보 등을 얻어오는데 사용합니다.

    💡 ServletContext 란?

    • 하나의 서블릿이 서블릿 컨테이너와 통신하기 위해 사용되는 메서드들을 가지고있는 클래스이다.
    • 즉, 웹 애플리케이션의 등록 정보라고 볼 수 있다.
  • 5-2 web.xml에 설정한 컨텍스트 , 초기화 매개변수 읽기, 폴더의 물리적 경로를 알아내는 예시

    💡 web.xml이란?

    • 웹 애플리케이션에 대한 여러 가지 설정을 저장하는 곳이다.

    💡 물리적 경로란?

    • 특정 파일이나 폴더의 전체 경로(절대 경로)를 말하며, 파일을 업로드하거나 입출력 작업시에 사용한다.

    💡 웹 애플리케이션이란?

    • 별도의 응용 소프트웨어(애플리케이션)를 설치하지 않아도 웹 브라우저를 통해 응용 소프트웨어의 기능을 이용할 수 있도록 만든 웹 서비스가 웹 애플리케이션이다.
  • 5-3 web.xml에 초기화 매개변수 추가하기

<?xml version="1.0" encoding="UF-8"?>
  <web-app xmlns:xsi= ....생략>
  	<display-name>MusHaveJSP</display-name>  
    <welcome-file-list>
    .... 생략
    </welcome-file-list>
  
  <context-param>
    	<param-name>INIT_PARAM</param-name>
    	<param-value>web.xml에 저장한 초기화 매개변수</param-value>
  </context-param>
  </web-app>
  

<"context-param"> 태그를 만들고 , 그 안에 초기화 매개변수의 이름과, 값을 입력하면 된다.


💻 6. exception 객체

  • 6-1 excetption 내장 객체란?

    💡 errorPage, isErrorPage 속성 관련하여 오류페이지를 처리했습니다.
    이번에는 exception 객체를 이용하여 요류페이지를 처리해보겠습니다.

    JSP로 프로그래밍을 하다 보면 404, 405, 500번 대 에러페이지가 발생 하는 경우가 있습니다.

    위 코드 만으로 대략 에러 의미를 알 수 있는데 아래에서 에러 의미와 조치방법에 대하여 알아보겠습니다.

  • 6-2 HTTP 에러 코드

    HTTP 에러 코드에러 의미조치 방법
    404Not Found : 클라이언트가 요청한 경로에서 문서를 찾을 수 없습니다.URL상의 경로명이나 파일명이 제대로 입력되었는지 확인합니다.
    405Method Not Allowed : 혀용되지 않는 메서드라는 뜻으로, GET 방식 혹은 POST 방식으로 요청했는데 이를 처리할 컨트롤러가 없습니다.주로 서블릿으로 개발할 때 발생하게 되는데 doGet(), doPost() 메서드가 적절히 오버라이딩 되었는지 확이합니다.
    500Internal Server Error : 서버 내부 오류로, 코드에 오타가 있거나 로직에 문제가 있어 웹 서버가 요청 사항을 수행할 수 없습니다.가장 많이 발생하는 에러로, 개발 중인 코드를 전반적으로 확인하여 오류룰 처리해야 합니다.

💬 요약

  • request 객체 : 클라이언트의 요청을 받거나 웹 브라우저에 대한 정보 혹은 요청 헤어데 대한 정보를 읽을 때 사용한다.

  • response 객체 : 요청에 대한 응답을 웹 브라우저로 보낼 때 사용한다. 페이지 이동이나 응답 헤더를 추가할 때도 사용한다.

  • out 객체 : 변수 등의 값을 웹 브라우저에 출력할 때 주로 사용한다.

  • exception 객체 : 예외 처리를 위해 사용한다.

profile
개발 공부 중인 지현이

0개의 댓글