Controller04 : 2. requset 분석 가공
Controller05 : 5. forward, redirect
Controller06 : 4. setattribute
xml 파일에 이거 뜻 알아오기(다음에보면)
<annotation-driven>
<context:componetn-scan>
request 값이 할당된다.
스프링관련된
Spring makes Java simple.
Level up your Java code and explore what Spring can do for you.
spring.io
spring.io -> project(Spring Framwork) -> LEARN -> Reference Doc. -> Web Servlet (들어가는순서)
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web/
Web on Servlet Stack
Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more com
docs.spring.io
Spring Web MVC
현재 1.3.3 (Anootated Controllers)
@RequestParam
Any other return value
@RequestParam
@ModelAttribute
이름이 다를경우
@RequestParam("") "" 안에 넣어 사용가능..?
orz.zerock.controller.p01controller 랑 org.zerock.controller.p01controller.bean 에있는 것들
Controller04 전체
(Controller04 가 양이 많아서 부분부분씩 올림)
package org.zerock.controller.p01controller;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.zerock.controller.p01controller.bean.Bean01;
import org.zerock.controller.p01controller.bean.Bean02;
import org.zerock.controller.p01controller.bean.Bean03;
import org.zerock.controller.p01controller.bean.Bean04;
import org.zerock.controller.p01controller.bean.Bean05;
import org.zerock.controller.p01controller.bean.Bean06;
import org.zerock.controller.p01controller.bean.Bean07;
import org.zerock.controller.p01controller.bean.Bean08;
@Controller
@RequestMapping("/cont04")
public class Controller04 {
@RequestMapping("/met01")
public void method01(String name, String city) {
System.out.println(name);
System.out.println(city);
}
@RequestMapping("/met02")
public void method02(HttpServletRequest request) {
// 2.request 분석 가공
String name = request.getParameter("name");
String city = request.getParameter("city");
Bean01 bean = new Bean01();
bean.setName(name);
bean.setCity(city);
System.out.println(bean); // 잘 들어왔는지 확인
// 3. business logic
// 4. add attributes
// 5. forward / redirect
}
@RequestMapping("/met03")
public void method03(Bean01 bean) {
System.out.println(bean); // 잘 들어왔는지 확인
}
// /cont04/met04?country=usa&address=seoul&phone=01012345678&email=usa@seoul.com
@RequestMapping("/met04")
public void method04(Bean02 bean) {
System.out.println(bean); // 각 프로퍼티가 null 이 아니도록 요청 해보세요
}
// /controller/cont04/met05?name=john&age=33
@RequestMapping("/met05")
public void method05(Bean03 bean) {
System.out.println(bean);
}
// /cont04/met06?id=99&score=99.99
@RequestMapping("/met06")
public void method06(Bean04 bean) {
System.out.println(bean); // 각 프로퍼티가 0이 아니도록 요청
}
// /cont04.met07?tel=010&tel=011&tel012
@RequestMapping("/met7")
public void method07(@RequestParam("tel") ArrayList<String> tel) {
System.out.println(tel);
}
// /cont04/met08?name=john&tel=010&tel=011&tel=012
@RequestMapping("/met08")
public void method08(Bean05 bean) {
System.out.println(bean);
}
// /cont04/met09?name=john&id=3&address=seoul&address=busan&address=gangnam
@RequestMapping("/met09")
public void method09(Bean06 bean) {
System.out.println(bean); // 모든 프로퍼티에 값이 들어가도록 요청
}
@RequestMapping("/met10")
public void method10(@RequestParam("date")
// @DateTimeFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(iso = ISO.DATE)
LocalDate date) {
System.out.println(date);
}
@RequestMapping("/met11")
public void method11(@RequestParam("dateTime") @DateTimeFormat(iso = ISO.DATE_TIME) LocalDateTime dateTime) {
System.out.println(dateTime);
}
// /cont04/met12?name=donald*birth=1991-01-01&inserted=1988-01-02T15:33:22
@RequestMapping("/met12")
public void method12(Bean07 bean) {
System.out.println(bean);
}
// /cont04/met13?name=trump&age=99&moved=1988-02-02&writed=2010-03-03T17:22:11
@RequestMapping("/met13")
public void method13(Bean08 bean) {
System.out.println(bean); // 모든 프로퍼티가 requestparam 으로부터 채워져서 출력되로록
}
@RequestMapping("/met14")
public void method14(@RequestParam String name, @RequestParam int age, HttpServletRequest request) {
System.out.println(name);
System.out.println(age);
System.out.println(request);
}
}
★Controller04 ,Bean01
(Controller04 가 양이 많아서 부분부분씩 올림)
Bean01에 컴포넌트 어노테이션 안붙여도 스프링이 객체를 생성해주는건가요? 네
요청이 오면 set머머머 가 있으면
public void method03(Bean01 bean) { } 가 실행
Controller04
package org.zerock.controller.p01controller;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.zerock.controller.p01controller.bean.Bean01;
import org.zerock.controller.p01controller.bean.Bean02;
import org.zerock.controller.p01controller.bean.Bean03;
import org.zerock.controller.p01controller.bean.Bean04;
import org.zerock.controller.p01controller.bean.Bean05;
import org.zerock.controller.p01controller.bean.Bean06;
import org.zerock.controller.p01controller.bean.Bean07;
import org.zerock.controller.p01controller.bean.Bean08;
@Controller
@RequestMapping("/cont04")
public class Controller04 {
@RequestMapping("/met01")
public void method01(String name, String city) {
System.out.println(name);
System.out.println(city);
}
@RequestMapping("/met02")
public void method02(HttpServletRequest request) {
// 2.request 분석 가공
String name = request.getParameter("name");
String city = request.getParameter("city");
Bean01 bean = new Bean01();
bean.setName(name);
bean.setCity(city);
System.out.println(bean); // 잘 들어왔는지 확인
// 3. business logic
// 4. add attributes
// 5. forward / redirect
}
@RequestMapping("/met03")
public void method03(Bean01 bean) {
System.out.println(bean); // 잘 들어왔는지 확인
}
}
org.zerock.controller.p01controller
bean패키지의 Bean01
package org.zerock.controller.p01controller.bean;
import lombok.Data;
@Data
public class Bean01 {
private String name;
private String city;
}
@RequestMapping("/met01")
@RequestMapping("/met01")
public void method01(String name, String city) {
System.out.println(name);
System.out.println(city);
}
○결과값들
http://localhost:8080/controller/cont04/met01 인경우
값을 넣은게 없으니 null
http://localhost:8080/controller/cont04/met01?name=hesitater&city=seoul 인경우
@RequestMapping("/met02")
@RequestMapping("/met02")
public void method02(HttpServletRequest request) {
// 2.request 분석 가공
String name = request.getParameter("name");
String city = request.getParameter("city");
Bean01 bean = new Bean01();
bean.setName(name);
bean.setCity(city);
System.out.println(bean); // 잘 들어왔는지 확인
// 3. business logic
// 4. add attributes
// 5. forward / redirect
}
http://localhost:8080/controller/cont04/met02 인경우
(우리가 JSP 에서 JDBCServlet으로 doGet,doPost 작성할때 했던것처럼)
http://localhost:8080/controller/cont04/met02?name=name&city=city 일경우
@RequestMapping("/met03")
@RequestMapping("/met03")
public void method03(Bean01 bean) {
System.out.println(bean); // 잘 들어왔는지 확인
}
http://localhost:8080/controller/cont04/met03
http://localhost:8080/controller/cont04/met03?name=hesitater&city=seoul
method1,2,3, 모두 다 같은 것들을 나타낸다
method1은 name, city 를 넣은거고
method2은 jsp처럼 HttpservletRequest requset 와 bean 을통해
meyhod3은 bean 객체를 통해
★ Controller04, Bean02
Bean02 ( String)
package org.zerock.controller.p01controller.bean;
import lombok.Data;
@Data
public class Bean02 {
private String country;
private String address;
private String phone;
private String email;
}
Controller04의 method04
// /cont04/met04?country=usa&address=seoul&phone=01012345678&email=usa@seoul.com
@RequestMapping("/met04")
public void method04(Bean02 bean) {
System.out.println(bean); // 각 프로퍼티가 null 이 아니도록 요청 해보세요
}
○결과값
http://localhost:8080/controller/cont04/met04?country=usa&address=seoul&phone=01012345678&email=usa@seoul.com 인경우
★Controller04 의 method05, Bean03
Bean들의 타입들이 다를때
변환되지 않은 값일때는 주의
Bean03 ( String , int)
package org.zerock.controller.p01controller.bean;
import lombok.Data;
@Data
public class Bean03 {
private String name;
private int age;
}
Controller04의 method05
// /cont04/met05?name=john&age=33
@RequestMapping("/met05")
public void method05(Bean03 bean) {
System.out.println(bean);
}
○결과값
http://localhost:8080/controller/cont04/met05?name=john&age=33 인경우
http://localhost:8080/controller/cont04/met05?name=john&age= 안나옴
http://localhost:8080/controller/cont04/met05?name=john 이름 나오고 age는 기본값 0나옴
★Controller04 의 method06, Bean04
Bean04( int, double)
package org.zerock.controller.p01controller.bean;
import lombok.Data;
@Data
public class Bean04 {
private int id;
private double score;
}
Controller04의 method06
// /cont04/met06?id=99&score=99.99
@RequestMapping("/met06")
public void method06(Bean04 bean) {
System.out.println(bean); // 각 프로퍼티가 0이 아니도록 요청
}
○결과값
http://localhost:8080/controller/cont04/met06?id=99&score=99.99 인경우
http://localhost:8080/controller/cont04/met06?id=2.7&score=3.14 // 안나옴 id에 더블값 넣어서그런가..
★Controller04 의 method07
같은 리퀘스트 파라미터값의 이름을 가진거 여러개 전송
List or Arraylist (버전마다다름) 지금 현재는 List 안됨 ArrayList 가능
(@RequestParam("tel") ArrayList<String> tel)
생략되었을떄 @requestParam("사용할이름")
Controller04의 method07
// /cont04/met07?tel=010&tel=011&tel=012
@RequestMapping("/met07")
public void method07(@RequestParam("tel") ArrayList<String> tel) {
System.out.println(tel);
}
○결과값
http://localhost:8080/controller/cont04/met07?tel=010&tel=011&tel=012 인 경우
★Controller04 의 method08, Bean05
Bean05 ( String, ArrayList)
package org.zerock.controller.p01controller.bean;
import java.util.ArrayList;
import lombok.Data;
@Data
public class Bean05 {
private String name;
private ArrayList<String> tel;
}
Controller04의 method08
// /cont04/met08?name=john&tel=010&tel=011&tel=012
@RequestMapping("/met08")
public void method08(Bean05 bean) {
System.out.println(bean);
}
○결과값
http://localhost:8080/controller/cont04/met08?name=john&tel=010&tel=011&tel=012 인경우
★Controller04 의 method09, Bean06
Bean 만들고 get,set 만들고 (@Data)로 한다.
Bean06 ( String int ArrayList)
package org.zerock.controller.p01controller.bean;
import java.util.ArrayList;
import lombok.Data;
@Data
public class Bean06 {
private String name;
private int id;
private ArrayList<String> address;
}
Controller04의 method08
// /cont04/met09?name=john&id=3&address=seoul&address=busan&address=gangnam
@RequestMapping("/met09")
public void method09(Bean06 bean) {
System.out.println(bean); // 모든 프로퍼티에 값이 들어가도록 요청
}
○결과값
http://localhost:8080/controller/cont04/met09?name=john&id=3&address=seoul&address=busan&address=gangnam
인 경우
★Controller04 의 method11,method12, Bean07
LocalDate, LocalDateTime
@DateTimeFormat 를 붙여야함
@DateTimeFormat(iso = ISO.DATE)
@DateTimeFormat(iso = ISO.DATE_TIME)
method11은 하나의 파라미터의 2개의 어노테이션이 붙은 상황
Bean07 ( LocalDate, LocalDateTime)
package org.zerock.controller.p01controller.bean;
import java.time.LocalDate;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import lombok.Data;
@Data
public class Bean07 {
private String name;
@DateTimeFormat(iso = ISO.DATE)
private LocalDate birth;
@DateTimeFormat (iso = ISO.DATE_TIME)
private LocalDateTime inserted;
}
Controller04의 method10, method11
@RequestMapping("/met10")
public void method10(@RequestParam("date")
// @DateTimeFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(iso = ISO.DATE)
LocalDate date) {
System.out.println(date);
}
@RequestMapping("/met11")
public void method11(@RequestParam("dateTime") @DateTimeFormat(iso = ISO.DATE_TIME) LocalDateTime dateTime) {
System.out.println(dateTime);
}
○결과값
http://localhost:8080/controller/cont04/met10?date=2021-12-06 인경우 (method10)
http://localhost:8080/controller/cont04/met11?dateTime=2021-12-06T11:37:06 인경우 (method11)
★Controller04 의 method12, Bean07
bean의 프로퍼티 타입일떄 ( LocalDate, LocalDateTime)
(위의 10,11과 비교 낫베드)
빈의 필드에도
@DateTimeFormat(iso = ISO.DATE)
@DateTimeFormat(iso = ISO.DATE_TIME)
명시 해줘야함
Bean07 ( LocalDate, LocalDateTime)
package org.zerock.controller.p01controller.bean;
import java.time.LocalDate;
import java.time.LocalDateTime;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import lombok.Data;
@Data
public class Bean07 {
private String name;
@DateTimeFormat(iso = ISO.DATE)
private LocalDate birth;
@DateTimeFormat (iso = ISO.DATE_TIME)
private LocalDateTime inserted;
}
Controller04의 method13
// /cont04/met12?name=donald*birth=1991-01-01&inserted=1988-01-02T15:33:22
@RequestMapping("/met12")
public void method12(Bean07 bean) {
System.out.println(bean);
}
○결과값
http://localhost:8080/controller/cont04/met12?name=donald&birth=1991-01-01&inserted=1988-01-02T15:33:22
인 경우
★Controller04의 method14
쌤 그러면 HttpServletRequest는 이제 어디서 처리해주는 건가욥?
잘 모르지만 아래 코드가 그 예시임
Controller04의 method14
@RequestMapping("/met14")
public void method14(@RequestParam String name, @RequestParam int age, HttpServletRequest request) {
System.out.println(name);
System.out.println(age);
System.out.println(request);
}
○결과값
http://localhost:8080/controller/cont04/met14?name=donald&age=99 인경우
메소드의리턴..?
★Controller05 전체
Controller05의 전체
package org.zerock.controller.p02controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/cont05")
public class Controller05 {
// request handler method return values
@RequestMapping("/met01")
public String method01(HttpServletRequest request) {
// 2. request 분석.가공
// 3. business 로직
// 4. addd attribute
// 5. forward / redirect
// String path = "WEB-INF/view/view01.jsp";
// request.getRequestDispatcher(path).forward(request,response);
return "view01";
}
// 할일 : /cont05/met02 로 요청이 오면 /WEB-INF.views/view02.jsp로 포워드 되도록 작성
@RequestMapping("/met02")
public String method02() {
return "view02";
}
@RequestMapping("/met03")
public String method03() {
return "/cont05/view03"; // prefix : /WEB-INF/views/ , suffix : .jsp
}
@RequestMapping("/met04")
public String method04() {
return "/cont05/view04"; // /WEB-INF/views//cont05/view04.jsp
}
// redirect
@RequestMapping("/met05")
public String method05() {
// servlet 사용시 /
// String location = request.getContextPath() + "/path";
// response.sendRedirect(location);
/* spring mvc 사용시 */
return "redirect:/cont05/met04"; // /WEB-INF/view/redirect:/cont05/met04
}
// 할일 : /cont05/met06 으로 요청 왔을 때 /cont05/met04 로 redirect 되는method06을 만들기
@RequestMapping("/met06")
public String method06() {
return "redirect:/cont05/met04";
}
// /cont05/met07
@RequestMapping("/met07")
public String method07 () {
return null; // view 이름과 요청 경로가 같은 경우 null 리턴 가능
}
// /cont05/met08
@RequestMapping("/met08")
public void method08() {
// view 이름과 요청 경로가 같은 경우 void return 타입으로 결정
}
// 할 일 : /cont05/met09 로 요청이 왔을 때 /WEB-INF/views/cont05/met09.jsp로 표워드 되도록 method09 메소드 작성
@RequestMapping("/met09")
public String method09 () {
System.out.println("method09실행");
return null;
}
/*
@RequestMapping("/met09")
public void method09 () {
}
* */
}
우리가 JDBCServlet에서 했던 것들중 forward/redirect 부분들을 스프링에서는 어떻게하는가?
★Controller05 method01,method02 view01.jsp,view02.jsp
Controller05의 method01
@RequestMapping("/met01")
public String method01(HttpServletRequest request) {
// 2. request 분석.가공
// 3. business 로직
// 4. addd attribute
// 5. forward / redirect
// String path = "WEB-INF/view/view01.jsp";
// request.getRequestDispatcher(path).forward(request,response);
return "view01";
}
view01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<h1>view01포워드 잘됨</h1>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
Controller05의 method02
/WEB-INF/
// 할일 : /cont05/met02 로 요청이 오면 /WEB-INF/views/view02.jsp로 포워드 되도록 작성
@RequestMapping("/met02")
public String method02() {
return "view02";
}
view02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<h1>view02 포워드 되면 이화면 나오겠죠</h1>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont05/met01 인경우
http://localhost:8080/controller/cont05/met02 인경우
★Controller05 method03, method04, view04.jsp
forward 할때 method04 에서 return "/cont05/view04"; 괜찮음
Controller05 method03
@RequestMapping("/met03")
public String method03() {
return "cont05/view03"; // prefix : /WEB-INF/views/ , suffix : .jsp
}
Contriller05 method04,
@RequestMapping("/met04")
public String method04() {
return "/cont05/view04"; // /WEB-INF/views//cont05/view04.jsp
}
view03.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<h1>view03 jsp포워드되면 이글자나옴?<i class="fab fa-apple"></i></h1>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
view04.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<h1>view04 jsp포워드되면 이글자나옴?<i class="fab fa-apple"></i></h1>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont05/met03 인경우
http://localhost:8080/controller/cont05/met04 인경우
★Controller05 method05, method06
redirect 하는 경우
들어가기전
http 상태 코드 쪼오금
1xx(정보) : 요청을 받았으며 프로세스를 계속 진행합니다.
2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용하였습니다.
3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요합니다.
4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.
5xx(서버 오류) : 서버가 명백히 유효한 요청에 대한 충족을 실패했습니다.
200 OK
요청이 성공적으로 되었습니다. 정보는 요청에 따른 응답으로 반환됩니다.
302 Found
이 응답 코드는 요청한 리소스의 URI가 일시적으로 변경되었음을 의미합니다. 새롭게 변경된 URI는 나중에 만들어질 수 있습니다. 그러므로, 클라이언트는 향후의 요청도 반드시 동일한 URI로 해야합니다.
Controller05 method05
@RequestMapping("/met05")
public String method05() {
// servlet 사용시 /
// String location = request.getContextPath() + "/path";
// response.sendRedirect(location);
/* spring mvc 사용시 */
return "redirect:/cont05/met04"; // /WEB-INF/view/redirect:/cont05/met04
}
Controller05 method06
// 할일 : /cont05/met06 으로 요청 왔을 때 /cont05/met04 로 redirect 되는method06을 만들기
@RequestMapping("/met06")
public String method06() {
return "redirect:/cont05/met04";
}
○결과값
http://localhost:8080/controller/cont05/met05
met05 에서 code 302 이후 met04 code 200 나옴
http://localhost:8080/controller/cont05/met06
met06 에서 code 302 이후 met04 code 200 나옴
redirect 확인할때 f12 네트워크 창에서 확인
-----------미래의 내가 볼것--------
WARN : org.springframework.web.servlet.PageNotFound -
No mapping found for HTTP request with URI [/controller/resource/css/icon/css/all.css]
in DispatcherServlet with name 'appServlet'
모든요청은 디스패치서블릿이 받는다.
그림,css 는 서브릿을 통과 안해도되는 파일 들이 있다.
<resources mapping="/resources/**" location="/resources/" />
mapping으로 요청오면 location 에서 찾아봐라.
---------------------------
----------------------------------------------오후----------------------------------------
★Controller5 method07,method08 ,method09
package org.zerock.controller.p02controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import lombok.Setter;
@Controller
@RequestMapping("/cont05")
public class Controller5 {
// /cont05/met07
@RequestMapping("/met07")
public String method07 () {
return null; // view 이름과 요청 경로가 같은 경우 null 리턴 가능
}
// /cont05/met08
@RequestMapping("/met08")
public void method08() {
// view 이름과 요청 경로가 같은 경우 void return 타입으로 결정
}
// 할 일 : /cont05/met09 로 요청이 왔을 때 /WEB-INF/views/cont05/met09.jsp로 표워드 되도록 method09 메소드 작성
@RequestMapping("/met09")
public void method09 () {
}
}
met07.jsp는 안만들었고 오류 나오는것확인
met08.jsp met09 다 <h1> 으로 써잇음
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<h1>met09 포워드됨</h1>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
요청경로와 뷰의 이름이 같으면 null을 넣어도 가능
널을 리턴 안해도된다..?
http://localhost:8080/controller/cont05/met07
http://localhost:8080/controller/cont05/met08
http://localhost:8080/controller/cont05/met09
(method09 에 아무것도없는데.. 잘은 모르지만 forward하네요...ㅎㅎ;)
★ Controller06 의 전체 코드
122쪽 참고
Controller06
package org.zerock.controller.p03controller;
import javax.servlet.http.HttpServletRequest;
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.zerock.controller.p03controller.bean.Bean01;
import org.zerock.controller.p03controller.bean.Bean02;
@Controller
@RequestMapping("/cont06")
public class Controller06 {
@RequestMapping("/met01")
public void method01 (HttpServletRequest request) {
request.setAttribute("myatt12", "hello world");
}
@RequestMapping("/met02")
public void method02(Model model) {
// 4. setattribute
model.addAttribute("myattr1", "myvalue1");
// 5. forward/ redirect
}
// 할일 : 요청 경로 : /cont06/met03
// view name : /cont06/met03
// view에서 사용하느 attribute 명 : "myattr2"
// myattr2의 값 : "myvalue2"
// 가 되도록 method03 작성
// 또한 view도 작성해서 myattr2가 myvalue2를 출력하는 확인
@RequestMapping("/met03")
public void method03 (Model model) {
// 4.
model.addAttribute("myattr2", "myvalue2");
// 5.
}
@RequestMapping("/met04")
public void method04(Model model) {
// 3.
Bean01 bean = new Bean01();
bean.setAge(99);
bean.setName("trump");
// 4.
model.addAttribute("myBean", bean);
}
@RequestMapping("/met05")
public void method05(Model model) {
// 3.
Bean01 bean = new Bean01();
bean.setAge(88);
bean.setName("donald");
// 4.
// model.addAttribute("bean01", bean); // attribute의 이름이 클래스(type)의 이름(to lower camel case) 과 같은 경우 생략 가능
model.addAttribute(bean);
// 할일 : view (jsp) 를 만들어서 "bean01" attribute 있는지 확인
}
@RequestMapping("/met06")
public void method06(Model model) {
model.addAttribute("attr1", "val1");
model.addAttribute("attr2", "val2");
}
@RequestMapping("/met07")
public void method07(String name, String city, Model model) {
model.addAttribute("name", name);
model.addAttribute("city", city);
}
@RequestMapping("/met08")
public String method08(@ModelAttribute("name") String name,
@ModelAttribute("city") String city) {
return "/cont06/met07";
}
@RequestMapping("/met09")
public void method09(Bean01 bean, Model model) {
model.addAttribute("bean", bean);
}
@RequestMapping("/met10")
public String method10(@ModelAttribute("bean") Bean01 bean) {
return "/cont06/met09";
}
@RequestMapping("/met11")
public void method11(@ModelAttribute Bean01 bean) {
}
@RequestMapping("/met12")
public String method12( Bean01 bean) {
return "/cont06/met11";
}
// /cont06/met13?city=seoul&address=gangnam
@RequestMapping("/met13")
public void method13( Bean02 bean) {
// todo1 : Bean02 클래스완성
// todo2 : /cont06/met13.jsp를 작성해서 seoul,gangnam이 출력
}
}
★Controller06 method01, method02, method03
Model객체 에 어트리뷰트들을 넣으면 model이 request 통하여 전달해줌
모델이란걸 디스패쳐 메소드 한테 받아옴
Model 이란 객체에서 어트리뷰트를꺼내어서
Controller06 method01
(request에 setAttribute 하고 jsp에서 EL표현식(${} 객체 프로퍼티 값을 꺼낼때)으로 잘꺼내죠
@RequestMapping("/met01")
public void method01 (HttpServletRequest request) {
request.setAttribute("myatt12", "hello world");
}
met01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<h1>/cont06/met01.jsp forward</h1>
${myatt12 }
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont06/met01 인경우
Controller06 method02
모델이란 객체에 담아서 줌 ( 디스패쳐 메소드 한테 받아옴)
@RequestMapping("/met02")
public void method02(Model model) {
// 4. setattribute
model.addAttribute("myattr1", "myvalue1");
// 5. forward/ redirect
}
met02.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<h1>/cont06/met02.jsp 포워드 됨</h1>
<p>${myattr1 }</p>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont06/met02 인경우
Controller06 method03
(Model mode) 연습
// 할일 : 요청 경로 : /cont06/met03
// view name : /cont06/met03
// view에서 사용하느 attribute 명 : "myattr2"
// myattr2의 값 : "myvalue2"
// 가 되도록 method03 작성
// 또한 view도 작성해서 myattr2가 myvalue2를 출력하는 확인
@RequestMapping("/met03")
public void method03 (Model model) {
// 4.
model.addAttribute("myattr2", "myvalue2");
// 5.
}
met03.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<h1> /cont06/met03.jsp 포워드됨</h1>
<p>\${myattr2} : ${myattr2 }</p>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont06/met03 인경우
★Controller06의 method04, method05 , method06 , Bean01
클래스 이름으로 하는 경우가 많다.
@RequestMapping("/met05")
// attribute의 이름이 클래스(type)의 이름과 같은 경우 생략 가능
Bean01
package org.zerock.controller.p03controller.bean;
import lombok.Data;
@Data
public class Bean01 {
private String name;
private int age;
}
Controller06 method04
@RequestMapping("/met04")
public void method04(Model model) {
// 3.
Bean01 bean = new Bean01();
bean.setAge(99);
bean.setName("trump");
// 4.
model.addAttribute("myBean", bean);
}
met04.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<p>${myBean.age }</p>
<p>${myBean.name }</p>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont06/met04 인경우
(예전 JDBCServlet 에서 하는 방식으로)
Controller06 method05
model.addAttribute("bean01", bean);
// attribute의 이름이 클래스(type)의 이름(to lower camel case) 과 같은 경우 생략 가능
// 할일 : view (jsp) 를 만들어서 "bean01" attribute 있는지 확인
@RequestMapping("/met05")
public void method05(Model model) {
// 3.
Bean01 bean = new Bean01();
bean.setAge(88);
bean.setName("donald");
// 4.
// model.addAttribute("bean01", bean); // attribute의 이름이 클래스(type)의 이름(to lower camel case) 과 같은 경우 생략 가능
model.addAttribute(bean);
// 할일 : view (jsp) 를 만들어서 "bean01" attribute 있는지 확인
}
met05.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<h3>\${Bean01.age} : ${bean01.age}</h3>
<h3>\${Bean01.name} : ${bean01.name }</h3>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont06/met05 인경우
attribute의 이름이 bean01(앞문자 소문자로했을시 ) 같은경우 생략 가능
Controller06 method06
@RequestMapping("/met06")
public void method06(Model model) {
model.addAttribute("attr1", "val1");
model.addAttribute("attr2", "val2");
}
met06.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<p>\${attr1} : ${attr1 }</p>
<p>\${attr2} : ${attr2 }</p>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont06/met06 인경우
★Controller06 method07, method08 met07.jsp
모델까지 들어가게 하고싶다.
(@ModelAttribute("name") String name, @ModelAttribute("city") String city)
7,8번 같은걸 다르게
method07의
model.addAttribute("name", name);
model.addAttribute("city", city);
를
(@ModelAttribute("name") String name, @ModelAttribute("city") String city)
로 나타낼 수 있다
Controller06 의 method07
@RequestMapping("/met07")
public void method07(String name, String city, Model model) {
model.addAttribute("name", name);
model.addAttribute("city", city);
}
met07.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<p>${name }</p>
<p>${city }</p>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont06/met07?name=captain&city=ny 인경우
Controller06의 method08 (met07.jsp 활용)
@RequestMapping("/met08")
public String method08(@ModelAttribute("name") String name,
@ModelAttribute("city") String city) {
return "/cont06/met07";
}
○결과값
http://localhost:8080/controller/cont06/met08?name=hesitater&city=seoul인경우
★Controller06 method09, method10
9,10 같은걸 다르게
Model 쓰거나 @ModelAttribute 쓰거나
여러개 받아서 빈에 넣을수 있엇죠?
Bean01 bean 을 Model model 에 넣는..?!
@RequestMapping("/met09")
http://localhost:8080/controller/cont06/met09
http://localhost:8080/controller/cont06/met09?name=ironman&age=77
Controller06 의 method09
@RequestMapping("/met09")
public void method09(Bean01 bean, Model model) {
model.addAttribute("bean", bean);
}
met09.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<p>\${bean.name } : ${bean.name }</p>
<p>\${bean.age } : ${bean.age }</p>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont06/met09 인경우
(값이 안들어가서 name은 안나오고 int는 기본값인 0 이나옴
http://localhost:8080/controller/cont06/met09?name=ironman&age=77 인경우
Controller06 의 method10
@RequestMapping("/met10")
public String method10(@ModelAttribute("bean") Bean01 bean) {
return "/cont06/met09";
}
met09.jsp 재사용
○결과값
http://localhost:8080/controller/cont06/met10?name=ironman10&age=66
★Controller06 method11,method12
@RequestParam , @ModelAttribute
any other argument는 @ModelAttribute로 간주되니깐 생략...가능..?
Controller06의 method11
@RequestMapping("/met11")
public void method11(@ModelAttribute Bean01 bean) {
}
Controller06 의 method12
@RequestMapping("/met12")
public String method12( Bean01 bean) {
return "/cont06/met11";
}
met11.jsp(method11,12사용)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<p>\${bean01.name } :${bean01.name }</p>
<p>\${bean01.age } : ${bean01.age }</p>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
Any other argument는 @RequestParam , @ModelAttribute 인데 Bean 은 스트링이나 기본타입이 아니라서 @ModelAttribute 라서 Bean01 의 로우카멜케이스로 ..?
리턴만 있는데 포워드한거고 리케스트 파라미터 가공해서 넣는코드 생략, 리퀘스트어트리뷰트 넣는 코드도 생략
리턴으로 뷰도 결정되니깐 포워드하는 코드도 생략되있다 (-_-.....)
○결과값
http://localhost:8080/controller/cont06/met11?name=hesiater&age=99 인경우
http://localhost:8080/controller/cont06/met12?name=hesiaters&age=88 인경우
★Controller06 method13, Bean02
// /cont06/met13?city=seoul&address=gangnam
// todo1 : Bean02 클래스완성
// todo2 : /cont06/met13.jsp를 작성해서 seoul,gangnam이 출력
Bean02 만들고 그안에 city,address 만들고 @Data 로 get,set 등등 만들고
jsp에서는 Bean02가 어트리뷰트로 들어가는데 이름이 생략되어 있으니깐 Bean02 로어카밀로 들어가게되는?
그래서 met13.jsp 에서 bean02이라는 어트리뷰트가 있다는게 증명되었다 그래서 사용할 수있다?
Controller06의 method13
// /cont06/met13?city=seoul&address=gangnam
@RequestMapping("/met13")
public void method13( Bean02 bean) {
// todo1 : Bean02 클래스완성
// todo2 : /cont06/met13.jsp를 작성해서 seoul,gangnam이 출력
}
Bean02
package org.zerock.controller.p03controller.bean;
import lombok.Data;
@Data
public class Bean02 {
private String city;
private String address;
}
met13.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<%= request.getContextPath() %>/resource/css/icon/css/all.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
<title>Insert title here</title>
</head>
<body>
<p>\${bean01.name } :${bean01.name }</p>
<p>\${bean01.age } : ${bean01.age }</p>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
</body>
</html>
○결과값
http://localhost:8080/controller/cont06/met13?city=seoul&address=gangnam 인경우
requestparameter를 분석, 가공해서 넣는것 , requestattribute 에 넣는것 jsp로 포워드 하는것에 대한
메소드 몸통이 하나도 없지만 그런일이 일어난다고한다.
'Spring(baek)' 카테고리의 다른 글
2021-12-09 Controller12 method01~method10 (0) | 2021.12.08 |
---|---|
2021-12-08 Controller09 method09~Controler11 method05 (0) | 2021.12.08 |
2021-12-07 Controller07~Controller09 (0) | 2021.12.07 |
mybatis 스프링 연동 (0) | 2021.12.07 |
pom.xml (0) | 2021.12.02 |