일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Array
- View
- React
- jquery
- Controller
- Board
- 상속
- 배열
- API
- html
- Database
- Thymeleaf
- Eclipse
- 문자열
- Uipath
- db
- SpringBoot
- spring
- 조건문
- string
- mysql
- rpa
- jsp
- Scanner
- JDBC
- MVC
- Oracle
- git
- 이클립스
- Java
- Today
- Total
유정잉
54일차 스프링 [ MVC - 추출, 주입, form taglib ] 본문
1. 추출 / 주입 받기
- HttpServletRequest 사용 (request.getParameter())
- WebRequest 사용
- 경로로 주입받기(=@PathVariable) 주소/값1/값2/값3/...
- ** @RequestParam ** 중요 !! : 값을 직접 주입받을 수 있다 (이름이 무조건 같아야함 !! 즉, 변수이름=파라미터이름)
- @ModelAttribute : 파라미터를 객체로 주입받을 수 있다. 생략도 가능하다. (@RequestParam은 일반변수, 파라미터로 주입 받음)
- 여기까진 값을 주입받아 값을 콘솔에 출력 !!!
2. viewReslover
- 값을 주입받아 값을 브라우저에 출력
- 값을 담는 setAttribute 사용해서 브라우저에 전달 (pageContext, request, session, ApplicationContext)
3. form 요소들 <form:form> ----> radio, checkbox, input ...
4. redirect / forward
5. request, session Bean 주입
//값을 세팅만 할 수 있음 - Model, ModelAndView
//값을 세팅해서 브라우저로 전송할 때 : requestScope.클래스명(맨앞글자 소문자).필드명
//값을 세팅해서 한번 더 매핑시켜서 데이터 가져올 때 : getAttribute(HttpServletRequest)
[ MVC_Basic_05 - project ]
※ 파라미터로 주입받는 방법 !!!
[ index.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<body>
<a href="t1?data1=10&data2=20&data3=30&data3=40?">test1</a><br>
<form action="t2" method="post">
d1 : <input type="text" name="d1"/><br>
d2 : <input type="text" name="d2"/><br>
d3 : <input type="checkbox" name="d3" value="10">data3 10
<input type="checkbox" name="d3" value="20">data3 20<br>
<button type="submit">test2</button>
</form>
<br>
<a href="t3?data1=10&data2=20&data3=30&data3=40?">test3</a><br>
<a href="t4/10/20/30">test4</a><br>
<a href="t5?data1=10&data2=20&data3=30&data3=40?">test5</a><br>
<a href="t6?data1=10&data2=20&data3=30&data3=40?">test6</a><br>
<a href="t7?data1=10">test7</a><br>
</body>
</html>
[ SpringController.java class 파일 ]
package kr.bit.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.request.WebRequest;
//Bean으로 등록함과 동시에 @Controller 작업이 일어나면서 Mapping 하겠다
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1(HttpServletRequest request) {
String d1 = request.getParameter("data1"); // 10
String d2 = request.getParameter("data2"); // 20
String d3[] = request.getParameterValues("data3");
System.out.println(d1);
System.out.println(d2);
for (String str : d3) {
System.out.println(str);
}
return "final";
}
@PostMapping("/t2")
public String t2(HttpServletRequest request) {
String d1 = request.getParameter("d1"); // 10
String d2 = request.getParameter("d2"); // 20
String d3[] = request.getParameterValues("d3");
System.out.println(d1);
System.out.println(d2);
for (String str : d3) {
System.out.println(str);
}
return "final";
}
@GetMapping("/t3")
public String t3(WebRequest request) {
String d1 = request.getParameter("data1"); // 10
String d2 = request.getParameter("data2"); // 20
String d3[] = request.getParameterValues("data3");
System.out.println(d1);
System.out.println(d2);
for (String str : d3) {
System.out.println(str);
}
return "final";
}
@GetMapping("/t4/{data1}/{data2}/{data3}")
public String t4(@PathVariable int data1, @PathVariable int data2, @PathVariable int data3) {
// @PathVariable : 데이터 요청주소에 값이 있을 경우 값을 주입받을 수 있다.
System.out.println(data1);
System.out.println(data2);
System.out.println(data3);
return "final";
}
@GetMapping("/t5")
public String t5(@RequestParam int data1, @RequestParam int data2, @RequestParam int[] data3) {
System.out.println(data1);
System.out.println(data2);
for(int str :data3) {
System.out.println(str);
}
return "final";
}
@GetMapping("/t6") //변수 이름을 다르게 줄 때 value 속성 사용을 해서 파라미터 이름을 지정한다
public String t6(@RequestParam(value="data1") int n1, @RequestParam(value="data2") int n2,
@RequestParam(value="data3") int[] n3) {
System.out.println(n1);
System.out.println(n2);
for(int str :n3) {
System.out.println(str);
}
return "final";
}
@GetMapping("/t7") //@RequestParam(required = false)는 false일 때 null값 들어감
public String t7(@RequestParam int data1, @RequestParam(required = false) String data2,
@RequestParam(defaultValue = "0") int data3) {
System.out.println(data1);
System.out.println(data2);
System.out.println(data3);
return "final";
}
}
[ MVC_Basic_06 - project ]
※ 객체로 주입받는 방법 !!
1) views 폴더 안에 index.jsp 와 final.jsp JSP 파일 생성
[ index.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="t1?data1=10&data2=20&data3=30&data4=40">test1</a>
<br>
<a href="t3?data1=10&data2=20&data3=30&data4=40">test2</a>
<br>
</body>
</html>
[ final.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>Final</h1>
</body>
</html>
2) kr.bit.beans package 안에 Data, Data2 class 생성
package kr.bit.beans;
public class Data {
private int data1;
private int data2;
private int data3[];
public int getData1() {
return data1;
}
public void setData1(int data1) {
this.data1 = data1;
}
public int getData2() {
return data2;
}
public void setData2(int data2) {
this.data2 = data2;
}
public int[] getData3() {
return data3;
}
public void setData3(int[] data3) {
this.data3 = data3;
}
}
package kr.bit.beans;
public class Data2 {
private int data1;
private int data2;
public int getData1() {
return data1;
}
public void setData1(int data1) {
this.data1 = data1;
}
public int getData2() {
return data2;
}
public void setData2(int data2) {
this.data2 = data2;
}
}
2) kr.bit.controller package 안에 SpringController class 생성
@ModelAttribute : 파라미터를 객체로 주입받을 수 있다. 생략도 가능하다. 그치만 보통 알아보기 위해 써준다 !
(@RequestParam은 일반변수, 파라미터로 주입 받음)
package kr.bit.controller;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestParam;
import kr.bit.beans.Data;
import kr.bit.beans.Data2;
//Bean으로 등록함과 동시에 @Controller 작업이 일어나면서 Mapping 하겠다
@Controller
public class SpringController {
@GetMapping("/t1") //t1?data1=10&data2=20&data3=30&data3=40?
public String t1(@RequestParam Map<String, String> map,
@RequestParam List<String> data3) {
String data1=map.get("data1");
String data2=map.get("data2");
String data33=map.get("data3");
System.out.println(data1);
System.out.println(data2);
System.out.println(data33);
for(String str : data3) {
System.out.println(str);
}
return "final";
}
@GetMapping("/t2") //index.jsp에서 값을 넘길 때 (/t2) -> Data 객체 필드에 주입 됨 (넘긴값)
public String t2(@ModelAttribute Data bean1, Data2 bean2) { //@ModelAttribute 써도 되고 생략도 가능 ! (그치만 보통 써줌 표시하기위해)
System.out.println(bean1.getData1());
System.out.println(bean1.getData2());
for(int n : bean1.getData3()) {
System.out.println(n);
}
System.out.println(bean2.getData1());
System.out.println(bean2.getData2());
return "final";
}
}
[ MVC_Basic_07 - project ]
1) views 폴더 안에 indaex.jsp, test1, test2, test3, test4 JSP 파일 생성 (SpringController에서 설정한 data값 출력하기)
requestScope는 생략 가능 ! Model이 붙어있으면 범위가 request 임 !
[ index.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="t1?data1=10&data2=20">test1</a><br>
<a href="t2">test2</a><br>
<a href="t3">test3</a><br>
<a href="t4">test4</a><br>
</body>
</html>
[ test1.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- data1, data2 출력 -->
${param.data1 }<br>
${param.data2 }<br>
</body>
</html>
[ test2.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- data1, data2 출력 -->
<!-- test1.jsp와 달리 requestScope. 생략도 가능 ! -->
${requestScope.data1 }<br>
${data2 }<br>
</body>
</html>
[ test3.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- data1, data2 출력 -->
<!-- test1.jsp와 달리 param 생략도 가능 ! -->
${requestScope.data1 }<br>
${data2 }<br>
</body>
</html>
[ test4.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- data1, data2 출력 -->
<!-- test1.jsp와 달리 param 생략도 가능 ! -->
${requestScope.data1 }<br>
${data2 }<br>
</body>
</html>
2) kr.bit.controller package 안에 SpringController.java class 생성
package kr.bit.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
//Bean으로 등록함과 동시에 @Controller 작업이 일어나면서 Mapping 하겠다
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1() {
return "test1";
}
@GetMapping("/t2")
public String t2(HttpServletRequest request) {
request.setAttribute("data1", 10);
request.setAttribute("data2", 20);
return "test2";
}
@GetMapping("/t3")
public String t3(Model model) { //범위가 request
model.addAttribute("data1",30);
model.addAttribute("data2",40);
return "test3";
}
@GetMapping("/t4")
public ModelAndView t4(ModelAndView mv) {
mv.addObject("data1",50);
mv.addObject("data2",60);
mv.setViewName("test4"); //test4로 뷰페이지 설정 -> 페이지 이동
return mv;
}
}
[ MVC_Basic_08 - project ]
Data에 해당하는 필드 명이랑 name이랑 똑같이 줘야 함 ~~ !!
1) kr.bit.beans package에 Data.java class 생성
package kr.bit.beans;
public class Data {
private String str1;
private String str2;
public String getStr1() {
return str1;
}
public void setStr1(String str1) {
this.str1 = str1;
}
public String getStr2() {
return str2;
}
public void setStr2(String str2) {
this.str2 = str2;
}
}
2) views 폴더 안에 index.jsp -> 객체로 저장된 필드 값 가져올 때 클래스명 맨 앞글자는 소문자 !! (대문자 아님)
${request.data.str1 }
[ index.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="t1" method="post">
d1:<input type="text" name="str1" /><br> <!-- 여기서 name 값이 Data 클래스의 필드명과 일치해야함 -->
d2:<input type="text" name="str2" /><br>
<button type="submit">체크</button>
</form>
<form action="t2" method="post">
d1:<input type="text" name="str1" /><br>
d2:<input type="text" name="str2" /><br>
<button type="submit">체크</button>
</form>
</body>
</html>
[ test1.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 값이 출력되지 않음 -->
${requestScope.str1 }
<!-- name값 똑같이 값 출력 됨 -->
<!-- 그리고 str1 앞에 data를 적어줘야 함 ! 그래야 출력 가능 -->
<!-- 객체로 저장된 필드 값 가져올 때 클래스명 맨 앞글자는 소문자로 지정 -->
${requestScope.data.str1 }
${requestScope.data.str2 }
</body>
</html>
[ test2.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 객체로 지정된 필드 값 가져올 때 클래스명 맨 앞글자는 소문자 -->
<!-- Controller에서 @ModelAttribute("test")로 이름 지정 했기 때문에 data가 아닌 test로 -->
${requestScope.test.str1 }
${requestScope.test.str2 }
</body>
</html>
2) kr.bit.controller package 안에 SpringController.java class 생성
package kr.bit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import kr.bit.beans.Data;
//Bean으로 등록함과 동시에 @Controller 작업이 일어나면서 Mapping 하겠다
@Controller
public class SpringController {
@PostMapping("/t1")
public String t1(@ModelAttribute Data bean1) {
return "test1";
}
@PostMapping("/t2") //@ModelAttribute("test") 에 이름을 지정 함
public String t2(@ModelAttribute("test") Data bean1) {
return "test2";
}
}
[ MVC_Basic_09 - project ]
form 요소들 <form:form>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
1) views 폴더 안에 index.jsp , test1.jsp
밑에 코드 활용하여 <form:xxx></form:xxx> 사용
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
[ index.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<body>
<a href="t1">test1</a><br>
<a href="t2">test1</a><br>
<a href="t3">test1</a><br>
<a href="t4">test1</a><br>
</body>
</html>
[ test1.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="final" method="post">
이름 : <input type="text" name="name" value="${requestScope.data.name }"><br>
아이디 : <input type="text" name="id" value="${data.id }"><br>
비번 : <input type="text" name="pw" value="${data.pw }"><br>
주소1 : <input type="text" name="adr1" value="${requestScope.data.adr1 }"><br>
주소2 : <input type="text" name="adr2" value="${requestScope.data.adr2 }"><br>
</form>
</body>
</html>
[ test2.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form:form action="final" modelAttribute="data">
이름 : <form:input path="name" /><br> <!-- path이름과 설정한 필드명이 같아야 함 -->
아이디 : <form:input path="id" /><br>
비번 : <form:input path="pw" /><br>
주소1 : <form:input path="adr1" /><br>
주소2 : <form:input path="adr2" /><br>
<button type="submit">체크</button>
</form:form>
</body>
</html>
[ test3.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form:form action="final" modelAttribute="modelBean">
이름 : <form:input path="name" /><br> <!-- path이름과 설정한 필드명이 같아야 함 -->
아이디 : <form:input path="id" /><br>
비번 : <form:input path="pw" showPassword="true"/><br>
주소1 : <form:input path="adr1" /><br>
주소2 : <form:input path="adr2" /><br>
<button type="submit">체크</button>
</form:form>
</body>
</html>
[ test4.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form:form action="final" modelAttribute="modelBean">
이름 : <form:input path="name" /><br> <!-- path이름과 설정한 필드명이 같아야 함 -->
아이디 : <form:input path="id" /><br>
비번 : <form:input path="pw" showPassword="true"/><br>
주소1 : <form:input path="adr1" /><br>
주소2 : <form:input path="adr2" /><br>
<button type="submit">체크</button>
</form:form>
</body>
</html>
2) kr.bit.controller package 안에 SpringController.java class 생성
package kr.bit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import kr.bit.beans.Data;
//Bean으로 등록함과 동시에 @Controller 작업이 일어나면서 Mapping 하겠다
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1(Data bean) { //경로매핑 후에 필드에 값을 세팅
bean.setName("현욱");
bean.setId("harry");
bean.setPw("1234");
bean.setAdr1("seoul");
bean.setAdr2("gangnam");
return "test1";
}
@GetMapping("/t2")
public String t2(Data bean) { //경로매핑 후에 필드에 값을 세팅
bean.setName("예준");
bean.setId("Juun");
bean.setPw("5678");
bean.setAdr1("seoul");
bean.setAdr2("seocho");
return "test2";
}
@GetMapping("/t3")
public String t3(@ModelAttribute("modelBean") Data bean) {
bean.setName("호준");
bean.setId("hoho");
bean.setPw("2345");
bean.setAdr1("seoul");
bean.setAdr2("mapo");
return "test3";
}
@GetMapping("/t4")
public String t4(Model model) {
Data bean=new Data();
bean.setName("성민");
bean.setId("mini");
bean.setPw("3456");
bean.setAdr1("seoul");
bean.setAdr2("yongsan");
model.addAttribute("modelBean",bean);
return "test4";
}
}
[ MVC_Basic_10 - project ]
form 요소들 <form:form>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
1) views 폴더 안에 index.jsp , main1.jsp , main2.jsp
[ index.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<body>
<a href="t1">Redirect</a><br>
<a href="t2">Forword</a><br>
</body>
</html>
[ main1.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>main1_redirect</h1>
</body>
</html>
[ main2.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>main2_forward</h1>
</body>
</html>
2) kr.bit.controller package 안에 SpringController.java class 생성
package kr.bit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
//Bean으로 등록함과 동시에 @Controller 작업이 일어나면서 Mapping 하겠다
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1() {
return "redirect:/main1"; //t1으로 주소가 바뀌는게 아니라 main1으로 바뀜
}
@GetMapping("/main1")
public String main1() {
return "main1";
}
@GetMapping("/t2")
public String main2() {
return "main2";
}
}
[ MVC_Basic_11 - project ]
RootAppContext.java class에 Data.java Bean으로 등록
1) views 폴더 안에 index.jsp
[ index.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<body>
<a href="t1">test1</a><br>
</body>
</html>
2) Data, Data2, Data3, Data4
package kr.bit.beans;
public class Data {
private String str1;
private String str2;
public String getStr1() {
return str1;
}
public void setStr1(String str1) {
this.str1 = str1;
}
public String getStr2() {
return str2;
}
public void setStr2(String str2) {
this.str2 = str2;
}
}
package kr.bit.beans;
public class Data2 {
private String str3;
private String str4;
public String getStr3() {
return str3;
}
public void setStr3(String str3) {
this.str3 = str3;
}
public String getStr4() {
return str4;
}
public void setStr4(String str4) {
this.str4 = str4;
}
}
package kr.bit.beans;
import org.springframework.stereotype.Component;
@Component
public class Data3 {
private String str5;
private String str6;
public String getStr5() {
return str5;
}
public void setStr5(String str5) {
this.str5 = str5;
}
public String getStr6() {
return str6;
}
public void setStr6(String str6) {
this.str6 = str6;
}
}
package kr.bit.beans;
import org.springframework.stereotype.Component;
@Component(value = "request4")
public class Data4 {
private String str7;
private String str8;
public String getStr7() {
return str7;
}
public void setStr7(String str7) {
this.str7 = str7;
}
public String getStr8() {
return str8;
}
public void setStr8(String str8) {
this.str8 = str8;
}
}
3) kr.bit.config package에 RootAppContext.java class에 Bean 등록
Data와 Data2는 Root에 @Bean으로 등록했지만 Data3와 Data4는 @Component이므로
kr.bit.config package에 ServletAppContext.java class에 @ComponentScan("kr.bit.beans") 추가해줘야함
package kr.bit.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import kr.bit.beans.Data;
import kr.bit.beans.Data2;
@Configuration
public class RootAppContext { //root-context.xml
@Bean
public Data data() {
return new Data();
}
@Bean("request2")
public Data2 data2() {
return new Data2();
}
}
package kr.bit.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
@ComponentScan("kr.bit.controller")
@ComponentScan("kr.bit.beans") //추가한 부분 !!!!
public class ServletAppContext implements WebMvcConfigurer{
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
WebMvcConfigurer.super.configureViewResolvers(registry);
registry.jsp("/WEB-INF/views/",".jsp");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
WebMvcConfigurer.super.addResourceHandlers(registry);
registry.addResourceHandler("/**").addResourceLocations("/resources/");
}
}
4) kr.bit.controller package 안에 SpringController.java class 생성
package kr.bit.controller;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import kr.bit.beans.Data;
import kr.bit.beans.Data2;
import kr.bit.beans.Data3;
import kr.bit.beans.Data4;
//Bean으로 등록함과 동시에 @Controller 작업이 일어나면서 Mapping 하겠다
@Controller
public class SpringController {
@Autowired
Data data1; //Ioc 컨테이너에 빈으로 등록(@Bean)한 Data 객체의 주소값이 data1 필드에 주입 됨
@Resource(name="request2")
Data2 data2; //Ioc 컨테이너에 빈으로 등록(@Bean)한 이름을 지정(request2) Data2 객체의 주소값이 data2 필드에 자동 주입 됨
@Autowired
Data3 data3;
@Resource(name="request4")
Data4 data4;
@GetMapping("/t1")
public String t1() {
data1.setStr1("스프링1");
data1.setStr2("스프링2");
data2.setStr3("스프링3");
data2.setStr4("스프링4");
data3.setStr5("스프링5");
data3.setStr6("스프링6");
data4.setStr7("스프링7");
data4.setStr8("스프링8");
return "forward:/final1";
//이부분을 return "redirect:/final1";로 바꿔도 final1 유지가 됨 (원래는 안 되는게 정상 !)
}
@GetMapping("/final1")
public String final1(Model model) { //request 범위랑 같음
//model 객체에 data1234 값 넣기
model.addAttribute("data1", data1);
model.addAttribute("data2", data2);
model.addAttribute("data3", data3);
model.addAttribute("data4", data4);
return "final";
}
}
5) views 폴더 안에 final.jsp
[ final.jsp JSP 파일 ]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<body>
<!-- requestScope 생략 가능 -->
${data1.str1 }
${requestScope.data1.str2 } <br>
${requestScope.data2.str3 }
${requestScope.data2.str4 } <br>
${requestScope.data3.str5 }
${requestScope.data3.str6 } <br>
${requestScope.data4.str7 }
${requestScope.data4.str8 } <br>
</body>
</html>
6) 다시 RootAppContext.java로 돌아와서 data()와 data2()에 @RequestScope 추가
그리고 Data3과 Data4에도 @RequestScope 추가 !!
package kr.bit.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.annotation.RequestScope;
import kr.bit.beans.Data;
import kr.bit.beans.Data2;
@Configuration
public class RootAppContext { //root-context.xml
@Bean
@RequestScope //요청이 발생할 때 마다 Bean 객체가 생성되어 자동으로 주입된다
public Data data() {
return new Data();
}
@Bean("request2")
@RequestScope
public Data2 data2() {
return new Data2();
}
}
package kr.bit.beans;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
@Component
@RequestScope
public class Data3 {
private String str5;
private String str6;
public String getStr5() {
return str5;
}
public void setStr5(String str5) {
this.str5 = str5;
}
public String getStr6() {
return str6;
}
public void setStr6(String str6) {
this.str6 = str6;
}
}
package kr.bit.beans;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
@Component(value = "request4")
@RequestScope
public class Data4 {
private String str7;
private String str8;
public String getStr7() {
return str7;
}
public void setStr7(String str7) {
this.str7 = str7;
}
public String getStr8() {
return str8;
}
public void setStr8(String str8) {
this.str8 = str8;
}
}
[ MVC_Basic_12 - project ]
1) views 폴더 안에 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<body>
<a href="t1">test1</a><br>
<a href="t2">test2</a><br>
<a href="t3">test3</a><br>
<a href="t4">test4</a><br>
<a href="t5">test5</a><br>
</body>
</html>
2) kr.bit.controller package 안에 SpringController.java class 생성
package kr.bit.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.servlet.ModelAndView;
import kr.bit.beans.Data;
//Bean으로 등록함과 동시에 @Controller 작업이 일어나면서 Mapping 하겠다
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1(HttpServletRequest request) {
request.setAttribute("data1", "spring1");
return "forward:/final1";
//index에서 test1을 누르면 data1에 spring1이란 정보 담아서 final1로 이동
}
@GetMapping("/final1")
public String final1(HttpServletRequest request) {
//data1을 받아서 final1.jsp에 출력 data1을
String data1 = (String)request.getAttribute("data1");
return "final1";
}
@GetMapping("/t2")
public String t2(Model model) {
model.addAttribute("data2" , "spring2");
return "forward:/final2";
}
@GetMapping("/final2")
public String final2(HttpServletRequest request) {
request.getAttribute("data2");
return "final2";
}
@GetMapping("/t3")
public ModelAndView t3(ModelAndView mv) {
mv.addObject("data3","spring3");
mv.setViewName("forward:/final3");
return mv;
}
//값을 세팅만 할 수 있음 - Model, ModelAndView
//값을 세팅해서 브라우저로 전송할 때 : requestScope.클래스명(맨앞글자 소문자).필드명
//값을 세팅해서 한번 더 매핑시켜서 데이터 가져올 때 : getAttribute(HttpServletRequest)
@GetMapping("/final3")
public String final3(HttpServletRequest request) {
request.getAttribute("data3");
return "final3";
}
@GetMapping("/t4")
public String t4(@ModelAttribute("bean") Data d1) {
d1.setStr1("aa");
d1.setStr2("bb");
return "forward:/final4";
}
@GetMapping("/final4")
public String final4(HttpServletRequest request) {
Data d1=(Data)request.getAttribute("bean");
System.out.println(d1.getStr1());
System.out.println(d1.getStr2());
return "final4";
//final4에서
}
}
3) kr.bit.beans package 안에 Data.java class
package kr.bit.beans;
public class Data {
private String str1;
private String str2;
public String getStr1() {
return str1;
}
public void setStr1(String str1) {
this.str1 = str1;
}
public String getStr2() {
return str2;
}
public void setStr2(String str2) {
this.str2 = str2;
}
}
4) views 폴더 안에 final1 2 3 4
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<body>
${requestScope.data1 }
</body>
</html>
'네이버 클라우드 부트캠프 > 복습 정리' 카테고리의 다른 글
56일차 스프링 [ MVC - 어노테이션, 유효성, 인터셉터, DB 설정 ] (4) | 2024.05.10 |
---|---|
55일차 스프링 [ MVC - session, properties, 유효성검사 ] (2) | 2024.05.09 |
53일차 스프링 [ MVC ] (0) | 2024.05.07 |
52일차 스프링 [ Component, AOP, JDBC ] (0) | 2024.05.03 |
51일차 스프링 [ 주입 DI ] (0) | 2024.05.02 |