Step it up now

Front Controller 본문

수업/servlet, JSP

Front Controller

케잉 2023. 12. 5. 20:47

-----사진. 

 

 

 

//".gd"로 끝나는 URL에 대한 요청을 처리한다 
//필요한 패키지, 클래스가 import되어 있다
@WebServlet("*.gd")
public class FrontMVC extends HttpServlet {
	Logger logger = LoggerFactory.getLogger(FrontMVC.class);
	private static final long serialVersionUID = 1L;

	protected void doService(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		
        //요청 URI를 가져오고 logging
        String  uri = req.getRequestURI(); // => /notice/noticeInsert.gd
		logger.info(uri);
        
        //컨텍스트 경로를 얻어와 URI에서 컨텍스트 경로를 제외한 부분을 명령어로 가져옴
		String context = req.getContextPath();// /
		String command = uri.substring(context.length()+1);//-> notice/noticeInsert.gd
		
        //뒤에 의미없는 확장자 gd를 잘라내기
		int end = command.lastIndexOf(".");//점이 있는 위치정보를 가져온다
        
        // "/"를 구분자로 사용하여 배열로 나눔
		command =  command.substring(0,end);//-> notice/noticeInsert까지만 가져온다. .gd는 빼고서....
		String upmu[] = null;
		upmu = command.split("/");
		for(String name:upmu) {
			logger.info(name);
		}
		ActionForward af = null;
        
        //ActionForward 객체를 선언하고, NoticeController 객체를 생성
		NoticeController nc = new NoticeController();
		
		////////////////////////[[  어떤 컨트롤러를 태울것인가? ]]/////////////////////////
		//이 지점은 내려가는 방향이다
		if("notice".equals(upmu[0])) {
			req.setAttribute("upmu",upmu);
			af = nc.execute(req, res);//NoticeController클래스로 건너감 - upmu[1]-메소드이름이니까...
		}
		//이 지점은 java와 오라클 서버를 경유한 뒤 시점이다.
		if(af !=null) {
			if(af.isRedirect()) {
				res.sendRedirect(af.getPath());
			}
			else{
				RequestDispatcher view = req.getRequestDispatcher(af.getPath());
				view.forward(req, res);
			}
		}/////////// end of if - 응답페이지 호출하기 - 포워드
        //
		else if("member".equals(upmu[0])) {
			
		}
		else if("lecture".equals(upmu[0])) {
			
		}
		
		
		//////////////////////[[ 컨트롤을 타고 난 뒤에는? ]]///////////////////////
		//해당 업무에 대응하는 컨트롤러에서 결정된 페이지 이름을 받아온다
		//위에서 결정된 true 혹은 false값에 따라 sendRedirect와 forward를 통해
		//응답페이지를 호출해준다. - 이것이 FrontMVC의 역할
		
		
		//////////////////////////////////////////////////////////////////
		
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		doService(req,res);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		doService(req,res);
	}

}

 

'수업 > servlet, JSP' 카테고리의 다른 글

POST 방식 한글 깨질 때  (0) 2023.12.12
sendRedirect  (0) 2023.12.06
req/res3) forwarding, request  (1) 2023.12.05
req/res2) Redirect  (1) 2023.12.05
req/res1) 클라이언트 - 서블릿  (1) 2023.12.05