패키지 파일> controller, dao, dto, service
controller 패키지> BoardController
// 일단 컨트롤러 만들어주고, 나중에 만들어도 된다.
어노테이션 만들기
@controller = 컨트롤러로 만들기
@Service = 서비스로 만들기
@Repository = DAO
@Component = 그 외 객체로 만들기
*데이터 흐름*
controller > service > repository > mybatis > DB
흐름제어 > 로직 > DAO
1.Controller(흐름제어)
- HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 필요한 기능 구현
- 다양한 타입의 파라미터 처리, 다양한 티입의 리턴 타입 사용 가능
- GET방식, POST방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
- 상속/인터페이스 방식 대신에 어노테이션만으로도 필요한 설정 가능
> BoardController : DB에서 값을 불러와서 화면에 찍어준다.Servie에게 일 시킨다.
Boardcotroller
@Controller
public class BoardController {
@RequestMapping(value = "/", method = RequestMethod.GET)
@RequestMapping(value = "/", method = RequestMethod.POST)
@RequestMapping(value = "/")// GET,POST 상관없이 다 들어와
@RequestMapping("/")// GET,POST 상관없이 다 들어와> 축약
//각각 들어오는 요청들을 실행,
}
}
@RequestMapping : 각각 들어오는 요청들을 실행한다.
Boardcotroller
@Controller
public class BoardController {
//@RequestMapping(value = "/", method = RequestMethod.POST)
//@RequestMapping(value = "/")// GET,POST 상관없이 다 들어와
//@RequestMapping("/")// GET,POST 상관없이 다 들어와> 축약
@RequestMapping(value = "/", method = RequestMethod.GET) //각각 들어오는 요청들을 실행
public String board() {
return "board";
}
@RequestMapping(value = "/", method = RequestMethod.GET)
사용자가 /로 들어오는 GET 방식의 요청에 대해서 return> board로 내보낸다
package org.myboard.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class BoardController {
@GetMapping("/board")
public String board(){
return "board";
}
}
이런식으로도 표현 된다.
servlet-context.xml
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="org.mirror.*" />
<beans:import resource="classpath:/spring/db-context.xml"/>
<beans> : 객체 생성 > 스프링에서는 자바에서처럼 new 붙여서 하지않고 스프링이생성해주고, 우린 가져다가 쓴다.
에러가 안나려면 주석을 잘 적어야한다.
화면에 띄워지는 이유 : 컨트롤러에서 리턴 board로 해준 부분이
> 경로 : /WEB-INF/views/board. jsp = return(board)
이렇게 경로가 되기 때문이다.
이것은 servlet-context.xml에서 prefix, suffix 부분을 지정해주었기 때문이다 .
prefix > "/WEB-INF/views/"
suffix >".jsp"
board.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>
<h1>보드입니다.</h1>
</body>
</html>
/요청이 들어오면 board가 뜬다. 이제 창이 뜨면 된다.
계속 404오류가 떠서 여러가지로 찾아봤는데 jsp파일 만들때 이름을 복사해서 컨트롤러 동일이름 부분에
붙여넣기하니까 오류가 해결되었다. 나도 잘 모르겠다^^ .
분명 이렇게까지 오류날 일이 아닌데 하며 봤는데 나도 모르는 오탈자가 있었보다.
아 진짜 완전 보드 이름 불러내기 힘들었다.
일단 config, mappers에 dto랑 sql문이 있다보니까 자꾸 500에러가 떴다.
컨트롤러랑 jsp 연동되는지 확인하려면 두군데 아무것도 없어야한다.
이제 데이터베이스에 있는 보드를 출력해보자.
의존성주입
의존성 : 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미. 하나의 객체가 다른 객체의 상태에 따라 영향을 받는 것을 으미한다. 흔히 A 객체가 B객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다.'라고 표현한다.
주입 : 외부에서 '밀어 넣는것'을 의미한다. 필요한 객체를 얻기 위해서 주체가 능동적인지 수동적인지에 대한 문제가 있다.
의존성+주입 : 어떤 객체가 필요한 객체를 외부에서 밀어 넣는다.
ApplicationContext라는 존재르 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해주는 구조이다.
선생님 필기 내용
//POJO =
//DI = 의존성 주입 =객체를 생성하지 않고 객체를 사용하는 것
//AOP = 관점지향 프로그래밍
//IoC = 제어 역전 = 객체 생명주기 = 스프링에게 제어 권한이 있는 것.
// Life Cycle = (객체 생성 -> 사용 -> 종료)
//결합도는 낮을수록 좋고, 응집도는 높을수록 좋다
//Controller -> Service -> Repository -> Mybatis ->DB
// DAO maridb
//MVC ->
//M(모델) 데이터 = 데이터베이스 값, DAO/DTO/mybatis/DB
//V (뷰) 화면 = Model값을 붙여 사용자에게 보여줍니다.
//C(컨트롤러) 흐름제어 = 사용자 요청이 들어오면 먼저 동작
1. BoardList 가져오기
BoardController 전체 내용
package org.myboard.controller;
import java.util.List;
import org.myboard.dto.BoardDTO;
import org.myboard.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class BoardController {
@Autowired//서비스랑 연결
private BoardService boardService;
@GetMapping("/board")
public String board(Model model){
List<BoardDTO> list = boardService.boardList();
//DAO = 데이터베이스 접속 객체
//DTO = 데이터 베이스 전송 객체
model.addAttribute("list", list);
return "board";
}
}
사용되는 어노테이션 설명
@Controller = 객체생성 = 컨트롤러로 만들기
@Service = 객체생성 = 서비스로 만들기
@Repository = 객체생성 = DAO
@Component = 객체생성 = 그 외 객체로 만들기
@autoWired = 스프링 제공 = 객체의 타입으로 검사 >이걸 제일 많이 씀
@Qualifier("")
@Inject = 자바 제공 =객체의 타입이 일치하면 자동주입
@named("")
@Resources = 자바 제공 =id가 일치하는 것 주입
@Resource(name="")
0.만들어 뒀던 BoardController부터 시작
package org.myboard.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class BoardController {
@GetMapping("/board")
public String board(){
return "board";
}
}
/board > 왜 오류가 나는걸까.............ㅎ
일단 넘기자.
>서비스와 연결해 주기 : 데이터는 서비스에서 온다.
@Autowired
private BoardService boardservice; //서비스랑 연결합니다.
>불러올 자료 만들어주기
@GetMapping("/board")
public String board(Model model) {
//나중에 되면 변환되는 녀석으로 쓰지만 일다 모델로 쓴다.
List<BoardDTO> list = boardService.boardList();
//앞에 타입은 여러개라면 LIST<멤버DTO>에 들어가 있어요
model.addAttribute("list", list);
return "board";
}
List<BoardDTO>를 사용해서 불러온다.
이때, DTO 만들어줘야한다.
1.BoardDTO만들기
데이터베이스 테이블 보고 만들어준다.
package org.myboard.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class BoardDTO {
private int board_no,board_count;
private String board_title, board_content,board_date, board_write;
}
롬복 만들어주기> @Getter,@Setter
2.BoardService 만들어주기 > @Service 어노테이션 사용
package org.myboard.service;
import java.util.List;
import org.myboard.dao.BoardDAO;
import org.myboard.dto.BoardDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BoardService {
@Autowired//DAO와 연결
private BoardDAO boardDAO;
public List<BoardDTO> boardList() {
return boardDAO.boardList(); //보드DAO>보드리스트
}
}
컨트롤러때와 같이 @Autowired 해준다.
리턴값 잘 생각해보기.
3.BoardDAO 만들어주기 > @Repository 어노테이션 사용
package org.myboard.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.myboard.dto.BoardDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class BoardDAO {
@Autowired
private SqlSession sqlSession;
public List<BoardDTO> boardList() {
return sqlSession.selectList("board.boardList");
}
}
4.board-mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="board">
<!-- 게시판 -->
<select id="boardList" parameterType="Integer" resultType="boardDTO">
SELECT * FROM boardview LIMIT 0,10
</select>
</mapper>
5.board-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<!-- boardDTO 의 경로 알려주기 -->
<typeAlias type="org.myboard.dto.BoardDTO" alias="boardDTO"/>
</typeAliases>
</configuration>
typeAliases 에서 별명 입력해 줘야 mapper에서 resultType에 별명 쓸 수 있다.
6.board.jsp
상단에 jstl 선언문 써주기
<!-- jstl 선언문 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- jstl 선언문 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판</title>
</head>
<body>
<h1>보드</h1>
<table>
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>글쓴이</th>
<th>날짜</th>
<th>조회수</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list }" var="row">
<tr>
<td>${row.board_no }</td>
<td>${row.board_title }</td>
<td>${row.board_write }</td>
<td>${row.board_date }</td>
<td>${row.board_count }</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
BoardDTO에 있는 것들과 맞아야 테이블이 나온다.
'복습 > 스프링-게시판만들기' 카테고리의 다른 글
2024.02.28 myboard- 부트스트랩 활용 menu.jsp, board.jsp (2) | 2024.02.28 |
---|---|
2024.02.22 myboard- 설치 및 환경설정 (0) | 2024.02.22 |