-
스프링 - 계산기 만들기프로그래밍/Spring 스프링 2021. 11. 17.반응형
<%@ page contentType="text/html; charset=UTF-8"%> <%@ page trimDirectiveWhitespaces="true" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="icon" href="data:;base64,iVBORw0KGgo="> </head> <body> <h3>스프링을 이용한 간단한 계산기</h3> <div> <form action="${pageContext.request.contextPath }/demo1/request" method="post"> <input type="number" name="num1" required="required" placeholder="수"> <select name="operator"> <option value="+">더하기</option> <option value="-">빼기</option> <option value="*">곱하기</option> <option value="/">나누기</option> </select> <input type="number" name="num2" required="required" placeholder="수"> <button type="submit">결과</button> </form> </div> </body> </html>
write.jsp
<%@ page contentType="text/html; charset=UTF-8"%> <%@ page trimDirectiveWhitespaces="true" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="icon" href="data:;base64,iVBORw0KGgo="> </head> <body> <h3>실행 결과</h3> <p> ${msg} </p> </body> </html>
result.jsp
HTML 에서 표시할 계산 입력전 화면과 계산 후 화면(결과창)을 만든다.
결과창에서 EL msg는 나중에 결과값을 attribute로 msg라는 이름에 담을거라서 미리 정해뒀음
package com.sp.app.demo1; public interface DemoService { public String calculator(Demo dto); }
package com.sp.app.demo1; import org.springframework.stereotype.Service; @Service("demo1.demoService") public class DemoServiceImpl implements DemoService { @Override public String calculator(Demo dto) { String s = null; switch(dto.getOperator()) { case "+": s = String.format("%d + %d = %d", dto.getNum1(), dto.getNum2(), dto.getNum1()+dto.getNum2()); break; case "-": s = String.format("%d - %d = %d", dto.getNum1(), dto.getNum2(), dto.getNum1()-dto.getNum2()); break; case "*": s = String.format("%d * %d = %d", dto.getNum1(), dto.getNum2(), dto.getNum1()*dto.getNum2()); break; case "/": s = String.format("%d / %d = %d", dto.getNum1(), dto.getNum2(), dto.getNum1()/dto.getNum2()); break; } return s; } }
실질적인 계산을 하는 클래스 만들기 위해서 인터페이스를 먼저 만들었고
그리고 DemoServiceImpl 클래스에서 인터페이스를 재정의 하였다.
package com.sp.app.demo1; public class Demo { private int num1; private String operator; private int num2; public int getNum1() { return num1; } public void setNum1(int num1) { this.num1 = num1; } public String getOperator() { return operator; } public void setOperator(String operator) { this.operator = operator; } public int getNum2() { return num2; } public void setNum2(int num2) { this.num2 = num2; } }
작성한 값들을 담을 dto의 역할
package com.sp.app.demo1; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.servlet.ModelAndView; @Controller("demo1.demoController") // 클라이언트의 요청을 받을 수 있는 클래스 public class DemoController { @Autowired // 타입을 이용한 의존성 주입 // 동일한 타입이 둘 이상인 경우 필드명과 동일한 빈을 주입함. private DemoService service; @GetMapping("/demo1/request") // get 방식으로 들어올 경우 (스프링 4 버전 이상 부터 가능) public String form() throws Exception { return "demo1/write"; } /* * ModelAndView : 컨트롤러의 터리 결과를 보여줄 뷰와 뷰에 전달할 값을 저장하는 용도로 사용 */ @PostMapping("/demo1/request") public ModelAndView submit(Demo dto) throws Exception { String s = service.calculator(dto); ModelAndView mav = new ModelAndView("demo1/result"); mav.addObject("msg", s); return mav; } }
DemoController.java
이 파일에서 실질적으로 서블릿 역할을 해준다.
컨트롤러는 요청에 따라 어떤 처리를 해줄지 결정하는 곳
실질적인 처리는 서비스에서 한다.
GET 방식으로 들어오면 다시 write로 돌려보내고
POST 방식으로 왔을때에만 작동되게 설정
service.calculator(dto); 통해서 결과값 계산해서 s에 담는다.
ModelAndView 객체 생성해서 결과값을 ModelAndView의 객체에 담는다.
반응형'프로그래밍 > Spring 스프링' 카테고리의 다른 글
STS3 - pom.xml 환경설정 (0) 2021.12.23 STS3 - UTF-8 인코딩 환경 설정하기 (0) 2021.12.23 STS3 - 프로젝트 생성 (0) 2021.12.23 스프링 - 간단한 회원 가입 개념 (0) 2021.11.20 스프링 - 기본 흐름 파악 (0) 2021.11.16