20.07.31 SpMVC_001_Order
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 잘못된요청
이런것들은 자바스크립트에서 잡아내야함
자ㅂ바스크립트에서 유효성검사 할거임
주문번호에