# Spring02

제로·2023년 1월 11일
0

Spring

목록 보기
2/18

1. spring 모델데이터 처리

  • mapping url이 중복되면 에러가 발생하기 때문에 get/post방식으로 나눠서 화면 호출

@Controller
public class A03_ModelController {
	// get방식으로 화면 호출
	// http://localhost:7080/springweb/call10.do
	@GetMapping("/call10.do") // 초기 보여줄 화면
	public String call10() { 
		return "WEB-INF\\views\\a01_start\\a10_callCalcu.jsp";
	}
	@PostMapping("/call10.do") // 요청값을 받았을 때 구현할 화면
	public String call11( @RequestParam("price") int price,
						  @RequestParam("cnt") int cnt,
						  Model d) {
		d.addAttribute("calcu",price*cnt); // 모델데이터 생성
		return "WEB-INF\\views\\a01_start\\a10_callCalcu.jsp";
	}
}

# a10_callCalcu.jsp
// 요청값 넘기기
<input name="price" class="form-control mr-sm-2" placeholder="물건가격" />
<input name="cnt" class="form-control mr-sm-2" placeholder="물건갯수" />

// value값 ${param.key}로 요청데이터를 받아올 수 있고, 모델 데이터는 ${모델데이터 key}로 사용 가능하다. 
<tr><td>${param.price }</td>
<td>${param.cnt}</td>
<td>${calcu }</td></tr>
  • 초기화면
  • 계산 버튼을 눌러 submit

2.스프링 MVC 심화

1) controller의 요청값 옵션

  • 메서드의 매개변수
  • 개별적 요청값 처리 : @RequestParam("요청키") 데이터유형 변수
  • 디폴트 값 처리 : @RequestParam(value="요청키", defaultValue="") 데이터유형 변수
  • VO객체 활용(property개념으로 요청키를 저장) : 요청데이터 + 모델(model attributer)

2) 모델 설정

  • 메서드의 매개변수 : Model d -> d.attribute("모델명",모델객체);

3)뷰단 처리

  • return "호출한 view단 주소(html/jsp/json데이터)";
    ★★ forward 방식으로 호출하면서 모델데이터를 넘긴다.

    ex) redirect방식과 forward 방식의 차이

    • response.sendRedirect("") : redirect 방식

      • 페이지를 호출하면서 request, response를 해당 페이지에 전송하지 않음
      • controller에서 선언한 모델데이터, 쿠키값을 전달하지 못한다.
    • request.getRequestDispatcher("").forward(request,response) : forward 방식

      • request, response를 전달하기에 모델데이터를 전달할 수 있다.
# 랜덤 구구단 문제 만들기
	@RequestMapping("/hw03.do")
	public String hw05(
				@RequestParam(value="grade", defaultValue = "0") int grade,
				@RequestParam(value="cnt", defaultValue = "0") int cnt,
				@RequestParam(value="inReply", defaultValue = "0") int inReply,
				Model d
			) {
		// 초기화면에 문제 세팅
		d.addAttribute("rGrade",(int)(Math.random()*8+2));
		d.addAttribute("rCnt",(int)(Math.random()*9+1));
		if(grade!=0) { //초기화면과 구분(submit했을 때)
			String msg = grade*cnt ==inReply?"정답":"오답";
			d.addAttribute("msg",msg);
		}
		return "WEB-INF\\views\\z01_hw\\z03_hw.jsp";
	}
    
# z03_hw.jsp
<form id="frm01" class="form-inline"  method="post">
  		<input name="grade" class="form-control mr-sm-2" value="${rGrade }"/>X
  		<input name="cnt" class="form-control mr-sm-2" value="${rCnt }"/>=
	    <input name="inReply" class="form-control mr-sm-2"  />
	    <button class="btn btn-info" type="submit">정답확인</button>
	</form>
 
<script>
$(document).ready(function(){
	var msg = "${msg}"
	if(msg!=""){alert(msg)} })
</script>
  • 초기화면
  • 요청값 처리화면

@@ 김밥가격[0] 갯수 @ 총계 @@@  [다음 1개 확인] 초기화면
버튼 클릭시 마다 입력된 가격에서 한개씩 갯수가 올라가 계산되게 하세요
# controller 
/*요청값 price, cnt
 모델값 tot
 매개변수 VO생성 Kimbap kb*/
	@RequestMapping("/hw07.do")
	public String hw09(Kimbap kb) {
		if(kb.getPrice()>0) { //초기화면과 구분
			kb.setCnt(kb.getCnt()+1); // 갯수 +1
			kb.setTot(kb.getPrice()*kb.getCnt()); //합계 변경
		}
		return "WEB-INF\\views\\z01_hw\\z07_hw.jsp";
	}
# view단 
	<form id="frm01" class="form-inline"  method="post">
  		<input name="price" class="form-control mr-sm-2" value="${kimbap.price }" />
	    <input name="cnt" class="form-control mr-sm-2" value="${kimbap.cnt }" />
	    <input value="${kimbap.tot }" class="form-control mr-sm-2" />
	    <button class="btn btn-info" type="submit">다음 ${kimbap.cnt+1 }개 확인</button>
	</form>
  • 초기화면
  • submit 후 변경된 화면

3.스프링에서 요청값의 VO객체 할당 처리(★★★)

  • public String empSch(Emp sch){
    1) 이렇게 선언하면, 타입과 이름이 맞는 요청값이 위 객체 Emp property에 할당된다.
    모델명을 객체의 소문자 시작명으로 처리된다.
    ex) Emp ==> emp, Dept ==> dept
    2) 모델데이터까지 객체로 자동으로 선언된다. ${emp.ename}
    3) 요청값이 없으면 해당 객체로 default 처리를 한다.
  • 주의 : emp.do 요청값이 없으면 VO객체가 해당 내용을 자동으로 설정하는데
    emp.do?empno=홍길동 : 이렇게 VO객체에 다른 type의 property를 호출하면 url 호출 조차 되지 않는다
    emp.do?empno=&ename=" : 이 경우도 empno를 차라리 설정하지 않으면 호출되지만 empno= 는 ""(공백데이터)와 전달하기 위한 VO객체의 setEmpno(int empno)와 데이터타입이 맞지 않아, http ://localhost:7080/springweb/emp.do 자체가 호출되지 않는다.
    ==>400 에러 뜸(숫자형 데이터일 때 주의)
profile
아자아자 화이팅

0개의 댓글

관련 채용 정보