Spring Quick Start(์ฑ )์ Day4 class01~02 ์ค์ต์ ์งํํ๋ฉด์ ๊ธฐ๋กํ ๋ด์ฉ์ ๋๋ค.
์ค์ตํ ์ฝ๋์ ๋งํฌ์ ๋๋ค.
1. ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด์ @Controller ๋ฑ๋กํ๊ธฐ
@Controller๋ก ๋ฑ๋ก๋ ์ปดํฌ๋ํธ๊ฐ ์ค์บ๋๊ธฐ ์ํด
์คํ๋ง ์ค์ ํ์ผ(webapp/WEB-INF/presentation-layer.xml)์
<context:component-scan>์ผ๋ก ํจํค์ง ์์น๋ฅผ ์ง์ ํด ์ฃผ์ด์ผ ํ๋ค.
<context:component-scan base-package="com.springbook.view"> </context:component-scan>
์ปจํธ๋กค๋ฌ ํด๋์ค์ @Component๋ฅผ ์์ํ @Controller๋ฅผ ๋ฑ๋กํ๋ค.
2. @RequestMapping ์ฌ์ฉํ๋ฉด์ Controller ํตํฉํ๊ธฐ
@RequestMapping
์คํ๋ง์์๋ @RequestMapping์ ์ด์ฉํ์ฌ HandlerMapping ์ค์ ์ ๋์ฒดํ๋ค.
HandlerMapping ์ ์ด์ ์ ์คํ๋ง ์ค์ ํ์ผ์์ ์ง์ ํ์๋ค.
value ์์ฑ์ ์๋ตํ ์ ์์ผ๋ฉฐ ๋๋ถ๋ถ ์๋ตํ๋ค.
๊ฐ ๋ฉ์๋์ ๋ฆฌํด ํ์ ์ String์ผ๋ก ํต์ผํ์๊ณ ๊ฒ์ ๊ฒฐ๊ณผ๋ Model์ ์ ์ฅํ๋ค. ์ด๋ ModelAndView์ ๋์ผํ๊ฒ JSP ํ๋ฉด์์ ์ฌ์ฉํ ์ ์๋ค.
package com.springbook.view.board;
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;
@Controller
@SessionAttributes("board")
public class BoardController {
// ๊ฒ์ ์กฐ๊ฑด ๋ชฉ๋ก ์ค์
@ModelAttribute("conditionMap")
public Map<String, String> searchConditionMap(){
Map<String, String> conditionMap = new HashMap<String, String>();
conditionMap.put("์ ๋ชฉ", "TITLE");
conditionMap.put("๋ด์ฉ", "CONTENT");
return conditionMap;
}
// ๊ธ ๋ฑ๋ก
@RequestMapping(value = "/insertBoard.do")
public String insertBoard(BoardVO vo, BoardDAO boardDAO) {
// ๋งค๊ฐ๋ณ์๋ก ์ ์ธํ๋ฉด ์คํ๋ง ์ปจํ
์ด๋๊ฐ ํด๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ ๋ฌํด์ค๋ค.
boardDAO.insertBoard(vo);
return "getBoardList.do";
}
// ๊ธ ์์
@RequestMapping("/updateBoard.do")
public String updateBoard(@ModelAttribute("board") BoardVO vo, BoardDAO boardDAO) {
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());
boardDAO.updateBoard(vo);
return "getBoardList.do";
}
// ๊ธ ์ญ์
@RequestMapping("/deleteBoard.do")
public String deleteBoard(BoardVO vo, BoardDAO boardDAO) {
boardDAO.deleteBoard(vo);
return "getBoardList.do";
}
// ๊ธ ์์ธ ์กฐํ
@RequestMapping("/getBoard.do")
public String getBoard(BoardVO vo, BoardDAO boardDAO, Model model) {
model.addAttribute("board", boardDAO.getBoard(vo)); // Model ์ ๋ณด ์ ์ฅ
return "getBoard.jsp"; // View ์ด๋ฆ ๋ฆฌํด
}
// ๊ธ ๋ชฉ๋ก ๊ฒ์
@RequestMapping("/getBoardList.do")
public String getBoardList(BoardVO vo, BoardDAO boardDAO, Model model) {
// 3๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ธํ๋๋ฐ ๋ง์ง๋ง์ Model์ ๊ฒ์ ๊ฒฐ๊ณผ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ด๋ค.
model.addAttribute("boardList", boardDAO.getBoardList(vo));
return "getBoardList.jsp"; // View ์ด๋ฆ ๋ฆฌํด
}
}
@ModelAttribute ๋ฉ์๋
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ @ModelAttribute ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ๋ฉ์๋์ด๋ค.
@ModelAttribute๊ฐ ์ค์ ๋ ๋ฉ์๋๋ @RequestMapping ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ๋ฉ์๋๋ณด๋ค ๋จผ์ ํธ์ถ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์คํ ๊ฒฐ๊ณผ๋ก ๋ฆฌํด๋ ๊ฐ์ฒด๋ ์๋์ผ๋ก Model์ ์ ์ฅ๋์ด View ํ์ด์ง์์ ์ฌ์ฉํ ์ ์๋ค.
@ModelAttribute ๋งค๊ฐ๋ณ์
Command ๊ฐ์ฒด์ ์ด๋ฆ์ ๋ณ๊ฒฝํ ๋ @ModelAttribute๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
updateBoard()์์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์์ฑํ๋ Command ๊ฐ์ฒด์ ์ด๋ฆ์ ํด๋์ค ์ด๋ฆ์ ์ฒซ ๊ธ์๋ฅผ ์๋ฌธ์๋ก ๋ณ๊ฒฝํ "boardVO"๋ก ์๋์ผ๋ก ์ค์ ๋๋ค. ์ด๋ฅผ @ModelAttribute("board")๋ก "board"๋ก ๋ฐ๊ฟจ๋ค.
@SessionAttributes
BoardController์ ๋ฐ๋ก ์์ @SessionAttributes("board")๊ฐ ์ค์ ๋์ด ์๋ค.
Model์ "board"๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅ๋๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ธ์ (HttpSession)์๋ ์๋์ผ๋ก ์ ์ฅํ๋ผ๋ ์ค์ ์ด๋ค.
๐ฐ ์ด๋ ธํ ์ด์ ๋์ ์ค๋ช
getBoard() ์คํ ์, 1. Model์ "board"๋ผ๋ ์ด๋ฆ์ผ๋ก BoardVO ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๊ณ 2. @SessionAttributes("board")์ ์ํด ์ธ์ ์๋ "board"๋ผ๋ ์ด๋ฆ์ผ๋ก BoardVO ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ค.
์ดํ update() ์คํ ์, @ModelAttribute("board")์ ์ํด ์ธ์ ์ board๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธํ๋ค. ์๋ค๋ฉด ํด๋น ๊ฐ์ฒด๋ฅผ ์ธ์ ์์ ๊บผ๋ด์ ๋งค๊ฐ๋ณ์๋ก ์ ์ธ๋ vo ๋ณ์์ ํ ๋นํ๋ค. ์ดํ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ๋ผ๋ฏธํฐ๊ฐ์ vo ๊ฐ์ฒด์ ํ ๋นํ๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์์ ์ ๋ณด(title, content) ๊ฐ๋ง ์๋กญ๊ฒ ํ ๋น๋๊ณ ๋๋จธ์ง๋ ์ธ์ ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋๋ค.
์์ฒญ ๋ฐฉ์(GET/POST)
@RequestMapping ์์ฒญ ๋ฐฉ์(GET/POST) ์ ๋ฐ๋ผ ์ํ๋ ๋ฉ์๋๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์๋ค.
package com.springbook.view.user;
// import ์๋ต
@Controller
public class LoginController {
@RequestMapping(value = "/login.do", method = RequestMethod.GET)
public String loginView(@ModelAttribute("user") UserVO vo) {
System.out.println("๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋...");
vo.setId("test");
vo.setPassword("test123");
return "login.jsp";
}
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public String login(UserVO vo, UserDAO userDAO, HttpSession session) {
UserVO user = userDAO.getUser(vo);
if (user != null) {
session.setAttribute("userName", user.getName());
return "getBoardList.do";
} else
return "login.jsp";
}
}
Servlet API
๋ํ ์คํ๋ง MVC์์๋ Controller ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ก ๋ค์ํ Servlet API๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ค.
login()์์ HttpSession ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ธ์ ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ ์ฅํ๊ณ ์๋ค.
๐ ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ๊ณผ์
์ด ํ ํด๋ผ์ด์ธํธ๊ฐ ๊ธ ๋ฑ๋ก ์ ๋ณด๋ฅผ ์ ์ ํ๊ฒ ์ ๋ ฅํ๊ณ ์๋ฒ์ "insertBoard.do" ์์ฒญ์ ์ ๋ฌํ์ ๋ ๊ณผ์ ์ ์ด๋ ๋ค.
๐ง ์คํ๋ง ์ปจํ ์ด๋๋ @Controller๊ฐ ๋ถ์ ๋ชจ๋ ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ
๐ง ๋งค๊ฐ๋ณ์์ ํด๋นํ๋ BoardVO ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ
๐ง BoardVO ํด๋์ค์ Setter ๋ฉ์๋๋ค์ ํธ์ถํ์ฌ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ๋ผ๋ฏธํฐ(title, writer, content) ๊ฐ๋ค์ BoardVO ๊ฐ์ฒด์ ์ ์ฅํ๋ค. (Setter ์ธ์ ์ )
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ form tag ์์ name="writer" ๊ฐ์ด
Command ๊ฐ์ฒด์ Setter ๋ฉ์๋ ์ด๋ฆ ์ฆ setWriter()์ ๋ฐ๋์ ์ผ์นํด์ผ ์๋์ผ๋ก ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ด ์ ์ฅ๋๋ค.
๐ง insertBoard() ๋ฉ์๋๋ฅผ ํธ์ถํ ๋, ์ด๋ฏธ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ๋ค์ด ์ค์ ๋ BoardVO ๊ฐ์ฒด๊ฐ ์ธ์๋ก ์ ๋ฌ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ฉ์ ์ ๋ ฅ ์ ๋ณด ์ถ์ถ๊ณผ VO ๊ฐ์ฒด ์์ฑ, ๊ทธ๋ฆฌ๊ณ ๊ฐ ์ค์ ์ ๋ชจ๋ ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ด๋ค.
3. JSP์์ Command ๊ฐ์ฒด ์ฌ์ฉ
Command ๊ฐ์ฒด๋ Controller ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ VO ๊ฐ์ฒด์ด๋ค.
Command ๊ฐ์ฒด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ JSP์์ ์ฌ์ฉํ๋ ค๋ฉด "${...}" ๊ตฌ๋ฌธ์ ์ด์ฉํ๋ค.
@ModelAttribute("user")๋ก Command ๊ฐ์ฒด์ ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ธฐ์ "${user.id}" ๊ฐ์ ์ฐธ์กฐํ ์ ์๋ค.
[login.jsp]
<%@page contentType="text/html; charset=EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>๋ก๊ทธ์ธ</title>
</head>
<body>
<center>
<h1>๋ก๊ทธ์ธ</h1>
<hr>
<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>
<hr>
</center>
</body>
</html>
user.id, user.password๋ก ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
[getBoardList.jsp]
<%@page contentType="text/html; charset=UTF-8"%>
<%@taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>๊ธ ๋ชฉ๋ก</title>
</head>
<body>
<center>
<h1>๊ธ ๋ชฉ๋ก</h1>
<h3>${userName }๋!
๊ฒ์ํ์ ์ค์ ๊ฑธ ํ์ํฉ๋๋ค...<a href="logout.do">Log-out</a>
</h3>
<!-- ๊ฒ์ ์์ -->
<form action="getBoardList.do" 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>
<input name="searchKeyword" type="text" />
<input type="submit" value="๊ฒ์" /></td>
</tr>
</table>
</form>
<!-- ๊ฒ์ ์ข
๋ฃ -->
<table border="1" cellpadding="0" cellspacing="0" width="700">
<tr>
<th bgcolor="orange" width="100">๋ฒํธ</th>
<th bgcolor="orange" width="200">์ ๋ชฉ</th>
<th bgcolor="orange" width="150">์์ฑ์</th>
<th bgcolor="orange" width="150">๋ฑ๋ก์ผ</th>
<th bgcolor="orange" width="100">์กฐํ์</th>
</tr>
<c:forEach items="${boardList }" var="board">
<tr>
<td>${board.seq }</td>
<td align="left"><a href="getBoard.do?seq=${board.seq }">
${board.title }</a></td>
<td>${board.writer }</td>
<td>${board.regDate }</td>
<td>${board.cnt }</td>
</tr>
</c:forEach>
</table>
<br> <a href="insertBoard.jsp">์๊ธ ๋ฑ๋ก</a>
</center>
</body>
</html>
conditionMap์ BoardController์์ @ModelAttribute("conditionMap")๋ก ์ง์ ํ ๋ฉ์๋๋ฅผ ํตํด ๊ฐ์ ์ฐธ์กฐํ ์ ์๋ค.
userName์ LoginController์ login() ์ค session.setAttribute("userName", user.getName());๋ก ์ง์ ๋์ด์ ๊ฐ์ ์ฐธ์กฐํ ์ ์๋ค.
ํ๋ก์ ํธ ์ ์ฒด๋ ์ต์๋จ์ ๊นํ ๋งํฌ๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
'Spring > Spring Quick Start' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
intelliJ ํฐ์บฃ ์๋ฒ๋ก ์คํํ๊ธฐ (0) | 2021.01.07 |
---|---|
IntelliJ๋ก, Spring ํ๋ก์ ํธ(maven) ์์ฑํ๊ธฐ (0) | 2021.01.07 |
IntelliJ Add Framework Support์ Spring์ด ๋ณด์ด์ง ์์ ๋ (0) | 2021.01.07 |
๊ฒ์๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด: HttpSession, HttpServletRequest, ModelAndView (0) | 2021.01.07 |
์คํ๋ง ์ธ์ฝ๋ฉ ์ค์ (0) | 2021.01.07 |
WEB-INF/action-servlet.xml ํ์ผ ์ด๋ฆ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ (0) | 2021.01.07 |