*** 회원관리

- 주요 기능
1. Connection Pool
2. request, session 객체 공유 설정 (로그인~로그아웃 동안 세션 영역)
3. Controller 클래스 : Java Servlet
4. Model = Service + DAO
    Service, DTO, DAO 클래스
5. View ( 화면 인터페이스 ) : EL , JSTL 사용



* Controller - MemberController

Servlet --> @WebServlet("*.do") 
: do 확장자로 들어오는 모든 요청을 받겠다는 의미 (이름을 하나하나 지정하는 것보다 패턴 지정하는게 효율적)


doGet, doPost 양쪽에 doProcess(request, response); 넣어서 doProcess로 값을 넘겨줌

 doProcess(): doGet(), doPost() 메소드에서 공통적인 작업을 처리하는 메소드
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }

request객체의 메소드를 사용해
String requestURI = request.getRequestURI();    // 요청 uri를 구함     /model2member/MemberInsert.do
String contextPath= request.getContextPath();    // 컨텍스트패스(project명)를 구함 /model2member
String command = requestURI.substring(contextPath.length()); // 요청명만 빼냄 /MemberInsert.do

Action action=null;
ActionForward forward=null;

if(command.equals("/MemberInsert.do")) {       //요청명이 같은 경우 해당 요청에 대한 처리를 함
   try {
      action = new MemberInsert();   //MemberInsert 클래스에 대한 Action 객체 생성(업캐스팅)
      forward = action.execute(request, response);   //execute-> 메소드 실행 후 forward를 리턴받음

   }catch(Exception e) {
      e.printStackTrace();
   }
} else if(command.......    //다른 요청명 처리

//action에서 포워딩 처리가 됐다면 해당 방식대로 처리 (값을 공유하는 방식을 처리)
if(forward!=null) {
   if(forward.isRedirect()) {           //true=redirect 방식
      response.sendRedirect(forward.getPath());
   } else {                                //false=dispatcher 방식
      RequestDispatcher dispatcher=request.getRequestDispatcher(forward.getPath());
      dispatcher.forward(request, response);
   }
}


* Service

Action 인터페이스 : execute() 추상메소드를 오버라이딩해서 통일성 있게 구현하도록 함
ActionForward 클래스 -> 포워딩 방식, 포워딩 페이지명 설정
   private boolean redirect; //포워딩 방식 (디스패치드, 리다이렉트) 설정
   private String path; //포워딩 페이지명 설정
 ---> 각 setter, getter 생성.
(포워딩: 서블릿 프로그래밍 시 서블릿끼리, 혹은 서블릿과 JSP 사이에 정보를 공유하거나 정보를 전달하는 등의 연동 작업이 필요할 때 사용하는 기능)


service 클래스 : 각 jsp파일에 대응되는 java 클래스 파일 --- 받은 값을 DAO로 넘겨주고 포워딩 방식 지정해 ActionForward로 넘겨주는 중간다리 역할


+ memberinsert


memberform.jsp : <form method="post" action="<%=request.getContextPath() %>/MemberInsert.do">
↓ 
MemberController.java : action = new MemberInsert();  forward = action.execute(request, response);

MemberInsert.java -> DAO -> ActionForward forward=new ActionForward(); 리턴
↓ 
MemberController.java : if(forward.isRedirect()) {}else {} 
↓ 
loginform.jsp (View)

폼에서 받아온 값을 인코딩
   request.setCharacterEncoding("utf-8");
DTO에 값 저장
   MemberDTO member=new MemberDTO();
DAO로 넘기고 결과 리턴
   int result=dao.insert(member);
ActionForward 객체 생성 후 포워딩 방식 지정해 리턴 \
   ActionForward forward = new ActionForward();
   forward.setRedirect(false);      //false=dispatcher 방식   true=redirect 방식
(아마 리퀘스트 영역으로 공유된 값이 있어서 dispatcher 방식을 이용하나봄)
   forward.setPath("./member/loginform.jsp");




+ idcheck -> ajax를 이용하므로 웹브라우저에 출력되는 값이 callback 함수로 리턴
---> out 객체로 callback 함수에 int return을 반환
   PrintWriter out=response.getWriter();
   out.print(result);
+
   return forward의 값은 null인 상태로 넘기기 (비동기적이라 포워딩 할 필요 X)



회원가입 버튼 눌렀을 때 회원가입 창으로 넘어가기
onClick="location.href='<%=request.getContextPath()%>/MemberForm.do' "
//controller로 넘기거나 하여튼 다른 페이지로 넘길 때, 프로젝트명을 그대로 기입하면 오류가 발생할 가능성이 생기므로, 프로그램이 알아서 path를 잡아 넘길 수 있도록 getContextPath() 메소드를 이용해야 함
service 클래스로 넘어갈 필요 없으니 action은 쓸 필요 없음★
controller에 바로 forward로 페이지 경로를 지정
   forward = new ActionForward();
   forward.setRedirect(false);
   forward.setPath("./member/memberform.jsp");

+ Recent posts