Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

wintertreey 님의 블로그

MVC Model2: 인터페이스를 사용한 Controller 본문

JSP

MVC Model2: 인터페이스를 사용한 Controller

wintertreey 2024. 7. 1. 17:56

 

  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