개발 공부/WEB

session / MVC

공부하는개발자_ 2023. 7. 14. 17:40

 

html -> jsp로 확장자 변경할 경우 property에서 인코딩 UTF-8해주어야 함

응답할 형식을 한번 만 결정해주어야 한다.

실행할 때 include태그를 이용하여 포함하면 정상 포함된다. 

 

로그인 여부에 따라 메뉴가 바뀌도록 설정

로그인에 마우스를 가져가면 아래와 같이 path경로가 뜸!

http://localhost:888/frontback/jsp/login.html

 

<a class="logo" href="<%=contextPath%>/jsp/layout.jsp">스타벅스코리아</a>

상대경로보다 <%=contextPath%>사용 권장

 

 

 

 

세션 속성(이름 :"loginedId")을 제거

요청 성공 시 , 중복된 경우 status를 서블릿에서 ( id 중복시 0, 사용가능 시 1로 설정) 응답

CustoemrRepository - selectById() 재사용

return타입으로 성공실패를 확인하지 않고 예외처리로 확인한다.

idDupchk에서 예외처리로 되면 중복으로 판단.

 

 

 

 

 

 

A형태 
서버측에서 할 일이 많음


B 형태
js해석이 json을 해석해줌
요청과 응답이 빠름
웹브라우저에서 할 일이 많음
html/js문서가 미리 제공되어야 함

package는 어떻게 구분하는게 좋은가?
domain(업무별)로 주면 좋다

 

도메인 주도 개발 기법(인프라 구축,개발자,기획자)

고객팀/ 상품팀/ 주문

DB도 각 팀별로 따로 주게되면 라이트하다.

이런경우 join하지 않고 소켓을 통해 요청하는 방법이 있다.

 

 

 

페이지 그룹

service에서 총 건수 반환, 총 상품 반환

각각 서블릿이 얻어와서 속성을 만들어서 jsp에 전달해서 list, count따로 반환해야 하기때문에

list와 총 건수가 포함되어있는 javabean형태의 클래스로 반환.

 

if(totalPage < endPage){ endPage = totalPage;
}

 

productlistresult.jsp파일에서는 직접 계산 하지 않고, getter()로 PageBean에 값(startpage/endpage)얻어옴

 

 

확장성 높도록 변경 

 

 

 

jsp내에서는 html형태로 응답을 보낼수도 있고 jsp문법을 쓸 수 있다. 확장자가 html인경우 내부에 jsp문법을 쓸 수 없다.

 

 

장바구니 넣기 작업

 

4가지 객체 모두 attribute를 갖는 공통점이 있다. 

장바구니를 어느 객체에 저장할까?

request객체는 응답하면 메모리에서 자동 삭제되므로 좋지 않다.

ServletContext의 attribute로 저장한다고 가정하면, 공용 장바구니가 된다.

(A사람과 B사람이 저장하면 두 사람이 담은 상품이 한 카트에 담기게 됨)

HttpSession : 응답할때마다 없어지는 객체도 아니고, 공유 객체도 아니다. 클라이언트별 서버 객체.

key와 value로 구성. ( name : cart, key-상품번호/ value- 상품수량)

 

 

DB에 저장할 내용이지만 session으로만 관리해보기.

 

if(cart == null) {

cart = new HashMap<>();

session.setAttribute("cart", cart);

}

장바구니를 한번도 사용하지 않은 세션(고객)은 null이므로 객체가 생성됨

 

 

if(totalQuantity != null) {

quantity += totalQuantity;

}

해당상품이 있는 경우, 수량을 업데이트 하고 상품이 장바구니에 없는경우 장바구니에 수량 추가

서블릿 만들때마다 톰캣 리스타트 필요!

 

 

 

 

//location.href=`${backURL}/productlist`

 

 

 

 

 

장바구니

 

 

복합 키를 대신할 대체 키를 만들면 된다

 

 

ORDER_INFO  

ORDER_LINE 

 

자식엔터티 (orderline)

비회원은 주문 안되는 시스템. 로그인 된 회원만 주문 가능하도록.

 

 

 

DB와 일할 respository는 한개만 만듦

주문기본(orderInfo)/ 주문상세(orderline) 테이블 따로이지만 repository에서 처리하도록. service로 가공해서 쓰도록.

 

 

 

 

ordersevice와repository사이에서 정보전달을 해야하는데 dto가필요

data transfer object필요  (orderinfo/ orderline 클래스 필요)

dto는 왜 orderinfo와 orderline을 따로 하는가? 

orderinfo와 orderline으로 정보를 나타내줄 클래스 따로 필요.

dto는 값을 갖고있어야할 객체이다보니 자료가 테이블별로 쪼개져 있으니 쪼개진 자료를 각각 구분해내기위해

dto클래스도 구분해줄 필요가 있다.

 

 

서블릿이 제어자의 역할을 담당하고 있는데, orderService ()몇번 호출할지, 어떤것을 호출할지 서블릿에서 결정해야한다

 

 

 

DB와 연결시 멤버변수connection하나로 여러 메서드 호출하면 안 됨!

다수의 사용자가 동시에 접속할 수 있는 환경을 만들기 위해 연결이 끝날때마다 연결 끊어버림.

메서드 호출 시 DB연결해서 빨리 사용 후 메서드 사용 뒤 , 연결을 끊어 다른 사용자가 사용할 수 있도록 하는 것이다.

객체 생성 시 connection이 미리 만들어져 있는경우, connection이 망가져 있으면 connection을 다시 만들어야함

객체와 무관하게 메서드 호출 시 DB연결해서 사용하고, 메서드 끝나면 DB연결 끊어 사용

 

 

 

 

seq.CURRVAL

DB와 연결된 상태에서 NEXTVAL없이 CURRVAL만 사용할수 없다.

 

 

public void insert() {}

 

 

insert()매개변수 중 OrderInfo info만 전달.

info의 멤버변수로 주문번호, 주문자아이디, 주문상세 정보도 갖도록 함.

Controller는 요청전달 데이터 받아서, 결과받아와서 jsp페이지로 이동하고 끝!

 

 

 

 

 

 

SQL구문을 한번에 전달해서 

한번에 반환하려면 결과값을 반환받을 자료형이 필요한데 Map<list>로 하기엔 불편하니

class타입 orderInfo타입으로 만들도록 해야한다. has a 관계를 알아야 JPA도 공부할 수 있다.

간결한 SQL구문 처리할 줄 알아야 한다. 

SQL구문 도출되었을 때 누가 누구로 has a관계로 가질지는 모든 화면의 sql도출을 해봐야 나옴.

 

 

 

List에 2개의 orderinfo객체

같은 주문번호별 line객체를 만들어주면 된다.

select한 행 하나씩이 orderline타입의 객체. 행 별로 line객체를 만듦.

주문번호별로 orderinfo객체가 각각만들어지고 list에 담겨 return되도록 해주면 된다

 

주문번호가 다르면 orderinfo객체를 새로 만들어야 함.

orderinfo객체는 list에 add가 되어야함.

 

 

 

 

'개발 공부 > WEB' 카테고리의 다른 글

Mybatis  (0) 2023.08.02
싱글톤패턴/ 파일 업로드  (1) 2023.07.19
Session Tracking : 상태 정보 유지기술  (0) 2023.07.13
jsp / Servlet  (0) 2023.07.12
redirect / forward  (1) 2023.07.11