https://bongra.tistory.com/360
[JAVA] 자바(JAVA) : XML데이터에서 원하는 태그(Tag)의 데이터값을 추출하는 방법
dao - (모델) 에 접근후 DB 에 접근

MVC패턴 쓰는 이유
웹에서만의 단점
컨트롤러들이 문제 - Servlet
쓰는이유 : Java파일을 서버에서 실행시키기위해서
단점 : 특정 클래스 상속

Servlet 가운데 하는 컨트롤러
앞에서 받아들인다
Front Controller




url이 있어야 찾아갈 수 있습니다.

클래스와 연결해주는 주소를 달아주는거
요청시 FrontController라고 합니다.
뭘 눌러서 FrontController로 온건지 알 수 없습니다.
규칙을 만듭니다. @WebServlet(".do")
전체를 오게하겠다. @WebServlet("*.do")
ex) 로그인 0826
ex) logout.do
하면 FrontController로 옵니다.
<form action="login.do"method="post">
이걸로 하고있음
package com.front;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("*.do")
public class FrontController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("프론트 컨트롤러 실행");
}
}


contextpath

특정 문자기준 잘라내기
substring() 몇번째를 잘라낼껀지

JoinController 꺼를 가져와서 FrontController에다가 넣습니다.
if(url.equals("/join.do")){
request.setCharacterEncoding("EUC-KR");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String nick = request.getParameter("nick");
// System.out.println(id + "/" + pw + "/" + nick);
WMemberVO vo = new WMemberVO(id, pw, nick);
WMemberDAO dao = new WMemberDAO();
int cnt = dao.join(vo);
if(cnt > 0) {
System.err.println("회원가입 성공!");
}else {
System.err.println("회원가입 실패.");
}
response.sendRedirect("main.jsp");
}
package com.front;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.model.WMemberDAO;
import com.model.WMemberVO;
@WebServlet("*.do")
public class FrontController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("프론트 컨트롤러 실행");
// 1.client가 요청한 전체 url 가져오기
// requestURL 변수명에 담아줌
String requestURL = request.getRequestURI();
//System.out.println(requestURL);
// 2.Context Path 가져오기
String contextPath = request.getContextPath();
//System.out.println(contextPath);
// 3.요청 url만 가져오기
String url = requestURL.substring(contextPath.length());
System.out.println(url);
if(url.equals("/join.do")) {
request.setCharacterEncoding("EUC-KR");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String nick = request.getParameter("nick");
// System.out.println(id + "/" + pw + "/" + nick);
WMemberVO vo = new WMemberVO(id, pw, nick);
WMemberDAO dao = new WMemberDAO();
int cnt = dao.join(vo);
if(cnt > 0) {
System.err.println("회원가입 성공!");
}else {
System.err.println("회원가입 실패.");
}
response.sendRedirect("main.jsp");
}
}
}

loginController, logout~, list~
도 옮겨줍니다.
FrontController
객체지향..?


단순한 CLASS로 쪼갭니다.
Command Pattern
MVC 로그인, 로그아웃 시 > 컨트롤러 감

FrontController join 기능을 다시 잘라냅니다.

일반커맨드인 join controller .class 에 시키고
다시 받아서 안내를 해줍니다.
<요리 식당과 동일합니다.>
리턴타입이 중요합니다.
url이 문자열이니 String으로 다시 알려줍니다.

throws Exception
쓰는 사람이 알아서 해결하겠지 기능을 쓴다면 거기서 예외처리
try catch
폭탄이 터질꺼 같아 내가 직접 해체
public String execute() throws Exception{
request.setCharacterEncoding("EUC-KR");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String nick = request.getParameter("nick");
// System.out.println(id + "/" + pw + "/" + nick);
WMemberVO vo = new WMemberVO(id, pw, nick);
WMemberDAO dao = new WMemberDAO();
int cnt = dao.join(vo);
if(cnt > 0) {
System.err.println("회원가입 성공!");
}else {
System.err.println("회원가입 실패.");
}
response.sendRedirect("main.jsp");
}
request, response 객체가 필요하고 받아오면 됩니다.

빨간줄은 return 없어서 그래요
response.sendRedirect("main.jsp");
요리사가 만들어서 손님한테 주는 느낌이라서
return "main.jsp"; 바꿔줌
throws ServletException, IOException
부분수정
package com.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.model.WMemberDAO;
import com.model.WMemberVO;
public class JoinController {
public String execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
request.setCharacterEncoding("EUC-KR");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String nick = request.getParameter("nick");
// System.out.println(id + "/" + pw + "/" + nick);
WMemberVO vo = new WMemberVO(id, pw, nick);
WMemberDAO dao = new WMemberDAO();
int cnt = dao.join(vo);
if(cnt > 0) {
System.err.println("회원가입 성공!");
}else {
System.err.println("회원가입 실패.");
}
return "main.jsp";
}
}

모두 써야되서 > public
문자열 > String
request , response >
로그인 컨트롤러에 넣기
public String execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
프론트 컨트롤러에서 가져오기
가져옵니다.

로그인 컨트롤러에 가져온거 넣기
else if(url.equals("/login.do")) {
LoginController command = new LoginController();
String moveURL = command. execute (request, response) ;
response.sendRedirect(moveURL);
여기서 response.sendRedirect(moveURL); 사용
LogoutController command = new LogoutController();
String moveURL = command.execute(request, response);
response.sendRedirect(moveURL);
쓸 객체 생성 > command
어떻게 실행? command.execute
다시 url 주소 주기 > sendRedirect
package com.front;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.controller.JoinController;
import com.controller.ListController;
import com.controller.LoginController;
import com.controller.LogoutController;
import com.model.WMemberDAO;
import com.model.WMemberVO;
@WebServlet("*.do")
public class FrontController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("프론트 컨트롤러 실행");
// 1.client가 요청한 전체 url 가져오기
// requestURL 변수명에 담아줌
String requestURL = request.getRequestURI();
//System.out.println(requestURL);
// 2.Context Path 가져오기 / 필요부분만 잘라내기
String contextPath = request.getContextPath();
//System.out.println(contextPath);
// 3.요청 url만 가져오기
String url = requestURL.substring(contextPath.length());
System.out.println(url);
if(url.equals("/join.do")) {
JoinController command = new JoinController();
String moveURL = command. execute(request, response);
response.sendRedirect(moveURL);
}else if(url.equals("/login.do")) {
LoginController command = new LoginController();
String moveURL = command. execute (request, response) ;
response.sendRedirect(moveURL);
}else if(url.equals("/logout.do")) {
LogoutController command = new LogoutController();
String moveURL = command.execute(request, response);
response.sendRedirect(moveURL);
}else if(url.equals("/list.do")) {
ListController command = new ListController();
String moveURL = command.execute(request, response);
response.sendRedirect(moveURL);
}
}
}
package com.front;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.controller.JoinController;
import com.controller.ListController;
import com.controller.LoginController;
import com.controller.LogoutController;
import com.model.WMemberDAO;
import com.model.WMemberVO;
@WebServlet("*.do")
public class FrontController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("프론트 컨트롤러 실행");
// 1.client가 요청한 전체 url 가져오기
// requestURL 변수명에 담아줌
String requestURL = request.getRequestURI();
//System.out.println(requestURL);
// 2.Context Path 가져오기 / 필요부분만 잘라내기
String contextPath = request.getContextPath();
//System.out.println(contextPath);
// 3.요청 url만 가져오기
String url = requestURL.substring(contextPath.length());
System.out.println(url);
String moveURL = null;
if(url.equals("/join.do")) {
JoinController command = new JoinController();
moveURL = command.execute(request, response);
}else if(url.equals("/login.do")) {
LoginController command = new LoginController();
moveURL = command. execute(request, response);
}else if(url.equals("/logout.do")) {
LogoutController command = new LogoutController();
moveURL = command. execute(request, response);
}else if(url.equals("/list.do")) {
ListController command = new ListController();
moveURL = command. execute(request, response);
response. sendRedirect(moveURL);
}
}
}
추상메서드
자바에서 상속은 1개
인터페이스는 상속 여러개 (틀을 지정)

public String execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
추상적 정의되어있지 않고 ;로 되어있음
로그인 컨트롤러에는 로그인이 들어가있음
각각 클래스마다 다르게 되어있습니다.
강제적으로 틀을 만들기 위함입니다.
excute로 구현가능하게 만듭니다.


List, LogoutController , login~, join
implements Command 붙여넣기
excute에서 쓸 수 있게했음
인터페이스와 추상클래스는 객체 못만듬 (생성 x)
Command comand = null; 객체 변수 선언은 가능(공간)

new 객체생성이 command로 들어감
데이터타입이 Command 그러나
사진에 new 뒤에꺼는 다 자식 > 부모타입으로 올라감
업캐스팅커맨드를 구현한 자식클래스는 부모타입으로 변환된다하더라도
호출하는순간 자식의 메서드가 구현된다.
묶으면 if문에서 할 필요없이 밖에서 처리가능하다.
package com.front;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.controller.JoinController;
import com.controller.ListController;
import com.controller.LoginController;
import com.controller.LogoutController;
import com.controller.UpdateController;
import com.model.WMemberDAO;
import com.model.WMemberVO;
@WebServlet("*.do")
public class FrontController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("프론트 컨트롤러 실행");
// 1.client가 요청한 전체 url 가져오기
// requestURL 변수명에 담아줌
String requestURL = request.getRequestURI();
//System.out.println(requestURL);
// 2.Context Path 가져오기 / 필요부분만 잘라내기
String contextPath = request.getContextPath();
//System.out.println(contextPath);
// 3.요청 url만 가져오기
String url = requestURL.substring(contextPath.length());
System.out.println(url);
String moveURL = null;
Command command = null;
if(url.equals("/join.do")) {
command = new JoinController();
}else if(url.equals("/login.do")) {
command = new LoginController();
}else if(url.equals("/logout.do")) {
command = new LogoutController();
}else if(url.equals("/list.do")) {
command = new ListController();
}else if(url.equals("/update.do")) {
command = new UpdateController();
moveURL = command.execute(request, response) ;
response.sendRedirect(moveURL);
}
}
}