-
(국비교육) 32 - Spring 프로젝트 + 개별 게시글 숫자만 받기 + 팀뽑기 넣기개발/국비교육 2023. 7. 14. 13:53
■ 수업 전 혼자 세팅해보기
1. 오늘 날짜 프로젝트 생성
2. 자바 버전 맞추기
3. 서버 실행 화면 뜨는지
4. 깃 올리기
검색엔진 최적화(SEO), 가장 효율적인 방법은? | 가비아 라이브러리 (gabia.com)
■ Spring 프로젝트 만들어보기
기존에 있는 home.jsp 와 HomeController 를 삭제해준다.
왜냐하면 home.jsp 는 오류가 많기 때문에 삭제하고 첫 index.jsp 와 IndexController 를 만들 예정이다.
사진과 같이 첫 페이지에 대한 IndexController 생성해준다.
@Controller 를 통해 컨트롤러 선언해주기
※ GetMapping 이란?
@GetMapping은 Spring Framework에서 제공하는 어노테이션 중 하나로,
HTTP GET 요청을 처리하는 핸들러 메서드임을 나타냅니다.
어노테이션을 사용하여 메서드에 @GetMapping을 지정하면 해당 메서드는 GET 요청을 처리하는 역할을 합니다.
이 어노테이션은 주로 웹 애플리케이션에서 특정 URL 경로로 들어오는 GET 요청을 처리하는 컨트롤러 메서드에 적용됩니다.
예를 들어, @GetMapping("/detail")은 "/detail" 경로로 들어오는 GET 요청을 처리하는 핸들러 메서드임을 나타냅니다. 이 메서드는 해당 경로로 들어오는 GET 요청에 대한 처리 로직을 구현하고, 요청에 따라 적절한 응답을 반환합니다.
따라서 / 라고 요청 들어 왔을때 index.jsp 파일 열어주는 메소드 만들어야 한다.
첫 화면 index.jsp 를 생성해주고 서버를 실행하면 다음과 같이 볼 수 있다.
해당 화면에 main 으로 가는 클릭 버튼을 만들어줘서 보다 편리하게 이동할 수 있도록 설정한다.
아직 우리가 main.jsp 만들지 않아서 오류가 뜬다.
여기서 에러페이지가 나온다면 나오는 화면을 만들어 볼 수도 있다.
에러페이지는 주로 web.xml 하단에다 적어준다.
※ web.xml
web.xml은 Java 웹 애플리케이션에서 사용되는 배치(구성) 서술자(deployment descriptor)로, 웹 애플리케이션의 구성 및 동작 방식을 정의하는 XML 파일입니다.
web.xml 파일은 웹 애플리케이션 서버에게 애플리케이션의 구성 정보를 제공하고, 서블릿 및 필터의 매핑, 리스너, 세션 설정, 에러 페이지 설정 등과 같은 웹 애플리케이션의 동작에 관련된 설정을 포함합니다.
1. 서블릿매핑 : 서블릿과 URL 경로를 매핑시킨다. 클라이언트의 요청이 어떤 서블릿으로 전달되어야 하는지를 정의합니다.
2. 에러페이지 설정 : 에러 페이지 설정(Error Page Configuration): web.xml은 웹 애플리케이션에서 발생하는 예외나 오류에 대한 처리 방법을 정의할 수 있습니다. 예를 들어, 404 오류가 발생했을 때 보여줄 페이지를 지정할 수 있습니다.
다음과 같이 화면에 보인다.
에러 컨트롤러를 통해 error404.jsp 로 가도록 맵핑해준다.
error.jsp 파일을 만들면 다음과 같이 화면이 보인다.
이제 에러 이미지도 보이게 만들어주자.
resources 에 img 폴더를 별도로 만들어주고 error 128 정도 사이즈 이미즈를 넣어준다.
해당 이미지를 클릭하면 경로가 보인다.
img 를 불러오는 코드를 입력해준다.
src 에는 경로를 지정해주고, alt 에는 이미지가 뜨지 않으면 나오는 문구를 적어준다.
주소는 앞선 곳에서 따오면 된다.
. 을 사용하여 그 앞에 상단을 불러온다고 생각하
그러면 화면처럼 이미지가 보인다.
/css/** 의 의미는 /css/ 하위 폴더 모두 /resources/css/ 로 경로 설정해줄게라는 뜻이다.
/** 은 하위폴더를 의미한다.
즉 우리는 ./resources/ 를 짧게 경로 설정했기 때문에 ./img ~ 로 짧게 줄여쓸 수 있다.
다시 주석처리해줘서 우리가 코드를 볼 수 있게 한다.
왜냐하면 문제를 해결해야 하기 때문이다.
■ 게시판 만들기
이제 게시판을 만들어보자
게시판 생성을 위해 컨트롤러를 생성해준다.
여기서는 board 리스트를 보는 화면 jsp 를 맵핑해주고
후에는 상세보기 화면을 보이는 detail jsp 를 맵핑해줄 것이다.
이제 /board 라 요청받으면 board.jsp 를 보여주는 매서드를 만들어준다.
※ 여기서 오타 있다. /board00 가 아니라 /board 가 맞다
화면과 같이 출력 확인 가능하다.
index.jsp 에도 main 과 같이 바로갈 수 있도록 이동 버튼을 만들어준다.
<a href=" "> 로 경로 설정해주면 된다.
Model은 Spring MVC에서 컨트롤러와 뷰 간에 데이터를 전달하기 위한 객체다.
컨트롤러에서 생성된 데이터를 Model 객체에 추가하면,
이 데이터는 뷰로 전달되어 뷰에서 사용할 수 있다.
해당 코드에서는 Model 객체를 파라미터로 받아와서 사용한다.
addAttribute 은 Model 객체에 데이터를 추가하는 역할을 한다.
이 코드는 "name"이라는 키(Key)와 "1234"라는 값(Value)을 가진 데이터를 Model 객체에 추가한다.
=> Model 객체는 컨트롤러와 뷰 사이의 중개자 역할을 하며, 컨트롤러에서 생성된 데이터를 뷰로 전달하여 웹 페이지의 동적인 콘텐츠를 생성하고 표현하는 데 사용됩니다.
이렇게 받은 데이터를 입력해주면 웹페이지에 1234 로 출력할 수 있다.
이제 실제 로직할 수 있도록 서비스 클래스 만든다.
컨트롤러와 서비스를 연결해준다.
서비스에 @Service 넣어준다.
이제 서비스에서 메소드를 불러야한다.
list 형식인데 구성요소 integer 타입들이다.
서비스의 boardList() 라는 메서드의 값이 들어가게 만들어준다.
그리고 이 값을 list 이름(=key)으로 부르고 list 값을 model 에 넣어준다.
다만 아직 service 에 메소드가 없으므로 BoardService 에 boardList() 메소드를 만들어주자.
밑줄 에러를 클릭하면 자동으로 메소드 만들어준다.
클릭을 통해 다음과 같이 자동으로 서비스쪽에 메서드가 만들어진다.
이제 직접 로직들을 넣어준다.
새로운 Integer 타입의 list 객체를 만들어준다.
for 문 통해서 list 에 1부터 10까지 값을 넣어준다.
이제 이 값을 board 에 출력하면 다음과 같이 리스트 값 출력 완료된다.
즉, 값을 만드는 것은 서비스가 다 하고, 값을 연결 흐름은 컨트롤러가 할 것이다.
여기서 데이터가 있다면 list에 붙여주고 board jsp 에 보여주게 설정할 수 있다.
list.size() > 0 을 통해 값이 있는지 여부 체크 가능하다.
redirect: / 를 통해 값이 담겨있지 않다면 다시 컨트롤러로 돌아가게 설정해준다.
/ 가 처음 화면이기 때문에 처음으로 돌아간다.
이처럼 for 문이 돌지 않아 list 에 값이 담기지 않는다.
따라서 리다이렉트 처리 되기 떄문에 다시 Index 처음 화면으로 계속 돌아간다.
대신 찍히지 않은 name 값은 위에 주소로 가는 것을 확인이 가능하다.
다시 재로그인 할 때 주로 이 방법을 쓴다고 한다.
■ jar 기본 기능 추가해주기
여기서부터 넣어주면 된다.
전자정부 페이징 제외 넣어준다.
마리아 버전은 3.0.8 로 바꿔준다.
■ 추가 xml설정 연결
servlet-context.xml 에 다음과 같은 추가 xml설정 연결해준다.
즉 spring 폴더 하위에 -context.xml 과 관련된 모든 파일을 가져와준다는 것이다.
우리는 후에 spring 폴더를 만들어 이 아래 database-context.xml 파일을 넣을 것이다.따라서 db 자료를 가져오기 위해서 해당 작업이 필요한 것이다.
해당 부분이 spring 자리이다.
* Spring 으로 작성했으나 오타로 추후에 수정했다.
해당 폴더에 다음 Spring Bean Configuration File 생성해준다.
※ Spring Bean은 애플리케이션에서 필요한 객체를 생성하고 관리하는 중요한 개념입니다.
bean 누르고 finish 하면 다음과 같이 나온다.
이제 db 값을 가져오기 위해 아래 해당하는 값을 넣어준다.
객체를 불러오는건 ref 이다.
여기서 주의할 점은 해당 부분은 소문자 -mapper 로 바꿔준다.
왜냐하면 우리가 추후 -mapper로 이름 지을 것이기 때문이다.
src/main/resoures 에 각각 폴더 만들어주기
여기서 주의할 점은 폴더를 각각 만들어야 한다.
mybatis 폴더를 먼저 만들고 그 안에 각각 config, mappers 폴더를 만들어야 한다.
즉 사진과 같이 각각의 폴더가 있는 것이다.
각 파일을 해당하는 폴더에 넣어준다.
이제 board-mapper 에서 resultType 설정해준다.
※ 여기서 namespace 추후 board 로 변경하니 참고하자
이렇게 연결 작업이 끝났다.
해당하는 값을 가져오기 위해서 DTO 생성이 필요하다.
이제 우리는 데이터베이스에서 값을 가져올 것이다.
따라서 DTO 파일도 생성해주고 변수 선언 및 getter setter 처리해준다.
값을 받아올 DAO도 생성한다.
그 값을 받을 sqlSession 과도 연결한다.
DAO 와 그 로직을 처리해줄 서비스와도 연결해준다.
이제 boardDAO 가 일하게 한다.
이제 그와 맞는 boardList() 메소드 생성해준다.
클릭하면 자동으로 메소드 만들어준다.
이제 boardDAO 가 일하게 한다.
boardList() 메소드 생성해주고 값을 받아온다.
sqlSession.selectList("board.boardList") 는 MyBatis에서 SQL을 실행하기 위해
사용되는 SqlSession 객체의 selectList() 메서드를 호출하는 구문이다.
selectList() 메서드는 데이터베이스에서 여러 개의 레코드를 조회하는 기능을 수행한다.
여기서 "board.boardList"는 매퍼 파일에서 정의된 SQL 문의 ID를 나타낸다.
"board"는 해당 매퍼 파일의 네임스페이스(namespace)를 의미하며,
"boardList"는 매퍼 파일에서 정의된 해당 SQL 문의 ID입니다.
따라서 sqlSession.selectList("board.boardList")는 "board" 네임스페이스에 정의된
"boardList"라는 SQL 문을 실행하여 여러 개의 레코드를 조회한다.
이때 selectList() 메서드는 조회된 결과를 List<BoardDTO> 형태로 반환한다.
=> 따라서 boardList() 메서드는 "board" 네임스페이스에 정의된 "boardList" SQL 문을 실행하고,
조회된 레코드들을 List<BoardDTO> 형태로 반환한다.
즉, board-mapper 에서 board 네임스페이스에 정의된 boardList SQL 문을 실행한다.
그리고 조회된 레코드들을 List<BoardDTO> 형태로 반환한다.
다만 작업 실행했을떄 오류가 난다.
왜냐면 우리가 처음 선언한 List 타입이 Integer 을 안바꿔줬기 때문이다.
따라서 DAO 타입을 boardDTO 로 바꿔주고 나머지 서비스와 컨트롤러도 타입 변경해준다.
그리고 서버를 구동하면 다음과 같이 출력된다.
우리는 테이블을 통해 표현하고자 한다. 따라서 다음과 같이 만들어준다.
jstl 사용 위해서 위에 선언해주고
for each 를 통해 반복구문을 설정해준다.
이제 리스트에 담긴 값을 가져오면 된다.
그리고 역순 출력을 위해서 board-mapper 에 다음과 같이 ORDER BY bno DESC 를 넣어준다.
그럼 다음과 같이 역순 출력이 된다.
이제 제목을 클릭하면 해당 게시글 페이지로 들어가게 만들어주자.
a 링크를 통해 디테일 뒤로 번호로 들어갈 수 있도록 설정해준다.
이렇게 각 게시물 클릭하면 연결되는 것 확인
단, 아직 상세 보기 없어서 만들어줘야 한다.
detail 상세보기 화면을 컨트롤러에서 만들어준다.
HttpServletRequest 는 request 이미 서블릿이 가지고 있는 기능이다.
getParameter 는 날라오는 값은 무조건 String 으로 처리한다.
따라서 String 으로 bno 처리를 해준다.
그리고 출력 구문을 실행하면 아래와 같이 출력된다.
해당 bno 를 int 타입으로 바꿔준다.
해당 부분은 변환 공부하기 위해 별도로 한 것이니 참고하자.
* 첫 번쨰 방법
클래스 함수(스타틱) 숫자야? 0에서부터 9까지 포함돼?
그러면 게시글 숫자 3개로 구성돼서 true 가 3 번 나온다.
isDigit 을 통해 한 글자 한 글자 검사 방법
* 2번째 방법
try catch
try catch 로 잡는 방법도 있다.
한글을 함께 입력하면 숫자가 아니다 라고 뜬다.
※ 팀뽑기 연습해보기
'개발 > 국비교육' 카테고리의 다른 글
(국비교육) 34 - project1 이어하기2 (메뉴 만들기 + 게시판 글쓰기 + 게시판 꾸미기 + 게시판 연동하기) + 파비콘 생성하기 (0) 2023.07.18 (국비교육) 33 - project1 생성하기 + 4회차 시 (0) 2023.07.17 (국비교육) 31 - Spring 프로젝트 처음부터 데이터 베이스 연결까지 (0) 2023.07.13 (국비교육) 30 - Spring + MVC패턴 + 전자정부 페이징 + Spring jar 세팅 + MyBatis (0) 2023.07.12 (국비교육) 29 - 3회차 시험 + 500번 오류 + Spring 다운로드 + maven 이용하기 + JSTL + Github 이용하기 + Github 토큰생성 (2) 2023.07.11