프로젝트 실습(2)

cy8erpsycho·2023년 8월 30일
0

스프링

목록 보기
17/29
post-thumbnail

어느 사이트던 루트 컨텍스트를 가진다.

컨트롤러 생성

@Controller 어노테이션

board > list.jsp

list.jsp

목록페이지

<table width="100%">
	<thead>
		<tr>
			<th></th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td></td>
		</tr>
	</tbody>     						
</table>    

테이블의 토대 작성

테이블의 th 와 td는 같게 하는것이 일반적이다.

페이지를 들어갔을때 어떤 내용을 루트로 설정해서 보여줘야지는 백엔드에서 설정하는 것이다.

리디렉트 명령으로 처리할 수도 있다.

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);

		
		return "redirect:/board/list";
	}

/로 요청을 했을때 redirect를 통해서 /board/list의 jsp로 만들어낸 결과물을 보여준다. jsp는 사용자에게 보여지는 것이 아니다 .

이 상태에서 리스트를 받은건 컨트롤러 쪽이다. 이것을 뷰로 전달하기 위해 쓰는게 model이다.

	@GetMapping("/list")
	public void list(Model model) {
		log.info("리스트요청");
		model.addAttribute("list", service.getList());
	}

그럼 이제 jsp 쪽에서 el형식으로 변수로 받을 수 있게 된다.

위와 같이 컨트롤러에서 jsp로 넘겨줄때 이름이 반드시 동일해야 데이터를 전달받을 수 있다.

  • ApplicationScope

  • SessionScope : 중요한 데이터

  • RequestScope : 요청을 하고 응답을 하는 것이 한 사이클
    model은 여기에 속한다.

  • PageScope : 페이지 내에서만 유용한 scope.

위와 같이 requestScope을 하면 모두 살펴보지 않기때문에 속도가 빠르다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> jstl를 쓸것라는 선언이다,

<c:forEach> core라이브러리에서 제공하는 함수이다.

위와같이 코드를 작성하면 데이터가 잘 출력되는 것을 볼 수 있다.


4. lo4j를 사용하여~

log4j는 두군데가 있다. main의 resouce와 test의 resource가 있다. 서비스에 나오는 러ㅗ그도 출력하려면 log4j.xml에 선언을 해줘야 한다.

EL에서 ${board.bno}

board객체의 bno 프로퍼티를 찍어라

이는 board.getbno을 뜻하는데

b는 B로 대문자로 바뀐다

board.getBno의 함수가 호출된다.

EL은 형변환이 자유롭다 그래서 만약 ${board.bno}+ ${board.bno}을 수행하면 long타입의 연산을 수행할수있다.

  • audit log : 감사로그, 데이터를 많이 출력하기 때문에 무겁다.

오후수업시작

Mapper에 추가적인 작업을 선언하는 것이 첫번째

sql developer에서 직접 넣어보기

INSERT INTO tbl_board(bno, title, content, writer)
VALUES (seq_board.nextval, '1', '2', '3')

BoardMapper.xml 에 insert 쿼리를 만든다. 파라메터로 받아와서 넣는 부분을 수정한다

<insert id="insertSelectkey">
	<selectKey order="BEFORE" resultType="Long" keyProperty="bno">
    <![CDATA[  
    SELECT seq_board.nextval FROM dual
  	]]>
    <selectKey>
  	<![CDATA[
	INSERT INTO tbl_board(bno, title, content, writer)
	VALUES (seq_board.nextval, #{title}, #{content}, #{writer})
	]]>
</insert>  
  	<![CDATA[
	INSERT INTO tbl_board(bno, title, content, writer)
	VALUES (#{bno}, #{title}, #{content}, #{writer})
	]]>

seq_board.nextval#{bno} 로 수정한다.
select에서 받아온 bno의 값을 넣는 것이기 때문이다.

order="BEFORE" : INSERT 보다 selectkey를 먼저 수행해라
resultType : 형식
keyProperty : 지정값

이렇게 설정하고 나서 테스트 해보기

BoardMapperTests.java

	@Test	
	public void testInsertSelectKey(){
		BoardVO board = new BoardVO();
		board.setTitle("안녕나야");
		board.setContent("잘지내니");
		board.setWriter("어제");
		mapper.insertSelectKey(board);
	}

결과

먼저 bno의 값이 수행되서 bno의 값을 가져오게 된다.

값이 정상적으로 나오면 이제 서비스로 이동해서 코드를 작성한다.

BoardService는 비즈니스 로직이라서 사용자 입장에 맞는 register()메서드를 등록한다.

그후 ServiceImpl에서 구현을 한다.

BoardServiceTests에서 테스트를 해본다.

	@Test
	public void testRegiter() {
		BoardVO board = new BoardVO();
		board.setTitle("테스트");
		board.setContent("테스트");
		board.setWriter("테스트");
		log.info("실행전 : " + board.getBno());
		service.register(board);
		log.info("실행후 : " + board.getBno());
	} 

모두 처리가 끝났으면, 컨트롤러를 수정할 차례이다.

입력을 위한 화면이 필요하다. 즉, 입력용 페이지 요청이 들어오면

.jsp 파일을 보여주면 된다.

컨트롤러에 메소드를 추가한다.

public void register() {
}

void 요청이기 때문에 경로상에 그대로 jsp파일이 존재해야 한다.

  • register.jsp

서버로 데이터를 보내기 위해 기본적인 <form>을 만들어준다.
중요한 속성 2가지 action과 method가 있다. method의 속성에 아무런 값이 없다면 get이 디폴트로 된다.
action에는 url을 작성한다.

컨트롤러에는 post방식의 요청을 받을수있도록 @PostMapping을 추가해준다.

이렇게 기본적인 토대를 만들어준다.

그 후에 <form>태그에 데이터입력을 받을수 있는 <input> 태그를 추가한다.

버튼도 추가한다. 서밋버튼과 함께 초기화 버튼도 작성한다.

마지막으로 컨트롤러에

service.register(board); 를 작성하고 register 페이지에 데이터를 입력하고 등록했을때 데이터가 추가되면 성공이다.

성공했으면 콘솔페이지에서 위와 같이 출력된것을 볼수있다.

0개의 댓글