๐ปController
- ์ฌ์ฉ์์ ์ ๋ ฅ ๋ฐ ์์ฒญ์ ๋ฐ์ ํด๋น ์์ฒญ์ ๋ํ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋ต์ผ๋ก ์ ๋ฌํ๋ ์ฃผ์ํ ์ปดํฌ๋ํธ์ด๋ค.
- ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ๊ณผ ๋ทฐ ์ฌ์ด์ ์ค๊ฐ์ ์ญํ ์ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ์์คํ ์ ๊ตฌ์ฑ ์์๋ค ๊ฐ์ ๊ฐํ ๊ฒฐํฉ์ ๋ฐฉ์งํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ธ๋ค.
๐ปController ๊ตฌํ ๋ฐฉ๋ฒ
1. Controller ์ธํฐํ์ด์ค ๊ตฌํ
2. @Controller ์ด๋ ธํ ์ด์ ์ฌ์ฉ > ํธ์์ฑ, ๊ฐ๊ฒฐํ๋ค
1. Controller ์ธํฐํ์ด์ค ๊ตฌํ
package com.test.spring.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class Ex03Controller implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return null;
}
}
2. @Controller ์ด๋ ธํ ์ด์ ์ฌ์ฉ
package com.test.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value="/ex03.do") //@WebServlet("/ex03.do")์ ๋์ผํ ์ญํ ์ ํ๋ค.
public class Ex03Controller {
@RequestMapping
public String test() {
//์
๋ฌด ์ฝ๋
return "ex03";
}
//์ผ๋ฐ ๋ฉ์๋
public int sum(int a, int b) {
return a + b;
}
}
@Controller์ ์ฌ์ฉํ๋ฉด 'implements Controller'๋ฅผ ์ฌ์ฉํ์ง ์์๋๋๋ค.
์ ๋ฌด ์ฝ๋ ๋ค์ JSP ํธ์ถํ๊ธฐ ์ํด ModelAndView๋ฅผ ์ ์ธํ์๋๋ฐ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ModelAndView ์๋์ผ๋ก ์์ฑ๋๋ฉฐ ViewResolver ๊ฐ ๋์๋๋ค. ๊ทธ๋์ return ๋ฌธ์ ๊ฐ์์ฃผ์ ๋ง ์ ์ด๋ ex03.jsp ํ์ผ๋ก ์ด๋๋๋ค.
ํธ๋ค๋ฌ(์์ฒญ ๋ฉ์๋) ๋ฉ์๋๋ ์ต์ํ์ ์ฝ์์ผ๋ก @RequestMapping ์ด๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค. Controller ํด๋์ค์์ ์ฌ๋ฌ๊ฐ์ ๋ฉ์๋๊ฐ ์์ ์ ์์ด @RequestMapping ์ผ๋ก ํด๋์ค ํธ์ถ ์ ์คํํ ๋ฉ์๋๋ฅผ ๋ถ๋ณํ๋ค.
package com.test.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Ex04Controller {
@RequestMapping(value="/ex04.do")
public String ex04() {
return "ex04";
}
@RequestMapping("/ex04_1.do")
public String ex04_1() {
return "ex04_1";
}
}
์ปจํธ๋กค๋ฌ ํ๋์ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ ์ฃผ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
์ปจํธ๋กค๋ฌ ์์์ ๋ฉ์๋์ @RequestMapping์๊ฒ ์ฃผ์๋ฅผ ์ฃผ์ด ์ฌ์ฉํ๋ค.
์ ์คํ์ผ์์ ์ปจํธ๋กค๋ฌ ์ ์ฒด์ @RequestMapping๋ฅผ ๋ถ์ด๋ ๊ฒ๋ณด๋ค ๋ฉ์๋์๊ฒ ๋ถ์ด๋ ๊ฒ์ด ๋ณดํธ์ ์ธ ์คํ์ผ์ด๋ฉฐ value ์์ฑ์ ์๋ต ๊ฐ๋ฅํ๋ค.
์ด๋ ๊ฒ @Controller ์ฌ์ฉํ๋ฉด jsp๋ง ํธ์ถํ๋ ์ฉ๋์ ์ปจํธ๋กค๋ฌ ๊ฐฏ์๋ฅผ ์ค์ผ ์ ์๋ค.
๐ป@Controller์ ๋ฐ์ดํฐ ์ก์์
1. req, resq, @PostMapping
@PostMapping(value="/ex05ok.do")
public String ex05ok(HttpServletRequest req, HttpServletResponse resp) {
//๋ฐ์ดํฐ ์์
// Servlet&JSP : req.getParameter(), req.getParameterValues()
// req๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด HttpServletRequest ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ค๋ค.
System.out.println(req == null);
System.out.println(resp == null);
System.out.println();
String data = req.getParameter("data");
req.setAttribute("data", data);
return "ex05ok";
}
Servlet&JSP ์์๋ req.getParameter(), req.getParameterValues()๋ก ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค. Controller์์๋ HttpServletRequest, HttpServletResponse๊ฐ ์ ์ธ์ด ๋์ด ์์ง์์ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
๋ํ ๋ฐ์ดํฐ๋ฅผ Post ๋ฐฉ์์ผ๋ก ์ ๋ฌํ์ ๋ @PostMapping ์ ์ฌ์ฉํ์ฌ ์๋ตํ๋ค.
2. @RequestParam, Model
@PostMapping(value="/ex05ok.do")
//<div><input type="text" name="data"></div> ์ name๊ณผ ์ฐ๊ฒฐ
public String ex05ok(@RequestParam(name = "data") String data, Model model) {
//req.setAttribute("data", data) ์ ๋์ผ
model.addAttribute("data", data);
return "ex05ok";
}
@RequestParam HTTP ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ ๋ฐ์ธ๋ฉํ๋ค.
์์ฒญ ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ๊ณผ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ์ด๋ฆ์ด ๋์ผํ๋ฉด ์๋์ผ๋ก ๋ฐ์ธ๋ฉ๋๋ฉฐ, ์ด๋ฆ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ์ ๋ช
์์ ์ผ๋ก ์ง์ ํ ์ ์๋ค.
์ ์ฝ๋์ ๊ฒฝ์ฐ JSP์ ํ ์คํธ๋ฐ์ค name="data"๋ฅผ @RequestParam(name = "data")๋ก ๋ฐ์ธ๋ฉํ์ฌ String data์ ๋ด์๋ค.
๋ํ ์์ ๋ฐฐ์ด ModelAndView์ Model ๊ฐ์ฒด์ ์ปจํธ๋กค๋ฌ์์ ๋ทฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๋ค. model ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ data ๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋๋ค.
@PostMapping(value="/ex05ok.do")
public String ex05ok(String data, Model model) {
model.addAttribute("data", data);
return "ex05ok";
}
ํ ์คํธ ๋ฐ์ค name๊ณผ ๋ณ์ ์ด๋ฆ์ด ๊ฐ๋ค๋ฉด @RequestParam ์๋ต ๊ฐ๋ฅํ๋ค.
3. ๋ณตํฉ ๋ฐ์ดํฐ ์์
@PostMapping(value="/ex05ok.do")
public String ex05ok(@RequestParam("name") String name, @RequestParam("age") String age, @RequestParam("address") String address, Model model) {
SpringDTO dto = new SpringDTO();
dto.setName(name);
dto.setAddress(address);
dto.setAge(age);
SpringDAO dao = new SpringDAOImpl();
int result = dao.add(dto);
model.addAttribute("result", result);
return "ex05ok";
}
์ธ ๊ฐ์ ์์ฒญ ํ๋ผ๋ฏธํฐ(name, age, address)๋ฅผ ๋ฐ์์์ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ ์ ์ก์ ์ํ DTO์ ๋ด์ DAO๋ก DB ์์ ์ ํ๋ค. ์ฑ๊ณต์ฌ๋ถ๋ฅผ result์ ๋ด์ model๋ก ์ ์กํ๋ค.
์ฌ๋ฌ๊ฐ์ ์์ฒญ ํ๋ผ๋ฏธํฐ๊ฐ ์์ ๋๋ ๋ฒ๊ฑฐ๋ก์ด ๋ฐฉ๋ฒ์ด๋ค.
@PostMapping(value="/ex05ok.do")
public String ex05ok(SpringDTO dto, String seq, Model model) {
SpringDAO dao = new SpringDAOImpl();
int result = dao.add(dto);
System.out.println(seq);
model.addAttribute("result", result);
return "ex05ok";
}
์์ฒญ ํ๋ผ๋ฏธํฐ๊ฐ DTO์ ์์ ๋, dto๋ก ์์ ๋ฐ์ ์ ์๋ค. ๋ง์ฝ DTO์ ์๋ ํ๋ผ๋ฏธํฐ(seq)๋ผ๋ฉด ๋ฐ๋ก ๊ธฐ์ฌํด์ฃผ๋ฉด ๋๋ค.
4. ๋ค์ค๊ฐ ์์
โ Model , HttpServletRequest
@PostMapping(value="/ex05ok.do")
public String ex05ok(Model model, HttpServletRequest req) {
String[] cb = req.getParameterValues("cb");
System.out.println(Arrays.toString(cb));
return "ex05ok";
}
์ฒดํฌ๋ฐ์ค์ฒ๋ผ ๋ค์ค๊ฐ์ ์์ ๋ฐ์ ๋๋ ์๋ค.
์ด๋ฒ์๋ Model ๊ฐ์ฒด์ HttpServletRequest ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋๋ค.
HttpServletRequest์ getParameterValues ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฒดํฌ๋ฐ์ค์ ๊ฐ๋ค์ ๋ฐฐ์ด๋ก ๋ฐ์์จ๋ค.
(์ฌ๊ธฐ์ "cb"๋ HTML ํผ์์ ์ฒดํฌ๋ฐ์ค์ name ์์ฑ ๊ฐ์ด๋ค.)
โก Model, @RequestParam
@PostMapping(value="/ex05ok.do")
public String ex05ok(Model model, @RequestParam("cb") String[] cb) {
System.out.println(Arrays.toString(cb));
return "ex05ok";
}
@RequestParam ๋ฅผ ์ฌ์ฉํ์ฌ HTTP ์์ฒญ ํ๋ผ๋ฏธํฐ ์ค์์ "cb"๋ผ๋ ์ด๋ฆ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ค๋๋ฐ, ์ด ๊ฐ์ ๋ฌธ์์ด ๋ฐฐ์ด(String[])๋ก ๋งคํ์ ํด์ค๋ค.
์ HttpServletRequest ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ๋ก ์์ฒญ ํ๋ผ๋ฏธํฐ๋ฅผ ์ธ์ํ ์ ์๋ค.
โข @ModelAttribute
@PostMapping(value="/ex05ok.do")
public String ex05ok(@ModelAttribute(name="data") String data) {
return "ex05ok";
}
๊ฒ์ํ ์์
ํ์ผ ์์ฑ
ํจ์งํค๋ช | ํ์ผ๋ช | ์ญํ |
com.test.spring.controller | ||
BoardController.java | ||
view/board | ||
listjsp | ๊ฒ์ํ ๋ชฉ๋ก ์กฐํ | |
add.jsp | ๊ฒ์๋ฌผ ์ถ๊ฐ | |
addok.jsp | ๊ฒ์๋ฌผ ์ถ๊ฐ ๊ฒฐ๊ณผ | |
view.jsp | ๊ฒ์๋ฌผ ์์ธ๋ณด๊ธฐ |
BoardController.java
package com.test.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class BoardController {
//doGet() ์ญํ
@RequestMapping(value="/board/list.do", method=RequestMethod.GET)
public String list() {
// ๊ฒฝ๋ก : "WEB-INF/views/board/list.jsp"
return "board/list";
}
//doGet() ์ญํ
@RequestMapping(value="/board/add.do" , method=RequestMethod.GET)
public String add() {
return "board/add";
}
//doPost() ์ญํ
@RequestMapping(value="/board/addok.do", method=RequestMethod.POST)
public String addok() {
return "board/addok";
}
//doGet() ์ญํ
@RequestMapping(value="/board/view.do", method=RequestMethod.GET)
public String view() {
return "board/view";
}
}
@RequestMapping - value
@RequestMapping ์์ฑ value์๋ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์ด๋๋๋ฐ ์์น์ ๋ฐ๋ผ ๊ฒฝ๋ก๋ฅผ ๋ค๋ฅด๊ฒ ์ ์ ์ ์๋ค.
์ค์ฒฉ๋๋ ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด ํด๋์ค ์๋จ์ ์ ์ธํด์ฃผ๊ณ ๋๋จธ์ง ๊ฒฝ๋ก๋ฅผ ๋ฉ์๋ ์์ ์ ์ธํ๋ค. ์ด๋ฌ๋ฉด ์ค์ฒฉ๋๋ ๊ฒฝ๋ก๋ ํ๋ฒ๋ง ์ ์ผ๋ฉด ๋๋ค. ํ์ง๋ง ์ด๋ฐ ๊ฒฝ์ฐ๋ ํ์์ ์ธ ๋ถ๋ถ์ด ์๋ ๋ณธ์ธ ์คํ์ผ์ ๋ง์ถฐ ์์ฑํ๋ฉด ๋๋ค.
package com.test.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(value="/board")
public class BoardController {
//doGet() ์ญํ
@RequestMapping(value="/list.do", method={RequestMethod.GET, RequestMethod.POST})
public String list() {
return "board/list";
}
//doGet() ์ญํ
@RequestMapping(value="/add.do" , method=RequestMethod.GET)
public String add() {
return "board/add";
}
//doPost() ์ญํ
@RequestMapping(value="/addok.do", method=RequestMethod.POST)
public String addok() {
return "board/addok";
}
//doGet() ์ญํ
@RequestMapping(value="/view.do", method=RequestMethod.GET)
public String view() {
return "board/view";
}
}
@RequestMapping - RequsetMethod.XXX
๋ฐ์ดํฐ ์ ์ก ๋ฐฉ์์ธ GET, POST ์ @RequestMapping์ ์์ฑ์ธ RequsetMethod.XXX์ผ๋ก ์ง์ ํ๋ค.
๋ง์ฝ ์์ฒญ ๋ฐฉ์์ ๋ค๋ฅด๊ฒ ์ง์ ํ๋ค๋ฉด, 405์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
@RequestMapping(value="/board/list.do", method={RequestMethod.GET, RequestMethod.POST})
GET, POST ๋ฐฉ์ ๋ ๋ค ๋ฐ์์ผํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ฐฐ์ด๋ก GET, POST ๋ฐฉ์ ๋ ๋ค ์ ๋ฌ ๋ฐ์ ์๋ ์๋ค.
addok.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://me2.do/5BvBFJ57">
</head>
<body>
<!-- addok.jsp -->
<script src="https://code.jquery.com/jquery-1.12.4.js" ></script>
<script>
alert('๊ธ์ฐ๊ธฐ ์๋ฃ');
location.href='/spring/board/list.do';
</script>
</body>
</html>
ํ์ด์ง ์ด๋์ location.href๋ฅผ ์ด์ฉํ์ฌ ์ด๋ํ๋ค. ๊ฒฝ๋ก๋ Servlet&JSP ๋์ ๋์ผํ๊ฒ 'contextroot/ํด๋๋ช /๊ฐ์์ฃผ์'๋ก ์ฌ์ฉํ๋ค.
์ด์ธ ํ์ผ์ Servlet&JSP ๋์ ๋์ผํ๊ฒ ์์ฑํ๋ฏ๋ก ์์ธํ ์ค๋ช ์ ์๋ตํ๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] MyBatis ์ Spring ์ฐ๋ํ๊ธฐ(1) : XML Mapper๋ฅผ ์ฌ์ฉํ ์ฐ๋ (0) | 2023.11.27 |
---|---|
[Spring] @Controller ์์ฒญ ๋ฉ์๋์ ๋ฐํ ์๋ฃํ (0) | 2023.11.27 |
[Spring] ์คํ๋ง ํ๋ก์ ํธ ์ค์ ์ผ๊ด ์ ์ฉ (0) | 2023.11.24 |
[Spring] Spring AOP ๊ธฐ์ด ๋ฐ ์์ (0) | 2023.11.23 |
[Spring] Spring DI(์์กด ์ฃผ์ ) ์์ ๋ฐ xml๋ก ์์กด๊ด๊ณ ํ์ฑํ๊ธฐ (0) | 2023.11.22 |