Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
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
Tags more
Archives
Today
Total
관리 메뉴

개발공부 일지

학원수업_47day [JSP,Servlet(14day) - githeb / 로그인, 로그아웃 ] 본문

학원수업/Web(HMTL,CSS,JSP,Servlet)

학원수업_47day [JSP,Servlet(14day) - githeb / 로그인, 로그아웃 ]

짜몽- 2022. 10. 7. 15:59

* 복습 *

MVC 패턴의 이해 

- MVC 란 ( Model Veiw Controller) 를 뜻하는 용어로, 개발 형태의 일종이다.

Model 은 데이터베이스와의 관계를 담당하고, 클라이언트의 요청에서 필요한 자료를 데이터베이스로부터 추출, 수정하여

Controller 로 전달한다.

View 는 사용자에게 보여지는 UI 화면이고, 주로 jsp를 통해 작성한다.

Controller 에서 어떤 View를 보여줄지 결정한다.

Controller는 클라이언트의 요청을 받고  Model 에 지시를 내리고 Model 에서 전달된 데이터를 View에 전달 한다.


* GitHub *


※ 이 밑 내용들은 내가 헷갈려서 넣은 내용

 

* MVC 패턴을 쓸 때  사용자로부터 전달되는 값*


Query String : URL로 전달되는 문자열 

Post : 사용자의 입력으로 전달되는 문자열

Path : 경로로 전달되는 문자열

Cookie : 브라우저에 보관하고 있던 문자열

Header : 요청 헤더로 전달되는 문자열

 

받은 요청을 자신이 처리하지 않고 다른 클래스에 위임 하는 것을 포워드라 하고 그러한 행위를 포워딩이라고 한다. 

JSP 에서 주로 사용하는 포워딩 객체는 두 가지 가 있는데,

 

1. RequestDispatcher 클래스

- 요청 받은 요청객체를 위임하는 컴포넌트에 동일하게 전달 할 수 있다. 즉, 요청받은 request 객체를 새로 생성하거나 변경하지 않고 그대로 위임받을 컴포넌트로 보낼 수 있다.- RequestDispatcher dis = request/getRequestDispatcher("~~"); 이후 dis.forward(request.response) 의 형태로 사용
→ 즉 원래 요청을 하는 페이지로 다시 가서 그 요청을 받아와서 가져감

 

2. HtttpServletResponse 클래스

- 이 클래스는 요청받은 요청객체를 위임 받은 컴포넌트에 전달하는 RequestDispatcher과 다르게 새로운 요청객체를 생성한다.즉, 요청을 받은 객체에서 설정값을 변경하여도 반영되지 않는다. 왜일까? 새로운 객채로 위임받은 컴포넌트로 전달되기 때문이다.- HttpServletResponse를 받고 있는 내장객체 Response 를 통해 Response.sendRedirect를 통해 보내면, 각각의 값을 보내지만받아오는 쪽에서는 동일한 객체가 아니기에 값이 존재하지 않는다. 

 


포워딩 이란 ?

서블릿 프로그래밍 시 서블릿끼리, 혹은 서블릿과 JSP 사이에 정보를 공유하거나 정보를 전달하는 등의 연동 작업이 필요할 때 사용하는 기능이다. 한마디로 포워딩이 없다면, 서로 다른 서블릿이나 JSP는 정보 교환이나 요청 전달 등의 연동 작업이 불가하다. 따라서 프로그래밍 시 포워딩은 필수적이며 핵심적인 기능이라 할 수 있다.

 

* 포워딩 방법

1. 웹 브라우저를 거쳐 전송되는 방법

1) redirect

// response 객체의 sendRedirect 메서드 이용
response.sendRedirect("요청할 서블릿 매핑주소 혹은 JSP?전송할 데이터의 이름=값"); // GET방식으로 데이터 전달 가능

2) Refresh

// response 객체의 addHeaher 메서드 이용
response.addHeader("Refresh", "경과시간(초);url=요청할 서블릿 매핑 주소 혹은 JSP?전송할 데이터의 이름=값")

3) location

// 자바스크립트 location 객체의 href 속성 이용
PrintWriter out = response.getWriter();
out.print("<script type='text/javascript'>");
out.print("location.href='요청할 서블릿 매핑 주소 혹은 JSP?전송할 데이터의 이름=값';");
out.print("</script>");

 

2. 웹 브라우저를 거치지 않고 바로 전송되는 방법

1) dispatch

웹 브라우저를 거치는 위의 방법들과 달리 클라이언트에서 포워딩이 되었는지 알 수 없다.

// RequestDispatcher 클래스의 forward() 메서드 이용
RequestDispatcher dispatch = request.getRequestDispatcher("요청할 서블릿 매핑 주소 혹은 JSP?전송할 데이터의 이름=값");
dispatch.forward(request, response);

* 바인딩 이란?

포워딩을 통해서도 서블릿 간, JSP까지 정보 전달이 가능하지만 이는 전달하는 데이터 양이 많아질 경우 편리한 방법이 아니다. 따라서 대량의 데이터를 공유하거나 전달할 때에는 포워딩이 아닌 바인딩 기능을 사용한다. 바인딩의 뜻은 "두 개를 하나로 묶는다"는 것이다. 바인딩은 웹 프로그램이 실행되었을 때 데이터를 서블릿 관련 객체에 저장한 후 이를 다른 서블릿이나 JSP에서 공유하는 방식으로 이루어진다. 바인딩 기능을 수행할 때 주로 쓰이는 서블릿 관련 객체로는 HttpServletRequest, HttpSession, ServletContext가 있다.

 

특히 주의할 점은 바인딩 기능은 객체에 데이터를 저장한 후 다른 서블릿이나 JSP로 전송할 때에 포워딩 기능이 필요하게 되는데, 이 때 포워딩 방법 중에서도 dispatch만 바인딩 기능을 사용할 수 있다는 것이다. 이유인 즉슨, 웹 브라우저를 거쳐서 전달되는 다른 포워딩 방법들은 처음 요청 시에 받은 객체와, 다시 웹 브라우저를 거쳐 요청하는 객체가 서로 다른 객체이기 때문이다. 쉽게 말하면 웹 브라우저를 거치기 때문에 객체가 다른 객체가 되어 돌아온다고 할 수 있다. 

 

dispatch를 이용한 포워딩 + 바인딩의 예시는 다음과 같다.

// 보내는 쪽
request.setAttribute("바인딩할 데이터 이름", "바인딩할 데이터 값");
RequestDispatcher dispatch = request.getRequestDispatcher("요청할 서블릿 매핑 주소 혹은 JSP");
dispatch.forward(request, response);
// 받는 쪽
데이터타입 변수명 = request.getAttribute("바인딩한 데이터 이름");

* 바인딩의 범위

1) ServletContext

ServletContext 클래스는 톰캣 컨테이너가 실행되면 각 컨텍스트(웹 애플리케이션)마다 한 개씩 ServletContext 객체를 생성한다. 그리고 톰캣 컨테이너가 종료되면 이들도 소멸된다. 따라서 웹 애플리케이션 전체에서 공유하려는 데이터는 ServletContext 객체에 저장하여 이용한다.

 

2) ServletConfig

ServletConfig 클래스는 ServletContext와 달리 각 서블릿에 대해서 ServletConfig 객체를 생성한다. 따라서 웹 애플리케이션 전체에서 공유가 불가하며, 각 서블릿 내에서만 데이터를 저장하고 이용할 수 있다(ServletContext에 비해 그 범위가 좁다).


* Login, Logout 브라우저에 기능 구현하기