60. 스프링으로 게시물 등록하기

hanahana·2022년 9월 7일
0

Spring 학원수강

목록 보기
12/45
post-thumbnail

먼저 게시판 입력창을 만들어보자

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시글 작성</title>

<!-- include libraries(jQuery, bootstrap) -->
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<!-- include summernote css/js -->
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote.min.js"></script>
</head>
<body>
	<h1 align="center">게시글 등록 페이지</h1>
	<br> <br>
	<form action="/board/register.kh" method="post">
		<table align="center" border="1">
			<tr>
				<td>제목</td>
				<td> <input type="text" name="boardTitle"> </td>
			</tr>
			<tr>
				<td>작성자</td>
				<td><input type="text" name="boardWirter"></td>
			</tr>
			<tr>
				<td>내용</td>
				
				<td><textarea id="summernote" name="boardContents" style="resize:none; width:500px; height:100%;"></textarea>
				</td>
			</tr>
			<tr>
				<td>첨부파일</td>
				<td> <input type="file" name="boardFile"> </td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value ="등록">
					<input type="reset" value="취소"> 				
				</td>
			</tr>
		
		</table>
	
	
	</form>
	
	<script>

 
 $('#summernote').summernote({
	  height: 300,                 // set editor height
	  minHeight: null,             // set minimum height of editor
	  maxHeight: null,             // set maximum height of editor
	  focus: true,                  // set focus to editable area after initializing summernote

	});
</script>
</body>
</html>
  • textarea에 summernote에서 제공하는 스타일을 만들어 다양한 색이나 글자크기를 지정할수있도록 만들었다
  • 실제로 적용해보니 해당태그가 모두 입력된 값이 저장되었다.
  • 폼액션은 post이며 submit을 누르면 내가 입력한 글이 저장된다.

저장할 테이블

Create table board_tbl(
    board_no number primary key,
    board_title varchar2(100) not null,
    board_contents varchar2(2000) not null,
    board_wirter varchar2(30) not null,
    board_file varchar2(300),
    board_rename varchar2(300),
    board_fildpath varchar2(500),
    board_count number default 0,
    b_create_date date default sysdate,
    b_update_date date default sysdate,
    b_status varchar2(2) default 'Y'
);
  • 실제 작성한 테이블의 조건은 이렇다, 제목, 내용, 글쓴이는 반드시 입력되어야 한다.

Controller로 작성폼jsp연결하기

	@RequestMapping(value="/board/writeView.kh", method=RequestMethod.GET)
	public ModelAndView shoWBoardWirte(ModelAndView mv) {
		
		mv.setViewName("board/boardWriteForm");
		
		return mv;
		
		
	}
  • /board/writeView.kh로 접속하면
  • views/board/boardWriteForm.jps로 연결된다.
    • 이건 sevlet-context.xml에 지정되어있기때문에 그렇게 처리된다.

Controller에서 작성한 글 처리하기

@Controller
public class BoradController {
	
	@Autowired
	BoradService bService;
	
	@RequestMapping(value="/board/writeView.kh", method=RequestMethod.GET)
	public ModelAndView shoWBoardWirte(ModelAndView mv) {
		
		mv.setViewName("board/boardWriteForm");
		
		return mv;
		
		
	}
	
	@RequestMapping(value="/board/register.kh", method = RequestMethod.POST)
	public ModelAndView registBoard(ModelAndView mv,
			@ModelAttribute Board board
			) {
		
		try {
			int result = bService.registerBoard(board);
			mv.setViewName("redirect:/board/list.kh");
			
		}catch (Exception e) {
			mv.addObject("mgs",e.getMessage());
			mv.setViewName("/common/errorPage");
		}
		
		
		return mv;
	}

}
  • @Controller 선언을 잊지 말것
  • @Autowired는 스프링에 있는 클래스로 대상에게 의존성을 주입해 새로운 인스텐스로 선언하지 않고도 사용할수있다.
  • /board/register.kh와 연결할수있도록 @RequestMapping(value="/board/register.kh", method = RequestMethod.POST) 메소드 위에 반드시 써주어야 한다.
  • int result = bService.registerBoard(board);
    • 이 코드에 따라 쓰여진 값은 Service클래스의 registerBoard로 이동한다.
    • result는 쿼리문 실행시 업데이트된 행의 수만큼 반환된다, 여러개의 행을 수정하거나 삽입하는 경우는 별로 없기에 보통 1이 반환된다.
  • public ModelAndView registBoard(ModelAndView mv,@ModelAttribute Board board)
    • ModelAndView를 활용한 return과 request값 전송을 사용하였다.
    • @ModelAttribute를 활용하면 Board의 변수와 같은 값의 form네임은 자동으로 Board클래스의 set해주어 board에 저장된다.

Service

@Service
public class BoradServiceImple implements BoradService {
	@Autowired
	SqlSessionTemplate session;
	@Autowired
	BoardStore bStore;
	

	@Override
	public int registerBoard(Board board) {
		int result = bStore.insertBoard(board, session);
		return result;
	}

}
  • @Service 해줘야 스프링이 클래스를 인식하고 처리해준다.
  • @Autowired 를 통해 SessionTaplate BoardStore를 new 선언없이 새로운 인스탠스로 만든다.
  • session값과 반환값을 Store로 보낸다

Store

@Repository
public class BoardStoreLogic implements BoardStore{

	@Override
	public int insertBoard(Board board, SqlSessionTemplate session) {
		int result = session.insert("BoardMapper.insertBoard",board);
		return result;
	}

}

@Repository 를 써줘야 store클래스를 인식하고 스프링이 연결해준다.

int result = session.insert("BoardMapper.insertBoard",board);

이 코드를 통해 mapper와 연결해준다.

nameSpace = BoardMaper

id = insertBoard

insert는 사용되는 태그이다

board는 데이터베이스에게 보낼 전달값이다

Mapper

  • 새 mapper클래스를 생성해야 한다
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="BoardMapper">
<insert id="insertBoard">

insert into board_tbl values(seq_board_no.nextval,#{boardTitle},#{boardContents},#{boardWirter},#{boardFile},#{boardRename},#{boardFildpath},default,default,default,default)

</insert> 
</mapper>
  • 이 mapper를 스프링과 연결해야한다
  • insert태그로 쿼리문을 이용해 값을 insert한다.
    • board를 매개변수로 전송했기에 board안에 있는 변수명을 이용해 #{boardTitle}로 값을 전달할수 있다

Mybatis-cofig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

<settings>
	<setting name="jdbcTypeForNull" value="NULL"/>
	<!-- null값이 있으면 null로 제대로 인식하게 한다. -->
</settings>

<typeAliases>
	<typeAlias type="com.kh.junspring.member.domain.Member" alias="Member"/>
	<typeAlias type="com.kh.junspring.board.domain.Board" alias="Board"/>
</typeAliases>

<mappers>
<mapper resource="mappers/member-mapper.xml"></mapper>
<mapper resource="mappers/board-mapper.xml"></mapper>
</mappers>
</configuration>
  • <typeAlias type="com.kh.junspring.board.domain.Board" alias="Board"/>
    • resultMap type에 쓸 주소를 여기에 선언하여 mapper에서는 Board만 쓰도록 한다.
  • <mapper resource="mappers/board-mapper.xml"></mapper>
    • mapper클래스의 주소와 이름을 넣어줘야 인식한다.
profile
hello world

0개의 댓글