오늘자 프로젝트생성 & 버전변경
오늘은 [ HomeController.java ] & [ home.jsp ] 삭제하고 직접 만들어보자
[ IndexController.java ] 클래스 생성
@Controller 선언
http://localhost:8080/web/
슬러시가 들어왔을 때 => 첫화면일때 index.jsp 파일로 보내겠다
views 폴더안에
[ index.jsp ] 생성 (UTF-8은 미리 해줬으니 잘 설정되어있음)
/ (슬러시) 요청이 들어온다면 index.jsp (첫화면)를 열어서 보여줌
한글사용하겠다고 <html lang = "ko"> 라고 선언하기도 함 (생략가능)
<meta charset="utf-8"> 만 있어됨!
( 검색엔진 최적화_SEO )
검색엔진 최적화(SEO), 가장 효율적인 방법은? | 가비아 라이브러리 (gabia.com)
[ index.jsp ]
main으로 보내는 a 태그(링크) 추가
첫화면에 main 링크생성
눌러보면 연결은 안됨 (404 에러화면 뜸) _ main.jsp 파일이 없으니까
* 단축키 *
shift + end : 문장한줄 전체선택
ctrl + shift + ? : 주석처리
web.xml 에서 에러페이지 처리하는거 만들자
404에러가 뜬다면 '/error404' 요기 위치로 이동해라
실행해보면 error 페이지가 없다고 나옴
콘솔창에 요렇게 뜸
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/web/error404] in DispatcherServlet with name 'appServlet'
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/web/main] in DispatcherServlet with name 'appServlet'
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/web/error404] in DispatcherServlet with name 'appServlet'
이제 404에러를 위한 페이지인 error404 페이지(error404.jsp파일)를 만들어보자
ErrorController.java 클래스 생성
@Controller 선언해주고
@GetMapping 으로 error404 페이지로 보내주는 로직 만들어.
다시 정리하자면 위에서 설정해준 부분에 이어서 최종적으로는 jsp페이지를 반환하도록 설정해준거.
404에러가 뜬다면 '/error404' 요기 위치로 이동 => '/error404' 요청이 들어오면 error404.jsp 리턴
[ error404.jsp ] 파일 생성
이제 첫화면에서 main 클릭해서 이동해보면 (404오류가 뜨니까)
내가 설정한 404에러페이지(error404.jsp)로 이동
에러를 이미지로 화면에 나타내보자
무료이미지 골라와서 png (배경없는 이미지)로 저장
error.png 이미지를 resources 폴더에 넣어줌
이미지 파일 열어보면 위에 나온것처럼 이미지 저장경로 확인가능
[ error404.jsp ] 에서 body 에 img 태그로 이미지 넣기
<img alt = "(이미지 안뜨면 나올 글자)" src = "(이미지경로)" >
src 경로에서 맨앞의 콤마 (==> 이게 그... 뭐가 있었는데 기억이 안나 찾아보기 )를 지우면 이미지를 못불러옴
img폴더 만들어서 이미지들 넣어주고 경로 아래처럼 재설정
( img가 여러개인 경우 복잡하니 img용 폴더를 따로 생성하는게 좋음)
[ servlet-context.xml ] 에서 아래처럼 resources 경로 설정해주면
*** 오타주의 ***
[ error404.jsp ] 에서 resources 까지 안써줘도 알아서 경로를 잘 찾아감.
이렇게 에러페이지도 원하는대로 설정해 줄 수 있지만
error 발생 이유를 확인하기 힘드니까 개발단계에서는 주석처리 해주는게 좋음
Project - BuildAutomatically 체크 => 자동 서버 재가동
com.phyho.web 패키지 아래에
[ BoardController.java ] 생성
@Controller 선언
1. board리스트 관련화면 만들자
/board 요청을 받으면 board.jsp화면을 보여줘
[ board.jsp ] 생성
index.jsp 에서 board.jsp로 연결하는 게시판 (a링크) 만들어주기
그럼 첫화면( index.jsp) 에서 게시판 링크를 누르면
board.jsp 화면으로 넘어가서 아래처럼 뜸
이번에는 Model 사용해서 페이지를 넘겨보자
지정한 이름으로 데이터를 보낼 수 있음
model.addAttribute("name", "1234");
name value
board.jsp 에서 "name"을 찍으면 1234가 나옴
서비스를 만들자
[ BoardService.java ] 클래스 생성
@Service 선언
컨트롤러는 흐름제어만 하고 일을 하는 애가 서비스
컨트롤러에서 @Autowired 사용해서 서비스와 연결
BoardController 에
Integer 타입인 list를 생성하고
service에게 boardList() 메소드를 실행하라고 시킴
일처리 결과값인 list는 addAttribute () 메소드를 사용해서
"list"라는 이름으로 model에 넣어보내!
이제 BoardService 에 boardList() 메소드생성
내부에 Integer타입인 list 생성하고 for문으로 정수(1~10)값들 넣어주기
(위에서 리턴값 list로 바꿔줘야함***** null을 보내서 오류남 -> 아래 캡쳐 참고)
이제 list 출력해보자
[ BoardController.java ]
서비스가 일을해서 가져온 list의 사이즈가 1보다 크다면 (데이터가 있다면)
"list" 라는 이름을 붙여서 list의 값을 가지고 board로 가세요
데이터 유무를 .isEmpty() 메소드로 다시 표현해보면
/board 요청에 대해
list가 비어있지 않다면, board.jsp 로 이동
list가 비어있다면, index.jsp (첫화면) 로 이동
다시 첫화면으로 돌아갈 때는 redirect 이용! 다시 컨트롤러를 지나서 가도록!
list의 데이터를 없애고(비어있음), index.jsp(첫페이지)에서 게시판을 클릭해보면 그냥 같은 페이지가 뜬다
페이지는 똑같지만 위의 주소창에 model에 붙인 값이 불러와진걸 보면 컨트롤러를 지나온거 => redirect 실행됨.
저장소 추가할건데 전자정부랑 파일업로드 부분 빼고 (pdf순서대로) 가져와보기
[ servlet-context.xml ] 하단부분에
<beans:import resource="classpath:/spring/*-context.xml"/> 추가
=> spring폴더아래 ~context.xml 로 끝나는 파일 가져올거다.
* 만약 spring 폴더 아래 다른폴더들이 있다면 요렇게
<beans:import resource="classpath:/spring/**/*-context.xml"/>
src/main/resource 아래에 spring 폴더 생성
spring폴더에 xml 파일 만들건데 요렇게 선택해서
Next
Next를 눌러서
빈즈에 체크하고 Next - Finish
그럼 요렇게 database-context.xml 파일 생성
DB와 연결을 위해서 pdf에 있는 bean들 넣어주고 계정연결
src/main/resource 아래에
mybis 폴더 생성
config, mappers 폴더 생성
각각의 폴더 안에 xml 파일들 넣어 _ 파일들은 단톡
[ board-mapper.xml ] 에
resultType 으로 DTO 넣어주고, 실행할 쿼리문 작성
SELECT * FROM board LIMIT 10
데이터 일단 10개만 가져와보자
[ BoardDTO.java ] 클래스 생성 & 게시판 필드들 변수선언
getter / setter 생성
[ BoardDAO.java ] 생성하고
@Repository 선언
@Autowired 선언 _ SqlSession연결_ database-context.xml 에 beans로 이미 연결되어 있어서 사용가능
SqlSessionFactory&SqlSession 관련해서 정리된 글 참고하기 *
BoardService.java 에
(있던 for문 list 출력문 지워주고)
@Autowired 선언
DAO한테 boardList() 메소드 진행하라고 일시켜
BoardDAO.java 에서는
sqlSession 한테 selectList() 메소드로 값들 가져오라고 일시킴
그전에 list타입을 Integer => BoardDTO로 바꿔줌
다른 곳들에서도 list타입 Integer => BoardDTO 로 바꿔줌
BoardService 에서도 바꿈
BoardController 에서도 바꿈
오류***
namespace = "boardtest" 로 되어있어서 아래의 오류가 났었음 => namespace = "board"로 수정필요
board-mapper.xml 에서의 namespace랑 DAO에서 불러올때의 이름을 맞춰줘야함
이제 첫페이지에서 게시판 눌러보면 데이터 가져오기 성공
팀뽑기
board.jsp 에 테이블생성
상단에 core 태그 선언문 추가
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
최신글 10개만 가져와보기
쿼리문 변경 : SELECT * FROM board ORDER BY bno DESC LIMIT 10
=> bno 역순(DESC)으로 10개 가져오기
출력결과
btitle (제목) 에 detail 페이지로 보내는 a링크 추가
2. detail 상세보기 화면 = detail.jsp
BoardController.java 에서
/detail 요청이 들어오면 detail로 보내는 로직 생성
(클릭하는 글번호) 요청 글번호인 bno를 가져와서 콘솔창에 출력
출력문 정리하고 출력해보자
게시판에서 128번 글의 제목을 눌러보면 해당 글 번호가 아래처럼 주소창에 뜨고 콘솔창에도 뜸
Collection(list 등등) => size() 메소드
String(스트링) => length() 메소드
Array(배열) => .length (상수)
[ 주소창 검사 ]
(방법1)
for문사용
Charactor 클래스의 메소드
* isDigit() : 주어진 값이 숫자인지 아닌지 판단해서 true / false 로 반환
Character.isDigit(bno.charAt(i))
클래스 숫자야?
숫자면 콘솔창에 참 (true)
숫자가 아니면 콘솔창에 거짓 (false)
=> 주소창 bno에 '1번' 이라고 입력해보면
for (int i = 0; i < bno.length(); i++) {
System.out.println(Character.isDigit(bno.charAt(i)));
}
(방법2)
try / catch 사용
숫자면 콘솔창에 "숫자입니다." 출력
숫자가 아니면 콘솔창에 "숫자가 아닙니다" 출력
'국비과정 > Spring' 카테고리의 다른 글
20230718 _[32일차]_01. Spring 게시판 글쓰기 기능 (0) | 2023.07.18 |
---|---|
20230717 _[31일차]_01. Spring 게시판 생성 + DB연결 (0) | 2023.07.18 |
20230713 _[29일차]_01. Spring 맛보기2 (0) | 2023.07.13 |
20230712 _[28일차]_01. Spring 맛보기 (0) | 2023.07.12 |
20230711 _[27일차]_01. Spring 다운로드 (1) | 2023.07.12 |