
서비스와 DAO영역은 인터페이스를 이용해서 만든다.
흐름 ★\

예시는 데이터를 받아서 화면에 다시 구현하지만
/ 초기화면 - controller - service계층 - DAO계층 - service계층 - controller - 요청화면
실제로 사용은
/ 초기화면 - controller - service계층 - DAO계층 - DB - DAO계층 - service계층 - controller - 결과화면

@service 계층구현
Controller의 역할을 나눠주는 역할

예시 1 ) new 연산자를 이용한 service객체 생성 및 참조

controller
package com.simple.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.sample.command.ScoreVO;
import com.simple.score.service.ScoreServiceImpl;
@Controller
@RequestMapping("/service")
public class ServiceController {
//1. 지역변수가 아닌 전역변수로 선언 (재활용 가능)
ScoreServiceImpl service = new ScoreServiceImpl();
//화면출력
@RequestMapping("/scoreRegist")
public String registView() {
return "service/scoreRegist";
}
//폼요청
@RequestMapping(value="/regist", method = RequestMethod.POST)
public String regist( ScoreVO vo ) {
// 값이 잘 들어오는지 확인하기 위해서 출력해본다.
// System.out.println(vo.toString());
// 1.객체생성
service.regist(vo);
return null;
}
}
scoreRegist.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="regist" method="post">
이름 : <input type="text" name="name">
영어 : <input type="number" name="kor">
국어 : <input type="number" name="eng">
<input type="submit" value="등록">
</form>
</body>
</html>
예시 2) 스프링 설정파일을 이용한 서비스 객체생성 및 의존객체자동주입
@Autowired

servlet-context.xml
기존 부분에 아래의 태그 추가
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- 2번째 방법 service영역을 빈으로 설정 -->
<beans:bean class="com.simple.score.service.ScoreServiceImpl"></beans:bean>
</beans:beans>
controller
package com.simple.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.sample.command.ScoreVO;
import com.simple.score.service.ScoreServiceImpl;
@Controller
@RequestMapping("/service")
public class ServiceController {
// 2.service를 bean으로 생성한다. 의존객체 자동주입
@Autowired
ScoreServiceImpl service;
//화면출력
@RequestMapping("/scoreRegist")
public String registView() {
return "service/scoreRegist";
}
//폼요청
@RequestMapping(value="/regist", method = RequestMethod.POST)
public String regist( ScoreVO vo ) {
service.regist(vo);
return null;
}
}
예시 3 ) 어노테이션을 이용해서 서비스 객체 생성 및 의존 객체 자동 주입

3-1)




3-2)

3-3) 인터페이스를 사용하기
장점 : 여러개의 구현체를 만들 때 어노테이션의 이름만 변경하면 쉽게 변경할 수 있다.

인터페이스에 추가하고 메서드 오버라이딩해서 추가하고..
인터페이스를 사용하면 메서드의 갯수가 많아졌을 경우 수정이 쉽다.
@ DAO 계층구현
DB의 역할을 나눠주는 역할 (과부화 방지)


jstl문법 사용하기 위해서 jsp파일 위쪽에 넣어야할 태그
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
전체 예시 )
초기화면 (scoreRegist.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="regist" method="post">
이름 : <input type="text" name="name">
영어 : <input type="number" name="kor">
국어 : <input type="number" name="eng">
<input type="submit" value="등록">
</form>
</body>
</html>
VO ( ScoreVO.jsva ) - read only 값을 확인하는 기능
package com.sample.command;
public class ScoreVO {
private String name;
private String kor;
private String eng;
public ScoreVO() {
super();
}
public ScoreVO(String name, String kor, String eng) {
super();
this.name = name;
this.kor = kor;
this.eng = eng;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getKor() {
return kor;
}
public void setKor(String kor) {
this.kor = kor;
}
public String getEng() {
return eng;
}
public void setEng(String eng) {
this.eng = eng;
}
@Override
public String toString() {
return "ScoreVO [name=" + name + ", kor=" + kor + ", eng=" + eng + "]";
}
}
Controller ( ServiceController.java )
@Autowired만을 통해 의존성을 주입해도 되지만 @Qualifier("의존성연결이름")를 사용해서 원하는 곳에 연결해도 된다, 하지만 생략 가능하다.

package com.simple.controller;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.sample.command.ScoreVO;
import com.simple.score.service.ScoreService;
import com.simple.score.service.ScoreServiceImpl;
@Controller
@RequestMapping("/service")
public class ServiceController {
//1. 지역변수가 아닌 전역변수로 선언 (재활용 가능)
// ScoreServiceImpl service = new ScoreServiceImpl();
// 2.service를 bean으로 생성한다. 의존객체 자동주입
//3. @Service로 빈으로 생성하고, 의존객체 자동주입
@Autowired
@Qualifier("이름")
private ScoreService service; //인터페이스 타입 선언
// ScoreServiceImpl service;
//화면출력
@RequestMapping("/scoreRegist")
public String registView() {
return "service/scoreRegist";
}
//폼요청
@RequestMapping(value="/regist", method = RequestMethod.POST)
public String regist( ScoreVO vo ) {
// 값이 잘 들어오는지 확인하기 위해서 출력해본다.
// System.out.println(vo.toString());
// 1.객체생성
service.regist(vo);
return "service/scoreResult";
}
//목록화면
@RequestMapping("/scoreList")
public String scoreList(Model model) {
//data조회
ArrayList<ScoreVO> list = service.getList();
model.addAttribute("list", list);
return "service/scoreList";
}
//삭제요청
@RequestMapping("/delete")
public String delete(@RequestParam("num") int num) {
service.delete(num);
// System.out.println(num);
return "redirect:/service/scoreList";
}
}
Service 계층 ( ScoreService, ScoreServiceImpl )
Controller에서 전역변수로 선언한 인터페이스 타입 변수 참고 (private ScoreService service;)
인터페이스
package com.simple.score.service;
import java.util.ArrayList;
import com.sample.command.ScoreVO;
public interface ScoreService {
// service구현제에서 사용할 추상메서드의 모형을 선언
public void regist( ScoreVO vo );
public ArrayList<ScoreVO> getList();
public void delete(int num);
}
상속 구현 메서드
package com.simple.score.service;
import java.util.ArrayList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import com.sample.command.ScoreVO;
import com.simple.score.dao.ScoreDAO;
//@Service //@Component //@Repository //@Controller
@Service("이름") //빈의 이름 명시
public class ScoreServiceImpl implements ScoreService {
@Autowired
@Qualifier("yyy") //생략가능
private ScoreDAO scoreDAO;
public void regist( ScoreVO vo ) {
// System.out.println(vo.toString());
scoreDAO.regist(vo);
}
@Override
public ArrayList<ScoreVO> getList() {
// ArrayList<ScoreVO> list = scoreDAO.getList();
// return list;
return scoreDAO.getList();
}
@Override
public void delete(int num) {
// TODO Auto-generated method stub
scoreDAO.delete(num);
}
}
DAO 계층 ( ScoreDAO , ScoreDAOImpl )
인터페이스
package com.simple.score.dao;
import java.util.ArrayList;
import com.sample.command.ScoreVO;
public interface ScoreDAO {
public void regist(ScoreVO vo);
public ArrayList<ScoreVO> getList();
public void delete(int num);
}
상속 구현 메서드
package com.simple.score.dao;
import java.util.ArrayList;
import org.springframework.stereotype.Repository;
import com.sample.command.ScoreVO;
@Repository("yyy") //생략가능
public class ScoreDAOImpl implements ScoreDAO {
//데이터베이스
ArrayList<ScoreVO> list = new ArrayList<>();
@Override
public void regist(ScoreVO vo) {
// TODO Auto-generated method stub
// System.out.println("DAO영역: " + vo.toString());
list.add(vo); //insert
System.out.println(list.toString());
}
@Override
public ArrayList<ScoreVO> getList() {
return list;
}
@Override
public void delete(int num) {
// TODO Auto-generated method stub
list.remove(num);
}
}
다시 서비스 계층으로 넘어간 뒤 컨트롤러를 타고 컨트롤러의 리턴에 들어있는 요청페이지로 넘어간다.
요청페이지
ScoreResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>등록되었습니다.</h3>
<a href="scoreList">목록화면</a>
<a href="scoreRegist">다시 등록하기</a>
</body>
</html>
ScoreList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>목록화면</h3>
<c:forEach items="${list }" var="article" varStatus="num">
${num.index }
${article.name }
${article.kor }
${article.eng }
<a href="delete?num=${num.index }">삭제</a>
<br/>
</c:forEach>
</body>
</html>
'Spring' 카테고리의 다른 글
| [MySQL] 데이터베이스 연결 (0) | 2023.02.03 |
|---|---|
| [MySQL] 다운로드 및 사용방법 (0) | 2023.02.02 |
| 스프링 MVC 객체구현 (@Controller) -(3) (0) | 2023.02.02 |
| 스프링 MVC 객체구현 (@Controller) -(2) (0) | 2023.02.01 |
| 스프링 MVC 객체구현 (@Controller) -(1) (2) | 2023.02.01 |