wintertreey 님의 블로그
MVC Model2: 인터페이스를 사용한 Controller 본문
Views(jsp) : 사용자 UI | Controller(Servlet) : 중개자 | Model : 로직, 디비연결 등 담당 | |
메세지 | view1 | MessagePro | MessageModel |
공통 | index.html | CommandInter, ControllerService | |
날짜 | view2 | DatePro | DateModel |
자 가봅시다!
index.html
<body>
작업 선택: <br>
<a href="good.do?command=message">메세지 출력</a><br>
<a href="nice.do?command=date">날짜 출력</a><br>
</body>
링크를 타고 파라미터 message 를 들고 넘어간다.
CommandInter.java
package pack.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface CommandInter {
String showData(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
ControllerService.java
package pack.controller;
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") // 끝이 do로 끝나는 모든 파일들. 다르게 된다면 배열로도 가능.
//@WebServlet({"/hobby.do","/hobby2.do","*.kor"})
public class ControllerService extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String command = request.getParameter("command");
//System.out.println(command);
String viewName = "";
CommandInter inter = null; //클라이언트 요청처리를 인터페이스 사용
try {
if(command.equals("message")) {
inter = new MessagePro();
}else if(command.equals("date")) {
inter= new DatePro();
}
viewName = "/WEB-INF/views/" + inter.showData(request, response);
request.getRequestDispatcher(viewName).forward(request, response);;
} catch (Exception e) {
System.out.println("service err: "+e);
}
}
}
message가 입력값으로 넘어올때
MessagePro를 인스턴스해준다.
MessagePro.java
package pack.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import pack.model.MessageModel;
public class MessagePro implements CommandInter{
@Override
public String showData(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 적당한 모델을 선택해 수행결과 얻기
MessageModel messageModal = new MessageModel();//원래는 싱글톤처리
String msg = messageModal.messageProcess();
request.setAttribute("datas", msg);
return "view1.jsp";
}
}
상단에 기입한 ControllerService 로 다시 돌아온다.
viewName = "/WEB-INF/views/" + inter.showData(request, response);
request.getRequestDispatcher(viewName).forward(request, response);;
하단의 이부분을 수행한다.
처음에 MesssagePro.java에서 return 할때 해당 파일로 간다고 생각했었다.
그런데 자세히보니 값을 ""처리해서 글자그대로 가지고 가더라.
그렇게 파일명을 가지고가 마지막에 컨트롤러에서 최종 경로주소로 만들어주고
포워드방식으로 넘겨준다.
날짜 처리방식도 같다.
관련파일은 깃허브를 참고하자.
https://github.com/yoonah0327/java_source/tree/main/wmvc3command
java_source/wmvc3command at main · yoonah0327/java_source
Contribute to yoonah0327/java_source development by creating an account on GitHub.
github.com
'백엔드 > JSP' 카테고리의 다른 글
Redirect 리다이렉트 vs Forward 포워드 방식 (0) | 2024.07.02 |
---|---|
MVC Model2: DB 연동하기 (0) | 2024.07.02 |
빌드 관리 도구 maven gradle (0) | 2024.07.01 |
MVC패턴 (2) | 2024.07.01 |
EL (0) | 2024.07.01 |