수업/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);
}
}