*** 회원관리
- 주요 기능
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");
'수업 > 정리' 카테고리의 다른 글
220330 Model2_원글 작성 (0) | 2022.03.30 |
---|---|
220329 model2_ 로그인/아웃, 메인, 정보 수정/삭제 (0) | 2022.03.29 |
220325 Model2_JSTL (0) | 2022.03.25 |
220324 model2_ JavaServlet, 표현언어(EL) (0) | 2022.03.24 |
220323 자료실3_삭제(첨부파일) , model2_Java Servlet (0) | 2022.03.23 |