[MVC SPRING] 02. Controller의 역할
안녕하세요. Nerd-Lee입니다.
공부 내용은, 인프런 박매일님의
[NarP Series]MVC 프레임워크는 내 손에[나프1탄]
을 참고하였습니다.
MVC 1단계인, Servlet 환경으로만 만들어보고, MVC 2단계로 넘어가고
나중에는 Spring Framework를 사용하는 방식의 강의입니다.
MVC 1단계는, Controller + Model 만을 사용하는 방식입니다.
1. 테스트 html 파일 만들기
- 두 숫자를 입력해서, 전송버튼을 누르면 서블릿으로 넘겨서 계산을 하고, 그 값이 html 파일로 응답하는 예제
- 수1~수2까지의 합을 더하는 예제
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script
src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<table class="table">
<tr>
<td>수1</td>
<td><input type="text" name="su1" /></td>
</tr>
<tr>
<td>수2</td>
<td><input type="text" name="su2" /></td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="전송" class="btn btn-primary"/>
<input type="button" value="취소" class="btn btn-warning"/>
</td>
</tr>
</table>
</body>
</html>
2. 서블릿으로 넘기는 과정 공부
- 일단, input 태그에 있는 name이 변수역할을 한다. 웹에서는 파라미터라고 부른다.
- 전송과 취소를 눌러도 아무런 반응을 하지 않는다. 이건 당연한 것이다.
아무런 기능을 제공하지 않고 있기 때문이다. - 데이터를 입력받기 위해서는
<form>
태그를 이용한다. <table>
태그의 부모로<form>
태그를 열고 닫아준다.- 그리고 취소 버튼의 type을
reset
으로 변경을 해본다. - 전송버튼의 type은
submit
으로 변경한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script
src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<form>
<table class="table">
<tr>
<td>수1</td>
<td><input type="text" name="su1" /></td>
</tr>
<tr>
<td>수2</td>
<td><input type="text" name="su2" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="전송" class="btn btn-primary"/>
<input type="reset" value="취소" class="btn btn-warning"/>
</td>
</tr>
</table>
</form>
</body>
</html>
- 이대로 하면, 취소버튼을 누를 경우, input창에 있는 값이 reset이 되고
전송버튼을 누르게 되면, url에 쿼리가 추가가 되는데, 쿼리는 input의 name 부분과 값으로 되어있다. - 이제 form 태그에 action 이란 속성을 이용해서, 서블릿에 전송을 해주는 역할을 만들어줘야 한다.
<form action="calc.do">
3. 서블릿 만들기
- CalcController 라는, 서블릿을 하나 만들고, URL 맵핑을,
/calc.do
로 한다. - service 메서드에 있는 매개변수 중 request라는 변수로, 폼 파라미터가 넘어온다.
- 서블릿에서 파라미터는 무조건 String만 받을 수 있기 때문에
Integer.parseInt 함수를 이용해서, 문자열을 정수형으로 변환해야 한다. response.getWriter()
로 클라이언트의 정보를 PrintWriter로 얻어서 클라이언트에게 화면을 렌더링해준다.
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calc.do")
public class CalcController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 클라이언트에서 넘어오는 폼 파라미터 받기 ( 파라미터 수집, su1, su2 )
/*
* 서블릿에서 파라미터는 무조건 String만 받을 수 있기 때문에 Integer.parseInt 함수를 사용해서 문자열을 정수형으로
* 변환한다.
*/
int su1 = Integer.parseInt(request.getParameter("su1"));
int su2 = Integer.parseInt(request.getParameter("su2"));
PrintWriter out = response.getWriter();
if (su1 > su2) {
out.println("수1의 값을 더 크게 입력하세요.");
}
else {
// su1 ~ su2 = ?
int sum = 0;
for (int i = su1; i <= su2; i++) {
sum += i;
}
out.println("total : " + sum);
}
}
}
- 그리고 서버를 실행하면, 1과 100을 입력했을 때, calc.do로 url을 변경하면서 total : 5050 이란 값이 나오게 된다.
이 글이 도움이 되셨다면 댓글 부탁드립니다^^
다음 글로 찾아오겠습니다!
다음 글로 찾아오겠습니다!