JSP & Servlet을 공부하며 이를 적용시키기 위해 프론트엔드 1분과 미니 프로젝트를 만들어 보았다.
기능은
-
-
-
그동안 포스팅이 뜸했던 이유인 게시판 프로젝트가 막바지에 이르러서.. 하나씩 포스팅하려고 한다.
우선 mvc패턴을 안다는 전제 하에, 내 프로젝트 구조는 위처럼 되어 있다.
동작구조
- View - 화면에 나오는 화면 페이지, 즉 jsp 파일
- Controller - action객체를 생성해 view에서 다른 view로 가는 경로를 제어하는 공장
- Action - view의 경로를 갖고 있으며, view에게 보여줄 데이터 VO(DTO)를 처리
- Service - 수동 커밋 방식을 사용할 것이기 때문에 DAO와 연결 후 필요한 시점에서 한 번에 커밋하는 용도
- DAO - 데이터베이스에서 값을 조회하거나 데이터를 수정, 삭제, 삽입하는 용도
Action - 로직, 경로 설정
우선 Action 인터페이스와 ActionForward클래스를 생성한다.
Action interface를 정의하고 xxxAction.java 같은 자손들을 생성함으로써 각 Action객체마다 다른 경로를 저장시켜 보낼 수 있다.
자바의 특징 중에 하나인 다형성을 적용한 것이다.
Action action = new xxxAction();...
[Action.java]
public interface Action {
ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
[ActionForward.java]
//페이지 이동을 처리하기 위한 클래스
public class ActionForward {
private String path; //이동할 페이지 경로값을 갖는 변수
private boolean redirect; //sendRedirect와 forward 중 어떤 것을 이용해서 페이지 이동할지를 결정하기 위한 boolean 변수
public ActionForward() {
}
public ActionForward(String path,boolean redirect) {
this.path=path;
this.redirect=redirect;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public boolean isRedirect() {
return redirect;
}
public void setRedirect(boolean redirect) {
this.redirect = redirect;
}
}
그다음 view에서 join.do를 요청 시 경로를 제어할 Action을 만들어주어야 한다.
Action 인터페이스를 상속받아 각 view마다 경로를 제어하는 Action을 각각 만들어줘야 한다.
[MemberJoinAction.java]
public class MemberJoinAction implements Action {
@Override
public ActionForward execute
(HttpServletRequest request, HttpServletResponse response) {
ActionForward forward = new ActionForward();
forward.setPath("/views/join.jsp"); //경로 설정
return forward;
}
}
Controller
그리고 BoardController라는 서블릿을 만든 뒤 매핑을 *. do로 해준다.
만약 메인화면에서 게시판 화면으로 이동하고 싶을 때 xxxx.do로 이동해줘!라고 요청하면
Controller가 해당 action객체를 생성하고 execute를 실행함으로써 view가 이동한다.
여기서 페이지 전환 기능 sendRedirect와 RequestDispatcher.forward 차이점을 알아야 한다.--포스팅 후 삽입 예정--
[BoardController.java]
@WebServlet("*.do")
public class BoardController extends HttpServlet {
public BoardController() {
super();
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String RequestURI = request.getRequestURI();
String contextPath = request.getContextPath();
String command = RequestURI.substring(contextPath.length());
ActionForward forward = null;
Action action = null;
if (command.equals("/join.do")) { //view에서 join.do를 호출했을 때
action = new MemberJoinAction(); //실행되는 Action
try {
forward = action.execute(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
if (forward != null) {
if (forward.isRedirect()) { //isRedirect가 true일 때(정보 처리) sendRedirect로 이동
response.sendRedirect(forward.getPath());
} else { //isRedirect가 false일 때(화면 이동) forward로 이동
RequestDispatcher dispatcher
= request.getRequestDispatcher(forward.getPath());
dispatcher.forward(request, response);
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
}
View
이렇게 jsp -> jsp 전환이 아닌 jsp > controller > jsp 이렇게 view를 이동하는 게 mvc2 패턴이다.
<a href="/join.do">
<h3 class="join">회원가입</h3>
</a>
회원가입 a태그를 누르면
주소창에 join.do가 뜨면서 view가 이동한 것을 확인할 수 있다. (당연히 이동할 view는 따로 만들어줘야 한다.)
단순한 화면 이동만 포스팅해서 Service와 DAO를 사용하지 않았는데 데이터를 건드려야 할 때 설명하겠습니다!
github
'💻 Dev > JSP & Servlet' 카테고리의 다른 글
JSP 파일이 브라우저 화면에 출력되기까지의 과정 (0) | 2025.01.09 |
---|---|
[JSP] 11.JDBC(Java Database Connectivity) (0) | 2020.09.16 |
[JSP] 10.세션(Session) (0) | 2020.09.15 |
[JSP] 9.쿠키(Cookie) (0) | 2020.09.10 |
[JSP] 8.jsp request,response (0) | 2020.09.01 |
[JSP] 7.form 데이터 처리 (0) | 2020.08.31 |