본문 바로가기
프로젝트/selfmade Blog - V1 (deprecated)

7. MVC 구현

by zangsu_ 2023. 8. 20.

뷰 생성

가장 먼저, 기본 기능인 게시글 작성, 조회에 사용할 view를 먼저 작성해 보자.

<!-- writePosting.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html lang="en">  
<body>  
<div class="container">  
    <form action="http://localhost:8080/post" method="post">  
        <p>제목 : <input type="text" name="title"/><br></p>  
        <p>내용 : <input type="text" name="content"/><br></p>  
        <input type="submit" name="전송"/>  
    </form></div>  
</body>  
</html>

<form> 태그에서 사용자에게 데이터를 입력 받는다.

 

<!-- readPosting.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html lang="en">  
<body>  
<%  
    request.setCharacterEncoding("utf-8");  
    String title = request.getParameter("title");  
    String content = request.getParameter("content");  
%>  
  
<div class="container">   
<p>제목 : <%=title%><br></p>  
<p>내용 : <%=content%></p>  
</body>  
</html>

 

각각의 게시글 뷰에서는 서버에서 전달해 준 `response`의 필드 값들을 사용해 뷰를 구성한다.

컨트롤러 생성

다음으로는, jsp의 데이터 전송 요청을 처리해 주고, 적절한 뷰를 반환해 주는 컨트롤러를 생성하자.

@RequestMapping("/post")  
@Controller  
public class PostingController {  
  
    @GetMapping  
    public String createView(){  
        return "view/posting/writePosting";  
    }  
  
  
    @PostMapping  
    public ModelAndView posting(HttpServletRequest request){  
        String title = request.getParameter("title");  
        String content = request.getParameter("content");  
        ModelAndView mv = new ModelAndView("view/posting/readPosting")  
                .addObject("title", title)  
                .addObject("content", content);  
  
        return mv;  
    }  
}


데이터를 입력 받기 위한 뷰를 반환해 주는 createView() 메서드와 데이터 입력에 대해 적절한 처리를 해 주기 위한 posting() 메서드를 구현하였다.

posting() 메서드는 ModelAndView를 반환하여 뷰의 경로와, 해당 뷰에서 사용할 데이터를 적절히 넣어 주었다.

 

확인

localhost:8080/post 주소를 입력하면 데이터를 입력받기 위한 창이 보여진다.


값을 넣고 제출 버튼을 누르면 이전에 입력한 값이 바인딩 된 게시글 페이지가 보여진다.

전송 태그가 동작하지 않을 때 : 

<form> 태그 안의 <input type="submit"> 을 이용한 전송 태그를 클릭해도 아무런 동작이 없는 상황이 발생했다.

개발자 도구를 켜 확인해 보니, 오른쪽 상단에 작게 오류를 표시 해 주고 있다.



콘솔을 열어 오류 메시지를 확인해 보니 다음과 같았다.



<form> 태그에 사용되는 경로는 프로토콜과 호스트, 경로로 구성이 되어 있어야 한다. <form action = "localhost:8080/post"> 라고 적었을 때는 프로토콜에 해당하는 부분이 없었고, 그 때문에 오류가 난 것이다. http:// 부분을 붙여 주어 문제를 해결하였다.

댓글