DeseoDeSeo
[Message System 실습] 하나의 servlet파일을 각각의 class파일로 분할 & 인터페이스 생성 본문
if( command.equals("JoinService.do")) {
//1. 회원가입 기능 구현
// 일은 JoinService클래스가 하고 다시 FrontController로 돌아옴.
// 자식클래스에서 객체를 생성하고 부모 타입으로 형 변환 => 업 캐스팅
service = new JoinService();
}else if(command.equals("LoginService.do")) {
service = new LoginService();
} else if(command.equals("LogoutService.do")){
service = new LogoutService();
} else if(command.equals("UpdateService.do")) {
//회원정보 수정 기능구현
service= new UpdateService();
}else if(command.equals("MsgSendService.do")) {
//메세지 작성 기능 구현
service = new MsgSendService();
}else if(command.equals("MsgAllDelete.do")) {
// 메세지 전체 삭제 기능 구현
service = new MsgAllDelete();
}else if(command.equals("MsgDelete.do")) {
// 메세지 개별 삭제 기능 구현
service = new MsgDeleteService();
}
추상 클래스와 인터페이스
" 상속받는 클래스 or 구현하는 인터페이스 안에 있는 추상 메서드를 구현하도록 강제한다. "
인터페이스
: 모든 메서드가 추상 메서드.
추상클래스
: 다른 클래스들이 공통으로 가지는 속성과 메서드를 정의하는 데 사용되며 직접적으로 인스턴스화(= 직접 객체 생성) 할 수 없는 클래스.
< 목적 > 상속을 통해 하위 클래스에서 공통된 메서드를 정의함 -> 유지 보수가 용이한 코드 !
< 인터페이스 생성 >
package com.front;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface ICommand {
//인터페이스는 틀!
// 추상메서드는 내용,기능은 없고 이름만 있음.
//중간에 중괄호가 있으면 실행한다는 내용?! 그래서 세미콜론으로 마무리해야함.
public String execute( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}
JoinService.java
package com.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.front.ICommand;
import com.model.MemberDAO;
import com.model.MemberDTO;
public class JoinService implements ICommand {
//아래는 메서드임.
public String execute( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
System.out.println("회원가입 기능실행");
String email = request.getParameter("email");
String pw = request.getParameter("pw");
String phone = request.getParameter("phone");
String addr = request.getParameter("addr");
// System.out.println(email + "/" + pw + "/" + phone + "/" + addr);
MemberDTO dto = new MemberDTO(email, pw, phone, addr);
// System.out.println(dto.toString());
MemberDAO dao = new MemberDAO();
int cnt = dao.join(dto);
if(cnt > 0) {
System.out.println("회원가입 성공");
}else {
System.out.println("회원가입 실패");
}
return "main.jsp";
// frontcontroller에게 마지막으로 이동해야할 주소를 넘김.
}
}
- class옆에 implements Icommand 추가
- return "main.jsp"추가
이런 식으로 클래스 파일 생성함.
MsgSendService
package com.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.front.ICommand;
import com.model.MessageDAO;
import com.model.MessageDTO;
public class MsgSendService implements ICommand{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("메세지 작성 기능실행");
String send_name = request.getParameter("send_name");
String receive_email = request.getParameter("receive_email");
String content = request.getParameter("content");
MessageDTO dto = new MessageDTO(send_name, receive_email, content);
// System.out.println(dto.toString());
MessageDAO dao = new MessageDAO();
int cnt = dao.insert(dto);
return "main.jsp#two";
}
//인터페이스 사용하는 방법 : implements
// 사용하는 이유 : execute 사용을 강제 하기 위해서.
}
FrontController.java
package com.front;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
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.JoinService;
import com.controller.LoginService;
import com.controller.LogoutService;
import com.controller.MsgAllDelete;
import com.controller.MsgDeleteService;
import com.controller.MsgSendService;
import com.controller.UpdateService;
import com.model.MemberDAO;
import com.model.MemberDTO;
import com.model.MessageDAO;
import com.model.MessageDTO;
/**
* Servlet implementation class FrontController
*/
/* 하단은 url매핑 하는 것 */
/* 무엇으로 .do로 끝나면 여기로 옴, */
@WebServlet("*.do")
public class FrontController extends HttpServlet {
// HashMap 생성
//홈페이지의 사용자가 폭발적으로 늘어나면 객체 생성(= 새로운 데이터 생성)을 버텨낼 수 없음.
// 갑자기 객체 생성이 많아지면 ram이 버틸 수 없어서 홈페이지가 다움됨,
// 그래서 HashMap 사용함.
// 누가 들어오든 객체 생성을 딱 한번만 함. ( = single ton패턴)
// key 값에 "JoinService.do" 이게 들어감. value에는 new JoinService();이게 들어가야함.
// value값은 icommand로 묶으면 됨,
HashMap<String, ICommand> map = new HashMap<>();
//alt +shift + s > override> init메서드 체크하기
//init : 생성하다.
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
//누군가에 의해서 현재 servlet에 들어오게 된다면 servlet을 실행할 수 있게 생성하는 메서드임.
// 이 메서드는 최초에 의해서 1번만 실행됨.
map.put("JoinService.do", new JoinService());
map.put("LoginService.do", new LoginService());
map.put("LogoutService.do", new LogoutService());
map.put("JoinService.do", new JoinService());
map.put("MsgSendService.do", new MsgSendService());
map.put("MsgAllDelete.do", new MsgAllDelete());
map.put("MsgDeleteService.do", new MsgDeleteService());
}
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//System.out.println("프론트 컨트롤러 실행");
// 1.client가 요청한 url주소 가져오기
String requestURI =request.getRequestURI();
//System.out.println(requestURI);
// 2. Context Path(아주 중요)( 웹 어플리케이션의 시작 주소 )
String contextPath = request.getContextPath();
//System.out.println(contextPath);
// 3. client 요청 부분만 분리
// 출력된 /MessageSystem/LoginService.do 여기에서 LoginService.do 이부분만 출력하기 위해서
String command = requestURI.substring(contextPath.length()+1);
//System.out.println(command);
request.setCharacterEncoding("EUC-KR");
response.sendRedirect( map.get(command).execute(request, response));
//위에 있는 protected void service에 있는 request랑 보내는 거임.
/*//인터페이스는 객체 생성 불가능하지만 인터페이스를 물려
ICommand service = map.get(command);
* String moveUrl = service.execute(request, response);
* response.sendRedirect(moveUrl);
*/
}
}
'JSP' 카테고리의 다른 글
[ EL과 JSTL ] EL : 체크박스 출력하기, JSTL (0) | 2023.09.02 |
---|---|
[ EL과 JSTL ] EL ( Expression Language ) (0) | 2023.09.02 |
HashMapTest.java (0) | 2023.08.31 |
[Message System 실습 ] servlet파일들을 하나의 servlet파일로 구성 (0) | 2023.08.30 |
[JSP] 기초 (0) | 2023.08.30 |