Daily coding

JSP : 대표적인 내장객체 - request, response, session 본문

Front-end/비동기통신

JSP : 대표적인 내장객체 - request, response, session

sunnnkim 2020. 1. 20. 20:39


내장객체

: 동적 할당하지 않고 바로 사용할수 있는 Object


- request : 가장 많이 사용, getParameter, setAttribute, getAttribute 등 접근 가능
- response : sendRedirect, 
- out
- session .. 등


1. response


: getParameter - 무조건 String값만 받음

<%
	// 이전 페이지로부터 데이터 받아오기
    String name = request.getParameter("name"); 	
    System.out.println("name = " + name );	// 출력

    String age = request.getParameter("age");
    System.out.println("age = " + age );	//출력


    // 데이터가 여러개 넘어올 때
    String hobby[] = request.getParameterValues("hobby");
    if( hobby != null && hobby.length > 0) {
        for(int i=0; i<hobby.length; i++){
            System.out.println("hobby = " + hobby[i]);
        }
    }
    
    
// 넘어올 때의 방식 : <input type="text">	: html
//			    <a href=''> : html
//				<form action=''> : html
//				location.href	: javascript
//			submit() : jquery



%>

* 넘어올 때의 방식 ?

1) html : input, a href, form(action)

2) javascript : location.href

3) JQuery : submit()

 

 

2. response

1) sendRedirect

<%

 
	// sendRedirect : 특정 파일 / url 등으로 이동
	// 데이터 가지고 이동할 수 있다.
	response.sendRedirect("NewFile.jsp");
	
	
	// 한글일때는 인코딩 방식 설정하기
	request.setCharacterEncoding("utf-8");
	
    // URLEncoder 까지 해주어야 정상적으로 한글 인코딩이 적용됨
	String name = "홍길동";
	name = URLEncoder.encode(name);
	
	
	response.sendRedirect("NewFile.jsp?name="+name);
    
%>

 : 페이지 이동시 사용(단순이동)

- sendRedirect -> HttpServletResponse 소속

- 데이터를 가지고 이동할 수 있으나, 한글은 인코딩 방식을 설정해주어야 한다. ( 보내는 페이지에서 설정 )

ex > request.setCharacterEncoding("utf-8");
       // URLEncoder 까지 해주어야 정상적으로 한글 인코딩이 적용됨
       String name = "홍길동";
       name = URLEncoder.encode(name);

       response.sendRedirect("NewFile.jsp?name="+name);

 

2) forward 방식 : pageContext

<%
	// forward 방식

    String name = "일지매";
    request.setAttribute("name", name);

    // pageContext (내장객체) : forward사용할 때의 내장객체 
    // 자바에서는 Dispatcher로 접근했었음
    pageContext.forward("NewFile.jsp"); // 짐 보내기


%>

: Servlet에서는 HttpDispatcher의 객체를 이용해 forward를 사용했으나

  jsp 에서는 내장객체 인 pageContext를 이용한다.

 

- request의 setAttribute를 통해 보낼 데이터를 넣는다. (servlet과 동일)

- pageContext.forward를 통해 이동할 링크를 입력한다.

- 보내는 데이터는 int나 String 등의 변수 하나도 가능하지만

  class 형식으로 된 Object도 보낼 수 있다.

 

** 데이터를 forward로 보낼 때 모두 Object타입으로 보내기 때문에

   받을 때는 형변환하여 사용해야 한다.

<%
	// 여기는 데이터를 받는 곳의 코드
	Object obj = request.getAttribute("human");
	Human human = (Human)obj;

%>

 

3. session 

<%
      // session으로 짐 싸고 sendRequest로 데이터 보내기 
      int num = 2;
      String name = "정수동";

      Human human = new Human(num, name);

      // request.setAttribute("hman", human);
      // response.sendRedirect("NewFile2.jsp");
      // 위의 코드는 불가능
      // sendRedirect로 데이터 여러개 보내려면 
      // Object형식이 아닌 링크주소에 데이터를 다 붙여줘야함


      // session을 사용하면 객체 데이터 가지고 이동할 수 있음
      session.setAttribute("hman", human);
      response.sendRedirect("NewFile2.jsp");

%>

: sendRequest는 일반적으로 Object데이터는 보낼 수 없으나

 내장 객체인 session을 이용하면 데이터를 보낼 수 있다.

 

 

< session으로 받은 데이터 보기 >

<%
	// 데이터를 받은 곳의 코드
	Human human = (Human)session.getAttribute("hman");

	// session 삭제하기
    // session이 무거우면 느려질 수 있으므로 사용 후 지운다
	session.removeAttribute("hman");

%>