dao JAVA package 생성
: interface로 BoardDAO 생성
package dao;
import java.util.List;
public interface BoardDAO {
// CRUD의 기능을 정의
int insert(Object ob); // create
List<String> selectList(); // Read
int update(Object ob); // Update
int delete(int idx); // delete
}
: BoardDAOImpl
package dao;
import java.util.ArrayList;
import java.util.List;
public class BoardDAOImpl implements BoardDAO {
@Override
public int insert(Object ob) {
return 0;
}
@Override
public List<String> selectList() {
List<String> list = new ArrayList<String>();
list.add("감");
list.add("배");
list.add("오렌지");
list.add("용과");
return null;
}
@Override
public int update(Object ob) {
return 0;
}
@Override
public int delete(int idx) {
return 0;
}
}
스프링 컨텐츠 객체 생성
: root-context.xml에서 스프링 컨텐츠의 객체 생성
<bean id="boardDAO" class="dao.BoardDAOImpl" />
<!-- 스프링 컨텐츠의 객체를 만든 것 -->
<bean id="boardService" class="service.BoardServiceImpl">
<constructor-arg ref="boardDAO" />
</bean>
BoardController 생성
: controller 패키지 > BoardController 자바클래스 생성
: BoardController가 Controller라는 것을 인식시킴
/*
@Component : Repository, Service, Controller의 부모 클래스
용도에 맞게 Component보다는 용도에 맞는 클래스를 적는 것을 권장
@Repository
@Service
@Controller
*/
@Controller // 해당 클래스가 Controller라는 것을 인식시킨다
public class BoardController {
public BoardController() {
System.out.println("--- BoardController() ---");
}
}
service 패키지 생성
view > controller > Action > DAO
view > controller > Service > DAO
jsp에서는 url을 컨트롤러 단위로 관리
spring에서는 method 마다 url을 지정해 관리
* DAO는 하나의 테이블을 관리
* Service는 DAO들을 관리
: service패키지에 BoardService를 인터페이스로 생성
package service;
import java.util.List;
public interface BoardService {
int insert(Object ob); // create
List<String> selectList(); // Read
int update(Object ob); // Update
int delete(int idx); // delete
}
: 오버라이딩 생성자 생성
package service;
import java.util.List;
import dao.BoardDAO;
public class BoardServiceImpl implements BoardService {
private BoardDAO boardDAO;
public BoardServiceImpl (BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
@Override
public int insert(Object ob) {
return 0;
}
@Override
public List<String> selectList() {
return null;
}
@Override
public int update(Object ob) {
return 0;
}
@Override
public int delete(int idx) {
return 0;
}
}
setter 인젝션
: BoardController에 세터 인젝션 지정
public void setBoardService(BoardService boardService) {
this.boardService = boardService;
}
: servlet-context.xml에서 setter로 컨트롤러 수동 생성
<beans:bean id="boardController" class="controller.BoardController"> <!-- setter로 수동 생성한 컨트롤러 -->
<beans:property name="boardService" ref="boardService" />
</beans:bean>
이 경우 서버 오류를 발생시키게 되는데
자동생성과 수동생성이 동시에 발생해 생기는 오류이므로
자동생성부분을 삭제해 주면 된다
: auto 생성 컨트롤러의 수동컨트롤러 부분 삭제
<!-- <context:component-scan base-package="com.increpas.di, contorller" /> -->
<!-- Auto 생성 컨트롤러 -->
<!--
auto-detecting
: servlet-context를 통해서 component들을 자동으로 생성해주는 기능
읽어들일 패키지를 적으면 자동으로 읽어들인다
인젝션을 사용할 수 없는 상태 ; 인젝션을 써야 하는 경우 수동생성을 해 준다
자동생성과 수동생성을 동시에 하게 되면 url 맵핑이 겹치므로 에러가 발생한다
-->
<context:component-scan base-package="com.increpas.di" />
<!-- 따라서 오토생성컨트롤러에서 수동생성컨트롤러 부분을 삭제 -->
데이터를 Service에서 바로 넘기기 위한 세팅
: Service 패키지의 BoardServiceImpl에서 return값 수정
@Override
public int insert(Object ob) {
return boardDAO.insert(ob);
}
@Override
public List<String> selectList() {
return boardDAO.selectList();
}
@Override
public int update(Object ob) {
return boardDAO.update(ob);
}
@Override
public int delete(int idx) {
return boardDAO.delete(idx);
}
: BoardController에서 list로 데이터를 가지고 바로 이동시키기 위해 RequestMapping 진행
@RequestMapping("/board/list")
// Spring에서는 Method마다 url Mapping을 한다
// @RequestMapping("URL")
public String list() {
// String 반환 : 넘어갈 페이지의 정보인 view 정보를 반환하겠다는 뜻
return "list"; // /WEB-INF/views/list.jsp로 전달된다 // forward방식으로 포워드 방식으로 넘어간다
}
controller 에 로직 추가
데이터를 가지고 이동하기 위해 로직 추가
: controller > BoardController에 넘어갈 페이지의 정보를 로직으로 구현
@RequestMapping("/board/list")
public String list(HttpServletRequest request) {
List<String> list = boardService.selectList();
request.setAttribute("list", list);
return "list";
}
그런데, 단순히 값만 넘겨야 할 때는 model 방식을 더 많이 사용한다
Model
: 인터페이스
Servlet과 Controller의 중간 매개체 역할
단순히 데이터를 주고받기 위한 객체
request영역과 binding 처리가 되어 있다
model에 Attribute를 저장하면 request영역에 저장하게 된다
request.setAttribute()와 같은 역할
@RequestMapping("/board/list")
public String list(Model model) {
List<String> list = boardService.selectList();
model.addAttribute("list", list);
return "list";
}
출력페이지 구현(뷰페이지)
: list에서 뷰페이지 구현
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 추가
<h3>List Page</h3>
<ol>
<c:forEach var="f" items="${requestScope.list} ">
<li>${f }</li>
</c:forEach>
</ol>
'Backend > Spring' 카테고리의 다른 글
Spring 한글 필터 설정 방법 (0) | 2023.05.23 |
---|---|
Spring 기본 routine : logic Parameter 구동 방식 (0) | 2023.05.18 |
Spring 기본 routine : logic Collection 구동 방식 (0) | 2023.05.18 |
Spring 기본 개념 / 패키지 (0) | 2023.05.17 |
Spring Framework 툴 다운로드 및 세팅 (0) | 2023.05.16 |