본문 바로가기
Java . Spring . Web . SQL

어노테이션 기반 MVC 개발

by heidish 2020. 10. 20.
반응형

 

 

 

 

 

 

 

 

( presentation-layer.xml )

네임스페이스 탭에서 context 선택해서 추가한 뒤,

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

	<!-- component scan Registration -->
	<context:component-scan base-package="com.heidi.view"></context:component-scan>
	
</beans>

 

 

 

 

src/main/webapp/WEB-INF/board 폴더에 있던

getBoard.jsp 와 getBoardList.jsp 를 webapp 으로 꺼낸 뒤, board 폴더는 삭제해도 된다.

 

 

 

 

( InsertBoardController.java )

package com.heidi.view.board;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

@Controller
public class InsertBoardController {

	public InsertBoardController() {
	}

	public void insertBoard(HttpServletRequest request) {
		System.out.println("글 등록 처리");
		
		//	1. 사용자 입력 정보 추출
		String title=request.getParameter("title");
		String writer=request.getParameter("writer");
		String content=request.getParameter("content");
		
		//	2. DB 연동 처리
		BoardVO vo=new BoardVO();
		vo.setTitle(title);
		vo.setWriter(writer);
		vo.setContent(content);
		
		BoardDAO boardDAO=new BoardDAO();
		boardDAO.insertBoard(vo);
	}
}

기존의 코드에서 POJO 타입의 일반 클래스로 만들고 Controller 기능을 구현해준다.

 

 

또한 @RequestMapping 을 이용해서 HandlerMapping 설정을 대체해야 한다.

아래와 같이 한번 더 수정해주자.

package com.heidi.view.board;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

@Controller
public class InsertBoardController {

	public InsertBoardController() {
	}

	@RequestMapping(value="/insertBoard.do")	// insertBoard.jsp 내부 form 태그에 의해서 요청!
	public void insertBoard(HttpServletRequest request) {
		System.out.println("글 등록 처리");
		
		//	1. 사용자 입력 정보 추출
		String title=request.getParameter("title");
		String writer=request.getParameter("writer");
		String content=request.getParameter("content");
		
		//	2. DB 연동 처리
		BoardVO vo=new BoardVO();
		vo.setTitle(title);
		vo.setWriter(writer);
		vo.setContent(content);
		
		BoardDAO boardDAO=new BoardDAO();
		boardDAO.insertBoard(vo);
	}
}

 

현재 insertBoard.jsp 의 파라미터명들과 BoardVO 의 멤버변수명은 동일하게 만들어놨는데,

이제 컨트롤러가 클라이언트의 요청 처리를 VO 에 저장시키는 요청처리를 해줄꺼임! 

 

 

 


 

 

클라이언트로부터 요청사항이 들어오면 web.xml 이 가장 먼저 건드려진다.

DispatcherServlet 이 가장 먼저 건드려지는데,

여기서 init() 호출,
service() 호출,

그리고 경우에 따라서 doGet() 또는 doPost() 호출

그리고 마지막으로 destroy() 호출

 

 

 

 

web.xml 문서의

이 부분이 init() 부분에 의해 호출되는 부분임..!

 

 

 


 

component-scan 에 의해서 컨트롤러 객체들이 쭉 생성되고,

 

DispatcherServlet 은 서블릿 컨테이너가 만들어준다..

 

 

 

 


 

 

package com.heidi.view.board;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

@Controller
public class InsertBoardController {

	public InsertBoardController() {
	}

	@RequestMapping(value="/insertBoard.do")	// insertBoard.jsp 내부 form 태그에 의해서 요청!
	public void insertBoard(BoardVO vo) {
		System.out.println("글 등록 처리");
		
		// 자동매핑에 의해 getParameter 코드들과 BoardVO 에 set 시키는 코드는 필요없어졌음.
		
		// BoardDAO 코드는 필요함!
		BoardDAO boardDAO = new BoardDAO();
		boardDAO.insertBoard(vo);
	}
}

 

 


 

package com.heidi.view.board;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

@Controller
public class InsertBoardController {

	public InsertBoardController() {
	}

	@RequestMapping(value="/insertBoard.do")	// insertBoard.jsp 내부 form 태그에 의해서 요청!
	public String insertBoard(BoardVO vo, BoardDAO dao) {
		System.out.println("글 등록 처리");
		
		// 자동매핑에 의해 getParameter 코드들과 BoardVO 에 set 시키는 코드는 필요없어졌음.
		
		// BoardDAO 객체 생성을 내부에서 할 필요 없어짐.
		dao.insertBoard(vo);
		
		return "getBoardList.do";
	}
}

 

 

 


 

 

package com.heidi.view.board;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

@Controller
public class InsertBoardController {

	public InsertBoardController() {
	}

	@RequestMapping(value="/insertBoard.do")	// insertBoard.jsp 내부 form 태그에 의해서 요청!
	public String insertBoard(BoardVO vo, BoardDAO dao) {
		System.out.println("글 등록 처리");
		
		// 자동매핑에 의해 getParameter 코드들과 BoardVO 에 set 시키는 코드는 필요없어졌음.
		
		// BoardDAO 객체 생성을 내부에서 할 필요 없어짐.
		dao.insertBoard(vo);
		
		return "redirect:getBoardList.do";
	}
}

 

 


 

( GetBoardListController.java )

package com.heidi.view.board;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

@Controller
public class GetBoardListController {

	public GetBoardListController() {
	}
	
	@RequestMapping("/getBoardList.do")
	public ModelAndView getBoardList(BoardVO vo, BoardDAO dao, ModelAndView mav) {
		System.out.println("글 목록 보기");
		
		mav.addObject("boardList", dao.getBoardList(vo));
		mav.setViewName("getBoardList.jsp");
		return mav;
	}
}

 

 

( GetBoardController.java )

package com.heidi.view.board;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class GetBoardController {

	public GetBoardController() {
	}

	@RequestMapping("/getBoard.do")
	public ModelAndView getBoard(BoardVO vo, BoardDAO dao, ModelAndView mav) {
		System.out.println("글 상세 보기");
		
		mav.addObject("board", dao.getBoard(vo));
		mav.setViewName("getBoard.jsp");
		return mav;
	}
}

 

 

( UpdateBoardController.java )

package com.heidi.view.board;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class UpdateBoardController {

	public UpdateBoardController() {
	}

	@RequestMapping("/updateBoard.do")
	public String updateBoard(BoardVO vo, BoardDAO dao) {
		System.out.println("글 수정 처리");
		
		dao.updateBoard(vo);
		return "redirect:getBoardList.do";
	}
}

 

 

( DeleteBoardController.java )

package com.heidi.view.board;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

@Controller
public class DeleteBoardController {

	public DeleteBoardController() {
	}

	@RequestMapping("/deleteBoard.do")
	public String deleteBoard(BoardVO vo, BoardDAO dao) {
		System.out.println("글 삭제 처리");
		
		dao.deleteBoard(vo);
		return "redirect:getBoardList.do";
	}
}

 

 

(LoginController.java)

package com.heidi.view.user;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.heidi.biz.user.UserVO;
import com.heidi.biz.user.impl.UserDAO;

@Controller
public class LoginController {

	public LoginController() {
	}

	@RequestMapping("/login.do")
	public String logint(UserVO vo, UserDAO dao) {
		System.out.println("로그인 처리");
		
		if(dao.getUser(vo) != null) return "redirect:getBoardList.do";
		else return "redirect:login.jsp";
	}
}

 

 

( LogoutController.java )

package com.heidi.view.user;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LogoutController {

	public LogoutController() {
	}

	@RequestMapping(value="/logout.do")
	public String logout(HttpSession session) {
		System.out.println("로그아웃 처리");
		 
		session.invalidate();
		
		return "redirect:login.jsp";
	}
}

 

 

 


 

 

여기까지 각 컨트롤러 수정했으면

login.jsp 실행했을때 잘 되야함

 

 

 


 

 

( BoardController.java)

클래스를 com.heidi.view.board 패키지에 생성 후,

로그인, 로그아웃을 제외한 모든 컨트롤러 내부 메소드를 붙여넣기

 

package com.heidi.view.board;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.heidi.biz.board.BoardVO;
import com.heidi.biz.board.impl.BoardDAO;

@Controller
public class BoardController {

	// 기본생성자
	public BoardController() {
	}
	
	// 글 등록
	@RequestMapping(value="/insertBoard.do")	// insertBoard.jsp 내부 form 태그에 의해서 요청!
	public String insertBoard(BoardVO vo, BoardDAO dao) {
		System.out.println("글 등록 처리");
		
		// 자동매핑에 의해 getParameter 코드들과 BoardVO 에 set 시키는 코드는 필요없어졌음.
		
		// BoardDAO 객체 생성을 내부에서 할 필요 없어짐.
		dao.insertBoard(vo);
		
		return "redirect:getBoardList.do";
	}
	
	// 글 수정
	@RequestMapping(value="/updateBoard.do")
	public String updateBoard(BoardVO vo, BoardDAO dao) {
		System.out.println("글 수정 처리");
		
		dao.updateBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 삭제
	@RequestMapping(value="/deleteBoard.do")
	public String deleteBoard(BoardVO vo, BoardDAO dao) {
		System.out.println("글 삭제 처리");
		
		dao.deleteBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 상세 조회
	@RequestMapping(value="/getBoard.do")
	public ModelAndView getBoard(BoardVO vo, BoardDAO dao, ModelAndView mav) {
		System.out.println("글 상세 보기");
		
		mav.addObject("board", dao.getBoard(vo));	// Model 정보 저장
		mav.setViewName("getBoard.jsp");			// View 정보 저장
		return mav;
	}
	
	// 글 목록 조회
	@RequestMapping(value="/getBoardList.do")
	public ModelAndView getBoardList(BoardVO vo, BoardDAO dao, ModelAndView mav) {
		System.out.println("글 목록 보기");
		
		mav.addObject("boardList", dao.getBoardList(vo));	// Model 정보 저장
		mav.setViewName("getBoardList.jsp");				// View 정보 저장
		return mav;
	}
}

 

그리고 해당 컨트롤러 클래스는 모두 삭제하기

이런 구조가 되도록!

 

 

login.jsp 다시 실행시켜보고

잘되는지 확인하기

 

 


 

 

( LoginController.java )

package com.heidi.view.user;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.heidi.biz.user.UserVO;
import com.heidi.biz.user.impl.UserDAO;

@Controller
public class LoginController {

	public LoginController() {
	}
	
	@RequestMapping(value="/login.do", method=RequestMethod.GET)
	public String loginView(UserVO vo) {
		System.out.println("로그인 화면으로 이동");
		
		vo.setId("test");
		vo.setPassword("test1234");
		
		return "login.jsp";
	}

	@RequestMapping(value="/login.do", method=RequestMethod.POST)
	public String login(UserVO vo, UserDAO dao) {
		System.out.println("로그인 기능을 처리..");
		
		if(dao.getUser(vo) != null) return "redirect:getBoardList.do";
		else return "redirect:login.jsp";
	}
}

 

그리고 여기서 loginView() 내부에서 저장한 id와 password 값을 jsp 에서 사용하려면

${ } 를 사용해야함!

 

 

 

( login.jsp )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>

<body align="center">
	<h1>로그인</h1>
	<hr>
	
	<div align="center">
	<form action="login.do" method="post">
		<table border="1" cellpadding="0"  cellspacing="0">
			<tr>
				<td bgcolor="orange">아이디</td>
				<td><input type="text" name="id" value="${userVO.id }"/></td>
			</tr>
			
			<tr>
				<td bgcolor="orange">비밀번호</td>
				<td><input type="password" name="password" value="${userVO.password }"/></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="submit" value="로그인" />
				</td>
			</tr>
		</table>
	</form>
	</div>
</body>
</html>

 

 

 

그리고 index.jsp 를 생성한다.

 

 

( index.jsp )

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

<body align="center">
	<h1>게시판 프로그램</h1>
	<hr>
	
	<a href="login.do">로그인</a><br /><br /><br />
	<a href="getBoardList.do">글 목록 바로가기</a>
	
	<hr>
</body>
</html>

 

 

 

여기까지 하고, index.jsp 를 실행시켜서 잘 되나 확인하기

 

 

 


 

 

만약 UserVO 객체명을 지정해서 만들고 싶다면?

 

 

( LoginController.java )

package com.heidi.view.user;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.heidi.biz.user.UserVO;
import com.heidi.biz.user.impl.UserDAO;

@Controller
public class LoginController {

	public LoginController() {
	}
	
	@RequestMapping(value="/login.do", method=RequestMethod.GET)
	public String loginView(@ModelAttribute("user") UserVO vo) {
		System.out.println("로그인 화면으로 이동 <== loginView() 실행");
		
		vo.setId("test");
		vo.setPassword("test1234");
		
		return "login.jsp";
	}

	@RequestMapping(value="/login.do", method=RequestMethod.POST)
	public String login(UserVO vo, UserDAO dao) {
		System.out.println("로그인 기능을 처리.. <== login() 실행");
		
		if(dao.getUser(vo) != null) return "redirect:getBoardList.do";
		else return "redirect:login.jsp";
	}
}

@ModelAttribute 를 사용해서 지정해줄 수 있고,

이렇게 지정해줬다면 당연히 login.jsp 부분도 바껴야겠지

 

 

( login.jsp )

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>

<body align="center">
	<h1>로그인</h1>
	<hr>
	
	<div align="center">
	<form action="login.do" method="post">
		<table border="1" cellpadding="0"  cellspacing="0">
			<tr>
				<td bgcolor="orange">아이디</td>
				<td><input type="text" name="id" value="${user.id }"/></td>
			</tr>
			
			<tr>
				<td bgcolor="orange">비밀번호</td>
				<td><input type="password" name="password" value="${user.password }"/></td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="submit" value="로그인" />
				</td>
			</tr>
		</table>
	</form>
	</div>
	<hr>
	<a href="index.jsp">메인으로</a>
</body>
</html>

 

 

실행 결과

이렇게 첫 화면에서 로그인 링크를 누르면, 로그인 페이지로 이동하는데

이 때 아이디와 비밀번호가 입력되어 있는 상태로 화면이 뜨게된다.

 

 

 

( 여기서, LoginController 의 loginView() 메소드의 마지막 return 값을

  "redirect:login.jsp" 로 넘겨주면 자동으로 값이 채워진 상태가 아니라 빈 칸이 뜨게된다. )

 

 

 

 


 

 

Servlet API 사용

 

 

 

( LoginController.java )

package com.heidi.view.user;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.heidi.biz.user.UserVO;
import com.heidi.biz.user.impl.UserDAO;

@Controller
public class LoginController {

	public LoginController() {
	}
	
	@RequestMapping(value="/login.do", method=RequestMethod.GET)
	public String loginView(@ModelAttribute("user") UserVO vo) {
		System.out.println("로그인 화면으로 이동 <== loginView() 실행");
		
		vo.setId("test");
		vo.setPassword("test1234");
		
		return "login.jsp";
	}

	@RequestMapping(value="/login.do", method=RequestMethod.POST)
	public String login(UserVO vo, UserDAO dao, HttpSession session) {
		System.out.println("로그인 기능을 처리.. <== login() 실행");
		
		UserVO user = dao.getUser(vo);
		
		if(user != null) {
			session.setAttribute("userName", user.getName());
			return "getBoardList.do";
		}
		else return "redirect:login.jsp";
	}
}

login 메소드를 위에처럼 수정 후,

 

 

 

( getBoardList.jsp ) 수정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 목록</title>
</head>

<body align="center">
	<h1>글 목록</h1>
	<h3>${userName} 님! 환영합니다.<a href="logout.do">Log-out</a></h3>

상단에 EL 태그 ${ } 부분만 수정하기

 

 

 

수정 후 실행하면,

이런식으로 로그인한 유저 이름이 나와야함!

( test 라고 뜨는 부분! )

 

 

 

 


 

Controller 의 리턴타입 변경

 

 

 

 

 

( BoardController.java ) 에서,

getBoard() 와 getBoardList() 메소드 수정!

	// 글 상세 조회
	@RequestMapping(value="/getBoard.do")
	public String getBoard(BoardVO vo, BoardDAO dao, Model model) {
		System.out.println("글 상세 보기");
		
		model.addAttribute("board", dao.getBoard(vo));	// Model 정보 저장
		return "getBoard.jsp";							// View 정보 저장
	}
	
	// 글 목록 조회
	@RequestMapping(value="/getBoardList.do")
	public String getBoardList(BoardVO vo, BoardDAO dao, Model model) {
		System.out.println("글 목록 보기");
		
		model.addAttribute("boardList", dao.getBoardList(vo));	// Model 정보 저장
		return "getBoardList.jsp";								// View 정보 저장
	}

 

 

수정 후, 실행시키면 동일하게 잘 실행되야함.

 

 

여기서 ModelAndView => Model 로 바꾸고 내부 코드도

세션에 저장하는게 아닌 Model 객체에 addAttribute() 메소드로 저장하는데

getBoard.jsp나 getBoardList.jsp 내부를 수정하지 않아도 된다는거,,,

 

 

 

 


 

 

기타 어노테이션 중,

@RequestParam

 

 

 

 

( getBoardList.jsp )

	<!-- 검색 시작 -->
	<div align="center">
	<form action="getBoardList.jsp" method="post">
		<table border="1" cellpadding="0"  cellspacing="0" width="700">
			<tr>
				<td align="right">
					<select name="searchCondition">
						<option value="TITLE">제목</option>
						<option value="CONTENT">내용</option>
					</select>
					<input type="text" name="searchKeyword" />
					<input type="submit" value="검색">
				</td>
			</tr>
		</table>
	</form>

검색 부분은 위와 같다.

 

 

 

 

( BoardController.java )

	// 글 목록 조회
	@RequestMapping(value="/getBoardList.do")
	public String getBoardList(@RequestParam(value="searchCondition", defaultValue="TITLE", required=false) String condition,
			@RequestParam(value="searchKeyword", defaultValue="", required=false) String keyword,
			BoardVO vo, BoardDAO dao, Model model) {
		System.out.println("글 목록 보기");
		
		System.out.println("검색 조건 : " + condition);
		System.out.println("검색 단어 : " + keyword);
		
		model.addAttribute("boardList", dao.getBoardList(vo));	// Model 정보 저장
		return "getBoardList.jsp";	// View 이름 리턴
	}

이렇게 바꿔주기

 

 

 

 


 

@ModleAttribute 사용하기

 

 

 

( getBoardList.jsp )

select 태그쪽 수정!

	<!-- 검색 시작 -->
	<div align="center">
	<form action="getBoardList.jsp" method="post">
		<table border="1" cellpadding="0"  cellspacing="0" width="700">
			<tr>
				<td align="right">
					<select name="searchCondition">
						<c:forEach items="${conditionMap }" var="option">
							<option value="${option.value }">${option.key }
						</c:forEach>
					</select>
					
					<!-- 기존 검색 코드
					<select name="searchCondition">
						<option value="TITLE">제목</option>
						<option value="CONTENT">내용</option>
					</select>
					 -->
					<input type="text" name="searchKeyword" />
					<input type="submit" value="검색">
				</td>
			</tr>
		</table>
	</form>

기존의 제목, 내용은 키명으로...

TITLE, CONTENT는 값으로....

 

키명과 값을 갖는건 컬렉션 중 Map !

 

 

 

( BoardController.java )

메소드 하나 추가!

	// 검색 조건 목록 설정하는 메소드
	@ModelAttribute("conditionMap")
	public Map<String, String> searchConditionMap() {
		Map<String, String> map = new HashMap<String, String>();
		map.put("제목", "TITLE");
		map.put("내용", "CONTENT");
		return map;
	}

위의 예제들 중, 객체명을 수정할 때 사용했던 @ModelAttribute 어노테이션의 경우

클래스명 바로 앞에 붙여서 써줬는데 여기서는 메소드 선언부 위에 썼음.!

 

 

실행 결과 글 전체 목록이 잘 뿌려져야한다.

 

 

 


 

 

 

@SessionAttributes

 

 

 

( BoardController.java )

updateBoard() 메소드에서

	// 글 수정
	@RequestMapping(value="/updateBoard.do")
	public String updateBoard(BoardVO vo, BoardDAO dao) {
		System.out.println("글 수정 처리");
		System.out.println("작성자 이름 : " + vo.getWriter());
		
		dao.updateBoard(vo);
		return "redirect:getBoardList.do";
	}

이렇게 수정 하면 작성자 이름 값이 매핑이 안되기 때문에

 

실행 후 글 수정을 누르면 콘솔창에 null 값이 찍히는걸 볼 수 있다.

 

 


 

( BoardController.java )의 클래스 선언부 위에

@Controller
@SessionAttributes("board")
public class BoardController {

붙여주고

updateBoard() 메소드 내부 수정

	// 글 수정
	@RequestMapping(value="/updateBoard.do")
	public String updateBoard(@ModelAttribute("board") BoardVO vo, BoardDAO dao) {
		System.out.println("글 수정 처리");
		System.out.println("번호 : " + vo.getSeq());
		System.out.println("제목 : " + vo.getTitle());
		System.out.println("작성자 이름 : " + vo.getWriter());
		System.out.println("내용 : " + vo.getContent());
		System.out.println("등록일 : " + vo.getRegDate());
		System.out.println("조회수 : " + vo.getCnt());
		
		dao.updateBoard(vo);
		return "redirect:getBoardList.do";
	}

 

 

실행하고 글 수정 해보면,

이케됨

 

 

 

 

 


 

 

각 메소드가 어떤 jsp의 어느 부분에 의해 호출되고 어디로 값을 전달해주는지 등등...

 

각각 메소드의 기능과 사용되는 지점 ㄷㅇ등을 자세하게 기록하면서 공부하기

 

 

 

 

 

반응형

댓글