▶ 바인딩
: 서블릿에서 다른 서블릿 또는 JSP로 대량의 데이터를 공유하거나 전달하고 싶을 때 사용
˙서블릿 객체에서 사용되는 바인딩 관련 메서드
setAttribute(String name, Object obj) : 자원(데이터)를 각 객체에 바인딩 합니다.
getAttribute(String name) 각 객체에 바인딩된 자원(데이터)를 name으로 가져옵니다.
removeAttribute(String name) 각 객체에 바인딩 된 자원(데이터)을 name으로 제거합니다.
▶ HttpServletRequest를 이용한 redirect 포워딩 시 바인딩
① FirstServlet.java 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package sec04.ex01;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FristServlet
*/
@WebServlet("/first")
public class FristServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setAttribute("address", "서울시 성북구");
response.sendRedirect("second");
}
}
|
cs |
② SecondServlet.java 생성
http://colorscripter.com/s/g4txVE0
③ http://localhost:70/proc2/first 으로 실행
주소가 null 이 나오는 이유는 redirect 방식의 포워드 과정 때문입니다.
포워딩 과정 1단계인 웹 브라우저에서 요청할 때 서블릿에 전달되는 첫 번째 request는 웹 브라우저를 통해
재요청되는 3단계의 두번째 request와 다른 요청입니다.
즉 redirect 방식으로는 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 없습니다.
▶ HttpServletRequest를 이용한 dispatch 포워딩 시 바인딩
① FirstServlet2.java 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package sec04.ex02;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FirstServlet2
*/
@WebServlet("/first2")
public class FirstServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setAttribute("address", "서울시 성북구");
RequestDispatcher dispatch = request.getRequestDispatcher("second2");
dispatch.forward(request, response);
}
}
|
cs |
②SecondServlet2.java 생성
http://colorscripter.com/s/x91Sb73
③ http://localhost:70/proc2/first2 으로 실행
첫번째 서블릿에서 두번째 서블릿으로 전달되는 request가 브라우저를 거치지 않고 바로 전달
따라서 첫번째 서블릿의 request에 바인딩 된 데이터가 그대로 전달됨
'코딩 기록 > JSP' 카테고리의 다른 글
[JSP] ServletConfig - 애너테이션을 이용한 서블릿 초기화 기능 (0) | 2021.05.07 |
---|---|
[JSP] ServletContext(매개변수 설정, 파일 입출력) (0) | 2021.05.07 |
[JSP] 커넥션풀(Connection Pool) 데이터베이스 연동하기 (0) | 2021.05.06 |
[JSP] 서블릿에 로그인 요청 시 유효성 검사 ( + 관리자 판단 ) (0) | 2021.05.04 |
[JSP] 로그인 데이터 전송 (GET / POST 동시 처리) (0) | 2021.05.04 |