/** * Servlet implementation class SearchMemberByIdServlet */ public class SearchMemberByIdServlet extends HttpServlet { private static final long serialVersionUID = 1L;
/** * Servlet implementation class ErrorPronServlet */ public class ErrorPronServlet extends HttpServlet { private static final long serialVersionUID = 1L;
/** * Servlet implementation class ErrorPronServlet */ public class ErrorPronServlet extends HttpServlet { private static final long serialVersionUID = 1L;
- 요청 디스패치(Request Dispatch)방식 - Request(요청)이 살아있는 상태에서 수행을 이동시킨다. - Request Scope를 이용해 데이터(Attribute)를 공유할 수 있다. - RequestDispatcher 객체를 이용해 처리 - 구문 RequestDipatcher rdp = request.getRequestDispatcher("url"); rdp.forward(request, response);
* 값을 공유하되 request scope를 통해 값을 공유해야 할때 요청디스패치 방식을 쓴다.
- 리다이렉트(Redirect)방식 - 응답시 클라이언트에게 요첨할 url을 알려 주어 다시 요청하도록 하는 방식 - 요청과 응답이 한번 더 일어난다. - Request Scope를 이용한 데이터(Attribute) 공유를 할 수 없다. - HttpServletResponse 객체를 이용해 처리 - 구문 response.sendRedirect("url");
* attribute값이 응답하고 나면 필요 없는 데이터라면 request scope를 사용하는 것이 맞다. (request scope는 응답하고 나면 attribute를 자동으로 remove해준다, application scope로 해도 되지만 범위가 좁은 것을 쓰는 것이 좋다.)
request scope : 응답하고 나면 필요 없는 것 데이터
session scope : 응답하고 나면 개인적인 데이터에 저장해 두고 개인만 사용할 것이다.
* 서블릿에서 서블릿이나 jsp로 값을 넘기는 방법
1. 리다이렉트 : 요청과 응답이 두 번 일어 난다. (A로 요청을 하면 A가 응답을 하고 B로 요청을 하면 B가 응답을 한다.)
2. 요청디스패치 : 클라이언트가 요청을 A로 하면 A내부적으로 응답을 B로 넘기고 B가 응답을 한다.(client는 A에게 요청을 했더니 답이 오는 꼴이다.)
/** * Servlet implementation class SaveReqMemberServlet */ public class SaveReqMemberServlet extends HttpServlet { private static final long serialVersionUID = 1L; public SaveReqMemberServlet() {
String id = request.getParameter("id"); String name = request.getParameter("name"); int age = 0; //숫자를 변환 시켜줄때는 반드시 try{}catch{}로 예외처리 해줘라 try{ age=Integer.parseInt(request.getParameter("age")); }catch(NumberFormatException e){} String sex = request.getParameter("sex");
MemberDTO memberDTO = new MemberDTO(id, name, age, sex);
- Attribute란 - Web Application 구성 컴포넌트들(Servlet, JSP, Listener)이 공유하는 객체 - Scope - Attribute들을 공유하기 위한 공유 장소의 영역.(저장 장소) - 공유 범위에 따라 3가지 영역이 있다. 1. request scope : HttpServletRequest 이용 - 요청 ~ 응답까지 공유 2. session scope : HttpSession 이용 - 한명의 클라이언트(웹브라우저)가 로그인 ~ 로그아웃 3. application scope : ServletContext이용 - Application 시작 ~ 종료까지 공유
* 접근범위 : 1->2->3 번순으로 접근 범위가 넓다.
- 관련 메소드 - Attribute는 key - value 쌍으로 관리된다. * serAttribute(String key, Object value) : 공유영역에 Attribute 저장 * getAttribute(String key) : Object value : 저장된 Attibute 조회 * getAttributeNames() : Enumeration : Attribute들에 연결된 name들 조회
* Attribute 개요
* client 10 request 50 번이라 하면
request scope의 저장장소는 500개 생기고, session scope의 저장장소는 10개 생기고, application scope의 저장장소는 1개 생긴다.
request는 호출할때 마다 저장 장소가 생겼다가 사용이 끝나면 자동으로 사라진다. session scope는 한 클라이언트당 1개의 저장장소를 따로 갖는다(각 클라이언트마다 각각의 저장장소를 통해 데이터를 관리, 다른 클라이언트에서 접근 불가). application은 동시에 1개의 저장장소에 접근할 수 있다.