티스토리 뷰

BoardFrontController.java

package net.board.action;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

 public class BoardFrontController 
 	extends javax.servlet.http.HttpServlet 
 	implements javax.servlet.Servlet {
	
	 protected void doProcess(HttpServletRequest request, HttpServletResponse response) 
	 	throws ServletException, IOException {
		 
		 String RequestURI=request.getRequestURI();
		 String contextPath=request.getContextPath();
		 String command=RequestURI.substring(contextPath.length());
		
		 
		 ActionForward forward=null;
		 Action action=null;
		   
		   if(command.equals("/BoardWrite.bo")){//입력받은 커맨드가 bo면 
			   forward=new ActionForward();//action for
			   
			   forward.setRedirect(false);
			   forward.setPath("./board/qna_board_write.jsp");
			   
		   }else if(command.equals("/BoardReplyAction.bo")){
			   action = new BoardReplyView();
			   try{
				   forward=action.execute(request, response);
			   }catch(Exception e){
				   e.printStackTrace();
			   }
		   }else if(command.equals("/BoardDelete.bo")){
			   forward=new ActionForward();
			   forward.setRedirect(false);
			   forward.setPath("./board/qna_board_delete.jsp");
		}else if(command.equals("/BoardModify.bo")){
			   action = new BoardModifyView();
			   try{
				   forward=action.execute(request, response);
			   }catch(Exception e){
				   e.printStackTrace();
			   }
	 	   }else if(command.equals("/BoardAddAction.bo")){
			   action  = new BoardAddAction();
			   try {
				   forward=action.execute(request, response );
			   } catch (Exception e) {
				   e.printStackTrace();
			   }
		   }else if(command.equals("/BoardReplyView.bo")){
			   action = new BoardReplyAction();
			   try{
				   forward=action.execute(request, response);
			   }catch(Exception e){
				   e.printStackTrace();
			   }
		   }else if(command.equals("/BoardModifyAction.bo")){
			   action = new BoardModifyAction();
			   try{
				   forward=action.execute(request, response);
			   }catch(Exception e){
				   e.printStackTrace();
			   }
		   }else if(command.equals("/BoardDeleteAction.bo")){
			   action = new BoardDeleteAction();
			   try{
				   forward=action.execute(request, response);
			   }catch(Exception e){
				   e.printStackTrace();
			   }
		   }else if(command.equals("/BoardList.bo")){
			   action = new BoardListAction();
			   try{
				   forward=action.execute(request, response);
			   }catch(Exception e){
				   e.printStackTrace();
			   }
		   }else if(command.equals("/BoardDetailAction.bo")){
			   action = new BoardDetailAction();
			   try{
				   forward=action.execute(request, response);
			   }catch(Exception e){
				   e.printStackTrace();
			   }
		   }
		   
		   if(forward.isRedirect()){
			   response.sendRedirect(forward.getPath());
		   }else{
			   RequestDispatcher dispatcher=
				   request.getRequestDispatcher(forward.getPath());
			   dispatcher.forward(request, response);
		   }
	 }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
		throws ServletException, IOException {
		doProcess(request,response);
	}  	
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
		throws ServletException, IOException {
		doProcess(request,response);
	}   	  	    
}

 

게시판을 MVC2패턴을 활용해서 만들기 위해서는 많은량의 파일이 필요합니다. 그런 이유로 마지막에 파일을 첨부해드이해를 하고 나서 직접 한번 더 이해해 보는 걸 추천드립니다. 

일단 다음과 같은 java코드에서 집중해서 봐야할 부분은 이 곳 입니다. 

 

 

 String RequestURI=request.getRequestURI();
		 String contextPath=request.getContextPath();
		 String command=RequestURI.substring(contextPath.length());
		
		 
		 ActionForward forward=null;
		 Action action=null;
		   
		   if(command.equals("/BoardWrite.bo")){
			   forward=new ActionForward();
			   
			   forward.setRedirect(false);
			   forward.setPath("./board/qna_board_write.jsp");
			   
		   }​

코드가 굉장히 복잡해보이고 긴건 사실이지만, if문 밑으로는 특정 URL에 접근하면 어디로 이동할지 또 어떤방식으로 접근할지 반복적인 코드의 연속이라고 생각하시면 됩니다.  그럼 첫줄부터 살펴보면서 어떤 코드인지 알아보도록 할게요 

 String RequestURI=request.getRequestURI();
		 String contextPath=request.getContextPath();
		 String command=RequestURI.substring(contextPath.length());

위의 코드 부분을 살펴보시면 String 문자열로 받은 =url의 값, 그리고 Contextpath부분을 선언하고 

command라는 배열안에 url에서 contextpath 라는 부분을 잘라낸 상태입니다. 

   if(command.equals("/BoardWrite.bo")){
			   forward=new ActionForward();
			   
			   forward.setRedirect(false);
			   forward.setPath("./board/qna_board_write.jsp");
			   
		   }​

그 뒤에 if 문이 오는데, 잘라낸 command의 값이 BoardWrite. bo와 같다면 아래의 문장을 실행시킵니다. 

foward= new ActionForward() ActionForward() 생성자를 불러 오는 거겠죠? 밑에는 ActionFoward()의 구조입니다. 

ActionForward.java

package net.board.action;

public class ActionForward {
	
	private boolean isRedirect=false;
	private String path=null;
	
	public boolean isRedirect(){
		return isRedirect;
	}
	
	public String getPath(){
		return path;
	}
	
	public void setRedirect(boolean b){
		isRedirect=b;
	}
	
	public void setPath(String string){
		path=string;
	}
}

대조해서 보면 setRedirect값에 false가 들어갑니다. if문이 실행되면서 특정 메서드를 불러와서 값을 넣어준거에요 

그건 종류에 따라 다릅니다. 

 if(forward.isRedirect()){
			   response.sendRedirect(forward.getPath());
		   }else{
			   RequestDispatcher dispatcher=
				   request.getRequestDispatcher(forward.getPath());
			   dispatcher.forward(request, response);
		   }

 

 

isRedirect값이 true라면 리다이렉션 방식으로 데이터를 사용자에게 전송할 것이고

아닌 경우에는 foward방식으로  원하는 곳으로 이동을 합니다. 저도 복잡해서 제대로 이해는 못한것 같은데 

3줄요약 사용자 입장 view 에서 클릭 controller 부에서 어디로 이동할건지 url을 정하고 그걸 다시 controller 에서 view 파트로 이동해서 창을 띄워준다! 라고 생각하면 될것같습니다. 

이렇게만 이해하면 20%정도 이해한것 같습니다. 나머지도 순차적으로 올리겠습니다. 이것이 Controller와 view의 관계라고 생각하시면 될 것 같습니다.  

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함