Java/Spring MVC

20.07.31 SpMVC_001_Order

우롱차 2020. 7. 31. 15:59
728x90

컨텍스트라 부를거임

bbs : 게시판

 

@RequestMapping (value = "/list")
public String orderList(Model model) {
	List<OrderVO> orderList = oService.selectAll();
    model.addAttribute("ORDERS",orderList);
    
    return "order/list";
}

사용자로부터요청받고

서비스에서 select올 수행한다음에

그 값을 모델에 담고 list.jsp로 보내서 페이지에 나타낼 거임

 

서비스는 controller에게 넘어온 값을 가공해서 

 

controller에 넘겨주는 역할을 할 거임

 

다오를 호출한다는거는 다오맵퍼에있는 태그줭에 하나의 기능을 호출할거라는거라고 생각하면 됌

실제로 작성하게 될 코드는 order-mapper에 있는 태그가 하는 거임

 
  <select id="selectAll" resultType="OrderVO">
  SELECT * FROM tbl_order ORDER BY o_seq
  </select>

VO를 다시 리스트로 묶은다음에 리턴해주라는 말이 여기에 담겨있음

데이터를 가져와서 VO에 담고 리스트 add했던걸 이 코드가 대신 만들어주는 거임

 

${변수명} 뿐만 아니라

${1200 * 25} 이런식으로 계산이 가능하다

이러한 것들을 EL tag라고 한다

>>README에 적힘!

 

<%@taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c"    %>  
<c:set var="korea" value="대한민국" />
core라이브러리에 있는 set이라는 태그를 쓰겠다.
set이 하는일은 korea라는 변수를 만들고
대한민국이라는 문자열을 거기에 넣어서 초기화시키라는 이야기

쓸때는 ${korea}

 

자바썬에 있는 코어 라이브러리르를 c태그로 쓰겠다

반드시 설프클로징해야함.

대표적으로 사용하는 코어라이브러리

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>    
기본값으로 자주사용

html5 템플릿에 저 두개의 줄 추가해주기~

<c:forEach begin="1" end="10" varStatus="index">
<tr>
 <td>${index.count}</td>
 <td>20001</td>
 <td>2020-07-31</td>
 <td>C001</td>
 <td>P0001</td>
 <td>새우깡번들</td>
 <td>1200</td>
 <td>10</td>
 <td>${num1 * num2}</td>
</tr>
</c:forEach>     

forEach문 향상된 for문같은 

반복문이 돌아가는 코드가 core lib에 있다.

반복문을 사용을 하는데 JSTL코드를 이용하는 거임!

        	<p>EL 객체변수 : ${vo.price}
        	</c:forEach>     
        </tbody>
    </table>
	</section>
	<section>
		<p>EL 단일변수 : ${price}, 변수가 선언되지 않더라도 오류가 없다.</p>
		<p>EL 객체변수 : ${vo.price} {vo아래에 들어있는 필드변수}
	</section>

프로퍼티 [price]을(를) 찾을 수 없습니다.

vo에 getter() method가 없는데 호출해서!

<p>EL 객체변수 : ${vo.price} vo에 get price()가 없에서 

vo.가 없다면 오류가 나지않지만

vo.가 붙으면 많이 맞딱드리게되는 exception

오류가 길게 나오는데 오류가 나오면 제일 아래에서부터 거꾸로 거슬러 올라가면

쉽게 오류를 찾을 수 있을 것이다.

행 [55]에서 [/WEB-INF/views/order/list.jsp]을(를) 처리하는 중 예외 발생

이렇게 행번호가나오면 필드변수를 잘못 쓴 경우가 대다수이다.

 

이렇게 Null이 난다하면

Autowired를 빼먹은거

 

@Service를 빼먹으면 bean으로 만들지 말라는 이야기가된다

@오토와이드로 묶엇단 이야기는

서비스를

qualify : 위치정보를 못찾겠다는 이야기

OrderService를 bean으로 못만들겠다 객체를 선언을 하지 못하겠다 한거

@Service를 빼먹었을때 나오는 오류

 

값을 고정된 값을 보내는게 있고

하나는 입력한 값을 보내는게 있다. input태그

구글에게 요청한거 serch에게 ?(물어보기)

q에다가 covid라는 문자열을 보낼테니

serch야 나에게 그 값을 응답해주라 query

?변수=값 : request Query

질의어

구글서버한테 리퀘스트를 요청하는데 값을 보내는데 그거에대한 응답을 해주라고 

 

public String getOrder(String seq, Model model) {
		
	System.out.println("SEQ 값 : " + seq);

고정된 값을 보내고 그것을 요청받는

String seq라고 매개변수만 설정해주면 된다.

 

&변수=값

이런식으로 나열하면서 요청할 수 있다.

 

<input name="name" placeholder="이름을 입력하세요 :)"><br/>
<input name="present" placeholder="선물을 입력하세요 :)"><br/>

 


<form action="insert" method="POST">

폼에는 항상 이 두개의 속성이 따라다닌다.

 

	@RequestMapping(value = "/insert")
	public String insert(String o_num, Model model) {
		
		return null;
	}
	
	// 받는 곳 주소
	@RequestMapping(value = "/insert")
	public String insert(
			String o_num,
			String o_date,
			String o_cnum,
			String o_pcode,
			String o_price,
			String o_qty,
			Model model) {
		
		System.out.println("주문번호" + o_num);
		System.out.println("날짜" + o_date);
		System.out.println("고객번호" + o_cnum);
        메서드가 똑같은게 두개일때 나오는 오류
	@RequestMapping(value = "/insert",method=RequestMethod.POST)
	public String insert(String o_num, Model model) {
		return null;
	}
    form에 POST해놓으면 이걸로 받고
	
	// 받는 곳 주소
	@RequestMapping(value = "/insert",method=RequestMethod.GET)
	public String insert(
			String o_num,
			String o_date,
			String o_cnum,
			String o_pcode,
			String o_price,
			String o_qty,
			Model model) {
form에 GET으로 해놓으면 이걸로 받아서
form에 아무것도 해놓지 않으면 default값이 GET이라 GET으로 와서 보안이 취약해짐
이렇게 두개로 method를 해놔야지 따로따로 값을 받게 된다.

 

	@RequestMapping(value = "/insert",method=RequestMethod.POST)
	public String insert(@ModelAttribute OrderVO orderVO, Model model) {
		
		System.out.println(orderVO);
		
		int ret = oService.insert(orderVO);
		return "redirect:/list";
	}
    이렇게 써주면 아래 코드보다 훨씬 오류를 범할 확률이 적어진다.
    @ModelAttribute 어노테이션에 의해
    
    
    @RequestMapping(value = "/insert",method=RequestMethod.GET)
	public String insert(
			String o_num,
			String o_date,
			String o_cnum,
			String o_pcode,
			String o_price,
			String o_qty,
			Model model) {
		
		System.out.println("주문번호" + o_num);
		System.out.println("날짜" + o_date);
		System.out.println("고객번호" + o_cnum);

		OrderVO orderVO = new OrderVO();
		orderVO.setO_num(o_num);
		orderVO.setO_date(o_date);
		orderVO.setO_cnum(o_cnum);
		orderVO.setO_pcode(o_pcode);

 

칼럼 vo form 에있는 변수명 통일하자

 

---------

입력박스 에 아무것도 입력하지않고 보내면

변수에 아뭐것도 없는 상태로

보내면 가격은 int형이라 아무것도없어서 numberformatexception 잘못된요청

이런것들은 자바스크립트에서 잡아내야함

자ㅂ바스크립트에서 유효성검사 할거임

 

주문번호에 

728x90