티스토리 뷰

 

 

 

 

프로젝트를 새로 생성하고

컨트롤러를 옮긴 경우(복붙) -> 컨트롤러가 2개라고 생각함 -> 서버 clean , 서버 재시작을 습관화 하기
=> 서버 인식문제는 다 해결 된다

 

 

 

 


 

 

 

 

Spring02 (게시판 + 페이징 처리)

 

페이징 처리 순서는

1.DB 만들고

2.VO 만들고

3. mapper.xml 만들고

4. boardMapper 만들고

5. Test(JUnit 사용) 를 꼭 해봐야  안정적이다


boardMapperTest 할 때는 test 의 메소드들 주석처리하고 테스트할것만 하는게 좋음
boardService -> BoardController ->list.jsp(href)

 

 

더보기

@Autowired
private BoardMapper boardMapper;

@Test
public void test() {
// testBoardInsert();
// testBoardList();
// testBoardByBoardId();
// testBoardUpdate();
// testBoardDelete();
testBoardListPagination();
}

 

detail.jsp - 게시판 글 수정 jsp

 

"modify" 페이지에 "boardId"라는 파라미터를 전달한다

${boardVO.boardId}

JavaScript의 템플릿 문자열을 사용하여 동적으로 해당 게시판의 ID 값을 가져온다.

그래서 클릭된 버튼이 속한 게시판의 ID가 "modify" 페이지에 전달된다

 

 

 

BoardController.java

 

boardService.getBoardById(boardId)를 호출하여

boardId에 해당하는 게시글을 가져온 후,

이를 Model 객체에 "boardVO"라는 이름으로 추가한다.

 

그러면 View(jsp)에서는 "boardVO"라는 이름으로 해당 게시글에 접근할 수 있다

 

 

 

 

BoardController.java

 

detail.jsp에서 boardId를 전송받는다 = POST 방식 

 

 

detail.jsp - 게시판 글 수정 jsp

 

POST 방식이니깐 form 으로 보내야한다. 

삭제 버튼을 누르면

'삭제하시겠습니까?' alert 메세지가 뜨고

form 데이터를 전송한다.

 

 

BoardController

 

 

Controller 에서는 @Controller or @Component 를 반드시 해주기!

 

 

 


 

 

scr/main/resources/ com/mokcoding/ex02/persistence/BoardMapper.xml

 

 

서브 쿼리 (쿼리 안에 쿼리)
전체를 가져옴
내림차순 정렬을 해서 
start 부터 end까지 자르기

 

start와 end는 Pagination을 보면 나옴

 

 

Pagnation.java

 

 선택된 페이지의 시작 글 일련번호(rn) - #{start} 는 getter 
선택된 페이지의 마지막 글 일련번호(rn) - #{end}

 

 

페이징 처리 전체 게시글 수

 

 

 

 

전체 게시글 수는 DB에서 가져와야한다!

 

 

select 로 자바에 가져오면 int,string,vo 등 여러 형태가 있는데
vo 형태면 resultType으로 매칭해야한다(?)

 

count 는 숫자가 나오므로 맞춰줘야하는데

 

기본 타입 int 말고 참조타입 Integer를 넣는다! 

 

 

 

list에서 


PageMaker pageMaker = new PageMaker();
pageMaker.setPagination(pagination);
pageMaker.setTotalCount(boardService.getTotalCount());

model.addAttribute("pageMaker",pageMaker);

 


추가하기

 

 


 

 

* persistence 패키지랑 자바 src/main/resources의 mapper.xml 경로랑 같아야한다! 안그럼 에러남 

 

아래 사진 참고!!

 

 

 

 


 

 

Spring03 (댓글 기능 + REST API +  Postman)

 

 

 

REST API :
설계 방식 이다.
비동기방식으로 정보를 주고받기 위한 인터페이스.
기본적으로 *비동기 방식이다.

spring 댓글 기능에 RESTAPI를 쓰는 이유는 특정 게시글 페이지에서 기능이 수행되기 때문에, 비동기 방식을 쓴다. (ex :게시글 조회와 동시에 수행)

또한 url만 보고도 인식하도록 만들어놓은 방식이 REST API이다

데이터를 송수신 할 때는 JSON을 주로 쓴다, 물론 XML을 쓰는 경우도 있다.



REST API를 사용할 때는 서버에서 제공하는 데이터를 클라이언트에서 비동기 방식으로 가져와서
HTML로 화면을 구현하는 것이 일반적 (Web은 비동기로 만들려면 javascript 써야함)

특징 :
- 표준 HTTP 메서드 사용 : REST API는 표준 HTTP 메서드를 사용하여 리소스에 대해 다양한 작업을 수행
- 데이터 송수신 : JSON 또는 XML과 같은 다양한 형태의 리소스를 전송할 수 있음.
- 데이터는 클라이언트에서 비동기 방식으로 화면에 출력

GET: 리소스를 조회
POST: 리소스를 생성
PUT: 리소스를 수정
DELETE: 리소스를 제거

JSON 데이터 구조 예시 )
{    "이름" : "test",
     "나이" : 30,
     "성별" : 남성,
     "주소" : { 
           "도시" : "서울",
           "우편번호" : "123-456"
  },
     "관심사" : ["영화","독서","피아노"]
}

Spring REST API 어노테이션

@RequestBody : HTTP 요청으로 전송된 JSON 데이터를 Java 객체로 변환해주는 스프링 어노테이션
주로 REST API에서 클라이언트가 서버에 보낸 데이터를 수신하고 처리하는데 사용

@ResponseBody : Java 객체를 JSON 데이터로 변환해주는 스프링 어노테이션
주로 REST API에서 서버가 클라이언트에 JSON 데이터를 수신할 때 사용

@RestController : 해당 클래스가 JSON 데이터로 메서드 값을 리턴하도록 지정하는 스프링 어노테이션 *@ResponseBody를 사용하지 않아도 메소드가 자동으로 JSON 데이터 반환 *
  => 이말은 ResponseBody와 함께 사용할 이유가 없다는 말임


*정리*
@RequestBody(Client - >Server)
@ResponseBody(Server -> Client)
@RestController(@ResponseBody과 함께 사용 금지)

 

 

 


 

 

프로젝트 생성시 주의사항 

 

0.초기설정 프로퍼티스 

 

Project Facets에서 

 

Dynamic Web Module 4.0 ,

Java 11

 

( Dynamic Web Module = servlet임. 버전을 동일하게 변경)

 

변경하고 Apply

 

 

 

 

Server 선택하고 Apply

 

 

Targeted Runtimes 에서 서버 선택하고 Apply 

 

 

 

Java Build Path > Libraries > Classpath > Add Library > JUnit 선택하고 Next > Finish 

 

Apply and Close 로 닫기 

 

 

 


1. pom.xml 2에서 복붙하고 name 이랑 artifactname 변경 

 

pom.xml


2. xml 파일들(web,root,service) 삭제 

 


3. config 패키지 생성 후 복붙 , RootConfig 변경

 

 

RootConfig.java

 

 

4. 서버 재시작 하고 

 

프로젝트 우클릭 Maven > Update Project 하기 

 

서버 문제가 생기면 아래 글 보기

 

2024.04.19 - [4월] - [Spring] Port 8080 required by Tomcat v9.0 Server at localhost is already in use. 오류

 

 

 

 


 

 

ProductRESTController.java

 

@GetMapping("{name}") ->  url로 name값을 전송.

@PathVariable("name")String name ->  url로 전송된 데이터를 매개변수에 저장

return new ResponseEntity<Integer>(price, HttpStatus.OK); -> ResponseEntity : HTTP 응답에 상태 코드, 헤더 및 본문(body)

 

 


 

 

 

serviceImple에 @Service 꼭 넣기!

 

 


@Autowired 도 메소드 오버라이드 위에 꼭 넣어줘야함

 

 

 

 


 

 

 

 

detail.jsp

 

 

클라이언트에서 서버로 POST 요청을 보내는 코드

 

'Content-Type' : 'application/json'전송하는 데이터의 형식을 지정

 

이 경우에는 JSON 형식으로 데이터를 전송하기 때문에

'application/json'으로 설정되어 있다.

 

서버는 이 헤더를 보고 요청의 내용 형식을 확인하고 이를 처리할 수 있다.

 

JSON.stringify(obj)는 JavaScript 객체 obj를 JSON 문자열로 변환하는 함수.

이렇게 변환된 JSON 데이터가 서버로 전송된다.

 

 

이 코드는 댓글을 추가하는 기능을 구현하기 위해 사용되었다.

클라이언트에서 댓글 데이터를 JSON 형식으로 서버에 전송하여 처리하고, 성공적으로 처리된 경우에는

'댓글 입력 성공'이라는 경고창을 표시하고,

getAllReply() 함수를 호출하여 업데이트된 댓글 목록을 다시 가져올 것이다.

 

 


 

 

db  연결할 때 pom.xml을 써서 db연결을 해놨기 때문에... 자료에서  ojdbc.jar 파일 연결 설정 안해도댐.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함