728x90

유효성 검사 후 에러메세지 출력

index.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'>test1</a>
</body>
</html>

controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1() {
       return "test1";
    }

    //폼에 작성을 한 후 경로 매핑
    @PostMapping("/test1_proc")
    public String test1_proc(@Valid Data data1, BindingResult result) {
    						//@Valid (@ModelAttribute) Data data1...<< 생략되어있음!!
       //@Valid : 메소드에 주입받는 빈에 유혀성 검사를 실시하겠다라는 선언!!
       //BindingResult : 유효성 검사를 실행한 결과정보가가 저장되어 있음 -> jsp 파일
       
       System.out.println(data1.getNum1());
       System.out.println(data1.getNum2());
       System.out.println(result);

       return "test1";
    }
}

 

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--적은 값이 Data클래스의 어노테이션 조건에 맞아야함 @size, @max--%>
<form action="test1_proc" method="post">
    num1 : <input type="text" name="num1"><br>

    num2 : <input type="text" name="num2"><br>
    <button type="submit">확인</button>

</form>
</body>
</html>

index

<%@ 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'>test1</a>
</body>
</html>

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--적은 값이 Data클래스의 어노테이션 조건에 맞아야함 @size, @max--%>
<form action="test1_proc" method="post">
    num1 : <input type="text" name="num1"><br>

    num2 : <input type="text" name="num2"><br>
    <button type="submit">확인</button>

</form>
</body>
</html>

controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1() {
       return "test1";
    }

    //폼에 작성을 한 후 경로 매핑
    @PostMapping("/test1_proc")
    public String test1_proc(@Valid Data data1, BindingResult result) {
       //@Valid : 메소드에 주입받는 빈에 유혀성 검사를 실시하겠다라는 선언!!
       //BindingResult : 유효성 검사를 실행한 결과정보가가 저장되어 있음 -> jsp 파일
       System.out.println(data1.getNum1());
       System.out.println(data1.getNum2());
       System.out.println(result);

       if(result.hasErrors()) {
          for(ObjectError obj : result.getAllErrors()){
             System.out.println("코드: " + obj.getCode()); // 에러코드 확인
             System.out.println("이름 :" + obj.getObjectName());
             System.out.println("메세지 :" + obj.getDefaultMessage());

             String [] str = obj.getCodes();
             for(String s:str) {
                System.out.println(s);
             }
             if(str[0].equals("Size.data.num2")){
                System.out.println("num2 글자수 잘못되었음! 재작성 하세요!");
             }
             else if(str[0].equals("Max.data.num1")){
                System.out.println("num1값 최대100이야~ 다시쓰렴~");
             }
          }
          return "test1"; //유효성 검사에 위배되면 다시 form 형태로 감
       }

       return "test2"; // 유효성 검사에 맞으면 test2.jsp로 가서 입력한 값을 띄움
    }
}

test2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${data.num1}
${requestScope.data.num2}
</body>
</html>

 

 

만약 잘못된 타입을 입력하거나, 입력값이 지정된 범위의 값이 아니면 에러문이 출력됨

입력값 타입이 안맞는 경우
해당 조건에 부합하지 않은경우


 

 

Error 메세지 웹으로 출력

index

<%@ 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'>test1</a>
</body>
</html>

controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1() {
       return "test1";
    }

    //폼에 작성을 한 후 경로 매핑
    @PostMapping("/test1_proc")
    public String test1_proc(@Valid Data data1, BindingResult result) {
       //@Valid : 메소드에 주입받는 빈에 유효성 검사를 실시하겠다라는 선언!!
       //BindingResult : 유효성 검사를 실행한 결과정보가가 저장되어 있음 -> jsp 파일
       System.out.println(data1.getNum1());
       System.out.println(data1.getNum2());
       System.out.println(result);

       if(result.hasErrors()) {
          for(ObjectError obj : result.getAllErrors()){
             System.out.println("코드: " + obj.getCode()); // 에러코드 확인
             System.out.println("이름 :" + obj.getObjectName());
             System.out.println("메세지 :" + obj.getDefaultMessage());

             String [] str = obj.getCodes();
             for(String s:str) {
                System.out.println(s);
             }
             if(str[0].equals("Size.data.num2")){
                System.out.println("num2 글자수 잘못되었음! 재작성 하세요!");
             }
             else if(str[0].equals("Max.data.num1")){
                System.out.println("num1값 최대100이야~ 다시쓰렴~");
             }
          }
          return "test1"; //유효성 검사에 위배되면 다시 form 형태로 감
       }

       return "test2"; // 유효성 검사에 맞으면 test2.jsp로 가서 입력한 값을 띄움
    }
}

 


Error 메세지 Properties로 지정하여 출력

유효성 검사 실패한 경우

index

<%@ 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'>test1</a>
</body>
</html>

controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;

@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1(Data data) {
       return "test1";
    }

    @PostMapping("/test1_proc")
    public String test1_proc(@Valid Data data, BindingResult result) {
       if(result.hasErrors()) {
          return "test1"; //error 메세지 출력 -> 유효성검사에 위배되었으므로
       }
       return "test2"; // 입력한 값 띄움 -> 유효성검사 통과
    }

}

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form action="test1_proc" modelAttribute="data" method="post">
    num1: <form:input path="num1" type="text"/><br>
        <form:errors path="num1"/><br>

    num2: <form:input path="num2" type="text"/><br>
        <form:errors path="num2"/><br>

    <button type="submit">확인</button>
</form:form>
</body>
</html>

ServeletAppContext

package kr.bit.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
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")
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/");
    }

    @Bean(name = "messageSource")
    public ReloadableResourceBundleMessageSource messageSource() {
       ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
       res.setBasename("/WEB-INF/properties/error");
       return res;
    }

}

 

properties

Max.data.num1= Value of num1 have not to over 100
Size.data.num2= Value of num2 have to between 4 and 10
# 에러종류, 빈이름, 프로퍼티명
# 어노테이션명.클래스명(맨앞 소문자).필드명

 

 


유효성검사 성공한 경우

test2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${data.num1}
${requestScope.data.num2}
</body>
</html>

 

728x90
728x90

Spring에서 properties는 애플리케이션의 다양한 구성 세부 정보를 저장하고 관리하는 데 사용된다.

이를 통해 코드 변경 없이 애플리케이션의 동작을 쉽게 변경할 수 있다.

  1. 외부 구성: properties 파일(application.properties 등)을 사용하여 애플리케이션 설정을 외부에서 관리할 수 있다
  2. 계층적 구조: properties는 계층적 구조로 되어 있어 키-값 쌍으로 구성된다. cf) app.name=MyApp
  3. 다양한 형식 지원: properties는 일반 .properties 파일뿐만 아니라 YAML, JSON, XML 등의 다양한 형식을 지원한다
  4. 프로파일: 특정 환경(개발, 테스트, 프로덕션 등)에 맞는 properties를 정의할 수 있다
  5. 우선순위: 여러 sources에서 properties를 정의할 경우, 명확한 우선순위에 따라 값이 설정된다
  6. 타입 안전 액세스: @Value 어노테이션을 사용하거나 Environment를 통해 타입 안전하게 properties에 접근할 수 있다
  7. 암호화 지원: Spring Cloud를 사용하면 민감한 정보를 properties에 안전하게 저장하고 암호화할 수 있다.

 

index

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<body>

<a href="t1">test1</a><br>


</body>
</html>

controller

package kr.bit.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
@PropertySources({  //properties파일 불러옴(import)
	@PropertySource("/WEB-INF/properties/data1.properties"),
	@PropertySource("/WEB-INF/properties/data2.properties")
})
//properties => 실행 중 절대 변하지 않는 값들을 properties파일안에 넣어줘야함
//ex)DB정보, 유효성검사 
public class SpringController {

	@Value("${aaa.a1}")  //properties파일에 작성한 값을 주입받는다
	private int a1;
	
	@Value("${aaa.a2}")
	private String a2;
	
	@Value("${bbb.b1}")
	private int b1;
	
	@Value("${bbb.b2}")
	private String b2;
	
	@Value("${ccc.c1}")
	private int c1;
	
	@Value("${ccc.c2}")
	private String c2;
	
	@Value("${ddd.d1}")
	private int d1;
	
	@Value("${ddd.d2}")
	private String d2;
	
	@GetMapping("/t1")
	public String t1() {
		System.out.println(a1);
		System.out.println(a2);
		System.out.println(b1);
		System.out.println(b2);
		System.out.println(c1);
		System.out.println(c2);
		System.out.println(d1);
		System.out.println(d2);
		
		return "test1";
	}
	
}

test1.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>
test1
</body>
</html>

data1.properties

aaa.a1=10
aaa.a2=문자열1

bbb.b1=20
bbb.b2=문자열2

data2.properties

ccc.c1=30
ccc.c2=문자열3

ddd.d1=40
ddd.d2=문자열4

index

<%@ 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'>test1</a>
</body>
</html>

controller

package kr.bit.controller;

import java.util.Locale;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
@PropertySources({  //properties파일 불러옴(import)
    @PropertySource("/WEB-INF/properties/data1.properties"),
    @PropertySource("/WEB-INF/properties/data2.properties")
})
//properties => 실행 중 절대 변하지 않는 값들을 properties파일안에 넣어줘야함
//ex)DB정보, 유효성검사 
public class SpringController {

    @Autowired
    ReloadableResourceBundleMessageSource res;
    
    @GetMapping("/t1")
    public String test1(Model model, Locale locale) {
       
       
       String a1 = res.getMessage("aaa.a1", null, null);
       String b1 = res.getMessage("bbb.b1", null, null);
       
       Object [] args = {30, "seoul"};
       String a2 = res.getMessage("aaa.a2", args, locale);
       
       
       System.out.println(a1);
       System.out.println(b1);
       System.out.println(a2);
       
       
       model.addAttribute("args", args);
       
       return "test1";
    }

}

test1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>test1</h1>
    <h3>aaa.a1 : <spring:message code='aaa.a1'/></h3>
    <h3>bbb.b1 : <spring:message code='bbb.b1'/></h3>
    <h3>aaa.a2 : <spring:message code='aaa.a2' arguments="${args }"/></h3>
</body>
</html>

data1.properties

aaa.a1 = 문자열1
aaa.a2 = 알파맨은 {0}이고 사는 곳은{1}입니다

data2.properties

bbb.b1 = 문자열2
728x90
728x90

SessionScope

  • 브라우저가 최초의 요청을 발생시키고 브라우저를 닫을 때 까지
  • SessionScope에서는 session영역에 저장되어 있는 데이터나 객체를 자유롭게 사용 가능

 

index

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<body>
<!--session : 브라우저당 서버에 요청을 하게 되면 브라우저당 하나씩 메모리 공간을 서버에서 할당해줌
              요청이 새롭게 발생해도 같은 메모리 공간을 사용하게 됌 -->
<!-- @SessionScope : 최초의 요청 ~ 브라우저 닫을 때 까지 -->

<a href="t1">test1</a><br>
<a href="s1">spring1</a><br>


</body>
</html>

Data1

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;
    }
}

Data2

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;
    }
}

Data3

package kr.bit.beans;

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;

@Component
@SessionScope
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;
    }
}

Controller

package kr.bit.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import kr.bit.beans.Data;
import kr.bit.beans.Data2;
import kr.bit.beans.Data3;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;


@Controller
public class SpringController {

    @Autowired
    Data data1; // RootAppContext에 빈으로 등록한 Data주소값을 자동주입받고있음

    @Resource(name="session2")
    Data2 data2;

    @Autowired
    Data3 data3;

    @GetMapping("/t1")
    public String t1() {
        data1.setStr1("아무거나");
        data1.setStr2("넣으시면");

        data2.setStr3("구분이");
        data2.setStr4("잘안가요");

        data3.setStr5("제가한번");
        data3.setStr6("바꾸겠습니다"); // 값 주입한 객체들이 SesseionScope임 =>t1 경로 매핑될 때 Bean 객체 주입됨

        return "test1";
    }
    @GetMapping("/s1")
    public String s1(Model model){ // 세션 객체들 data1,2,3을 모델객체에 담는다
        model.addAttribute("data1", data1);
        model.addAttribute("data2", data2);
        model.addAttribute("data3", data3);

        return "spring1";
    }

}

test.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

</body>
</html>

spring1.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${requestScope.data1.str1}
${requestScope.data1.str2}

${requestScope.data2.str3}
${requestScope.data2.str4}

${requestScope.data3.str5}
${requestScope.data3.str6}
</body>
</html>
728x90
728x90

Session

  • 스프링 프레임워크에서 제공하는 모듈 중 하나로 기존의 HttpSession 을 대체
  • 분산된 스케일링 가능한 환경에서 세션 데이터를 관리
  • 외부 저장소를 사용하게끔 하여 서블릿 컨테이너에서 세션 데이터를 분리할 수 있도록 도와준다
    • Redis, JDBC, Hazelcast
  • 애플리케이션 퍼포먼스 향상과 분산 환경에서 세션 관리가 쉬워진다는 장점이 생긴다

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<body>
<!--session : 브라우저당 서버에 요청을 하게 되면 브라우저당 하나씩 메모리 공간을 서버에서 할당해줌
              요청이 새롭게 발생해도 같은 메모리 공간을 사용하게 됌 -->
<!-- @SessionScope : 최초의 요청 ~ 브라우저 닫을 때 까지 -->

<a href="t1">test1</a><br>
<a href="t2">test2</a><br>
<a href="t3">test3</a><br>

<a href="s1">spring1</a><br>

<a href="t4">test4</a><br>
<a href="s4">spring4</a><br>


<a href="t5">test5</a><br>
<a href="s5">spring5</a><br>


</body>
</html>

 

SpringController

package kr.bit.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;


import kr.bit.beans.Data;
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.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;


@Controller
@SessionAttributes({"sbean","sbean2"}) // ModelAttribute로 주입시, Session으로 영역을 지정하면 Session으로 마뀜
public class SpringController {

    //주의할점 ! -> @ModelAttribute를 활용해서 객체를 ㅐㅇ성해 반환하는 메소드를 작성해줘야 Session 영역으로 바뀜
    @ModelAttribute("sbean")
public Data dbean() {
        return new Data(); // 세션영역으로 주입받을 수 있다.
    }

    @ModelAttribute("sbean2")
    public Data dbean2() {
        return new Data(); // 세션영역으로 주입받을 수 있다.
    }

    @GetMapping("/t5") //request영역에 저장됨
    public String t5(@ModelAttribute("sbean") Data dbean,
                     @ModelAttribute("sbean2") Data dbean2) {

        dbean.setStr1("aa");
        dbean.setStr2("bb");

        dbean2.setStr1("cc");
        dbean2.setStr2("dd");

        return "test5";

    }

    @GetMapping("/s5")
    public String s5(@ModelAttribute("sbean") Data dbean,
                    @ModelAttribute("sbean2") Data dbean2) {

        return "spring5";
    }
//////////////////////////////////////////////////////////////////////////////

    @GetMapping("/t1")
    public String t1(HttpSession session) {

        session.setAttribute("data1", "spring1");

        return "test1";
    }
///////////////////////////////////////////////////////////////////////
    @GetMapping("/t2")
    public String t2(HttpSession session) {
        session.setAttribute("data1", "spring2");
        return "redirect:/s1";
    }

    @GetMapping("/s1")
    public String s1(HttpSession session) {
        String str=(String)session.getAttribute("data1");
        System.out.println(str);
        return "spring1";
    }
    @GetMapping("/t3")
    public String t3(HttpSession session) {
        session.setAttribute("data1", "spring3");
        return "forward:/s1";
    }

    @GetMapping("/t4")
    public String t4(HttpSession session) {
      Data d = new Data();

      d.setStr1("spring4");
      d.setStr2("spring5"); // 객체에 값 저장 후

      session.setAttribute("bean", d); // 세션영역에 저장

      return "test4"; // test4.jsp로 페이지 이동
    }

    @GetMapping("/s4") //session에 저장되어 있는 객체를 사용하고자 할 때
    public String s4(@SessionAttribute("bean") Data d){
        return "spring4";
    }



}

 

 


index

<a href="t1">test1</a><br>

controller

@GetMapping("/t1")
public String t1(HttpSession session) {

    session.setAttribute("data1", "spring1");

    return "test1";
}

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>test1</h1>
</body>
</html>

index

<a href="t2">test2</a><br>

controller

@GetMapping("/t2")
public String t2(HttpSession session) {
    session.setAttribute("data1", "spring2");
    return "redirect:/s1";
}

   @GetMapping("/s1")
    public String s1(HttpSession session) {
        String str=(String)session.getAttribute("data1");
        System.out.println(str);
        return "spring1";
    }

spring1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${sessionScope.data1}
</body>
</html>

index

<a href="t3">test3</a><br>

controller

@GetMapping("/t3")
public String t3(HttpSession session) {
    session.setAttribute("data1", "spring3");
    return "forward:/s1";
}

>>>>>>> s1으로 보냄


   @GetMapping("/s1")
    public String s1(HttpSession session) {
        String str=(String)session.getAttribute("data1");
        System.out.println(str);
        return "spring1";
    }

spring1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${sessionScope.data1}
</body>
</html>

 


index

<a href="s1">spring1</a><br>

controller

@GetMapping("/s1")
public String s1(HttpSession session) {
    String str=(String)session.getAttribute("data1");
    System.out.println(str);
    return "spring1";
}
    @GetMapping("/t3")
    public String t3(HttpSession session) {
        session.setAttribute("data1", "spring3");
        return "forward:/s1";
    }

spring1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${sessionScope.data1}
</body>
</html>

index

<a href="t4">test4</a><br>

controller

@GetMapping("/t4")
public String t4(HttpSession session) {
  Data d = new Data();

  d.setStr1("spring4");
  d.setStr2("spring5"); // 객체에 값 저장 후

  session.setAttribute("bean", d); // 세션영역에 저장

  return "test4"; // test4.jsp로 페이지 이동
}

test4.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>test4</h1>
</body>
</html>

@SessionAttributes

  • Model정보를 HTTP Session에 저장해주는 애노테이션
  • @SessionAttributes
    • HttpSession을 직접 사용할수도 있지만 애노테이션에 설정한 name, type 에 해당하는 모델정보를 자동으로 sessions에 넣어준다.
    • @ModelAttribute는 Session에 존재하는 데이터도 바인딩한다.
    • 여러화면 (요청)에서 사용해야하는 객체를 공유할때 사용한다.
    • Class Level에 선언해야한다.

 

tes4를 먼저 누르고 spring4를 눌러야 값이 받아짐!!

 

 

index

<a href="s4">spring4</a><br>

controller

    @GetMapping("/s4") //session에 저장되어 있는 객체를 사용하고자 할 때
    public String s4(@SessionAttribute("bean") Data d){
        return "spring4";
    }

spring4.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${sessionScope.bean.str1}<br>
${sessionScope.bean.str2}
</body>
</html>

 

 


test5 는 왜 안열릴까..?

<a href="t5">test5</a><br>

index

<a href="s5">spring5</a><br>

controller

@Controller
@SessionAttributes({"sbean", "sbean2"}) // ModelAttribute로 주입시, Session으로 영역을 지정하면 Session으로 마뀜
public class SpringController {

    //주의할점 ! -> @ModelAttribute를 활용해서 객체를 ㅐㅇ성해 반환하는 메소드를 작성해줘야 Session 영역으로 바뀜
    @ModelAttribute("sbean")
    public Data dbean() {
        return new Data(); // 세션영역으로 주입받을 수 있다.
    }

    @ModelAttribute("sbean2")
    public Data dbean2() {
        return new Data(); // 세션영역으로 주입받을 수 있다.
    }

    @GetMapping("/t5") //request영역에 저장됨
    public String t5(@ModelAttribute("sbean") Data dbean,
                     @ModelAttribute("sbean2") Data dbean2) {

        dbean.setStr1("aa");
        dbean.setStr2("bb");

        dbean2.setStr1("cc");
        dbean2.setStr2("dd");

        return "test5";

    }

    @GetMapping("/s5")
    public String s5(@ModelAttribute("sbean") Data dbean,
                     @ModelAttribute("sbean2") Data dbean2) {

        return "spring5";
    }

spring5.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${requestScope.sbean.str1}
${requestScope.sbean.str2}

${sessionScope.sbean2.str1}
${sessionScope.sbean2.str2}
</body>
</html>
728x90
728x90

Form요소

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<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>

</body>
</html>

 

 

package kr.bit.controller;

import javax.servlet.http.HttpServletRequest;

import kr.bit.beans.Data;
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.PostMapping;


@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";
    }

}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</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>

    <button type="submit">체크</button>
</form>
</body>
</html>

 

 

@GetMapping("/t2")
public String t2(Data bean) {  // 경로매핑 후에 필드에 값을 세팅
    bean.setName("예준");
    bean.setId("Junni");
    bean.setPw("2345");
    bean.setAdr1("gyeongnam");
    bean.setAdr2("Milyang");

    return "test2";
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<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>

 

@GetMapping("/t3")
public String t3(@ModelAttribute("modelBean") Data bean) {
    bean.setName("호준");
    bean.setId("hojun");
    bean.setPw("3456");
    bean.setAdr1("incheon");
    bean.setAdr2("인천");
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
    <title>Title</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>

 

    @GetMapping("/t4")
    public String t4(Model model) {
        Data bean=new Data();
        bean.setName("성민");
        bean.setId("seongmin");
        bean.setPw("4567");
        bean.setAdr1("Seoul");
        bean.setAdr2("hongdae");

        model.addAttribute("modelBean",bean);

        return "test4";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<html>
<head>
    <title>Title</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>

form 태그

 

 

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

<a href="t1">test1</a><br>

</body>
</html>

package kr.bit.controller;

import javax.servlet.http.HttpServletRequest;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1(Data data) {
        data.setStr1("str1");
        data.setStr2("str2");
        data.setStr3("str3");
        data.setStr4("str4");

        return "test1";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<html>
<body>
<form:form modelAttribute="data">
    <form:hidden path="str1"/>
    <form:input path="str2"/><br>
    <form:password path="str3" showPassword="true"/><br>
    <form:textarea path="str4"/><br>
    <form:button disabled="true">체크</form:button>
</form:form>
</body>
</html>

 


redirect/forward

 

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

<a href="t1">Redirect</a><br>
<a href="t2">Forword</a><br>

</body>
</html>

 

 

package kr.bit.controller;

import javax.servlet.http.HttpServletRequest;


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


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1() {
        return "redirect:/main1";
    }

    @GetMapping("/main1")
    public String main1() {
        return "main1";
    }


}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<html>
<body>
<h1>Main1_redirect</h1>
</body>
</html>

 

 

    @GetMapping("/t2")
    public String t2() {
        return "forward:/main2";
    }

    @GetMapping("/main2")
    public String main2() {
        return "main2";
    }


}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>Main2_forward</h1>

</body>
</html>

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

<a href="t1">test1</a><br>


</body>
</html>

 

package kr.bit.config;

import kr.bit.beans.Data;
import kr.bit.beans.Data2;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.annotation.RequestScope;

@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.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;


import kr.bit.beans.Data;
import kr.bit.beans.Data2;
import kr.bit.beans.Data3;
import kr.bit.beans.Data4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;


@Controller
public class SpringController {

    @Autowired
    Data data1; //IoC컨테이너에 빈으로 등록(@bean)한한 Data 객체의 주소값이 data1 필드에 자동 주입됨

    @Resource(name = "request2")
    Data2 data2; // IoC컨테이너에 빈으로 등록(@bean)한 -이름을 지정(request2)- Data2객체의 주소값이 dat2 필드에 자동 주입됨

    @Autowired
    Data3 data3;

    @Resource(name = "request4")
    Data4 data4;

    @GetMapping("/t1")
    public String t1() {
        data1.setStr1("스프링1");
        data1.setStr2("스프링1");

        data2.setStr3("스프링3");
        data2.setStr4("스프링4");

        data3.setStr5("스프링5");
        data3.setStr6("스프링6");

        data4.setStr7("스프링7");
        data4.setStr8("스프링8");

        return "forward:/final1";
    }
    @GetMapping("/final1")
    public String final1(Model model) {

        // model객체에 data
        model.addAttribute("data1", data1);
        model.addAttribute("data2", data2);
        model.addAttribute("data3", data3);
        model.addAttribute("data4", data4);

        return "final";
    }
}
<%--
  Created by IntelliJ IDEA.
  User: Kang
  Date: 2024-05-08
  Time: 오후 4:46
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<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>

 

Model 일 땐, forward나 redirect나 상관이 없다

 


RequestScope 빈 주입

RequestScope은 유지가 안되므로 redirect인 경우에는 불가 / forward 가능함!

 

Redirect 일 때

package kr.bit.config;

import kr.bit.beans.Data;
import kr.bit.beans.Data2;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.annotation.RequestScope;

@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.context.annotation.ComponentScan;
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;
    }
}
package kr.bit.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;


import kr.bit.beans.Data;
import kr.bit.beans.Data2;
import kr.bit.beans.Data3;
import kr.bit.beans.Data4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;


@Controller
public class SpringController {

    @Autowired
    Data data1; //IoC컨테이너에 빈으로 등록(@bean)한한 Data 객체의 주소값이 data1 필드에 자동 주입됨

    @Resource(name = "request2")
    Data2 data2; // IoC컨테이너에 빈으로 등록(@bean)한 -이름을 지정(request2)- Data2객체의 주소값이 dat2 필드에 자동 주입됨

    @Autowired
    Data3 data3;

    @Resource(name = "request4")
    Data4 data4;

    @GetMapping("/t1")
    public String t1() {
        data1.setStr1("스프링1");
        data1.setStr2("스프링1");

        data2.setStr3("스프링3");
        data2.setStr4("스프링4");

        data3.setStr5("스프링5");
        data3.setStr6("스프링6");

        data4.setStr7("스프링7");
        data4.setStr8("스프링8");

        return "redirect:/final1";
    }
    @GetMapping("/final1")
    public String final1(Model model) {

        // model객체에 data
        model.addAttribute("data1", data1);
        model.addAttribute("data2", data2);
        model.addAttribute("data3", data3);
        model.addAttribute("data4", data4);

        return "final";
    }
}

 

Forward 일때

package kr.bit.controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;


import kr.bit.beans.Data;
import kr.bit.beans.Data2;
import kr.bit.beans.Data3;
import kr.bit.beans.Data4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;


@Controller
public class SpringController {

    @Autowired
    Data data1; //IoC컨테이너에 빈으로 등록(@bean)한한 Data 객체의 주소값이 data1 필드에 자동 주입됨

    @Resource(name = "request2")
    Data2 data2; // IoC컨테이너에 빈으로 등록(@bean)한 -이름을 지정(request2)- Data2객체의 주소값이 dat2 필드에 자동 주입됨

    @Autowired
    Data3 data3;

    @Resource(name = "request4")
    Data4 data4;

    @GetMapping("/t1")
    public String t1() {
        data1.setStr1("스프링1");
        data1.setStr2("스프링1");

        data2.setStr3("스프링3");
        data2.setStr4("스프링4");

        data3.setStr5("스프링5");
        data3.setStr6("스프링6");

        data4.setStr7("스프링7");
        data4.setStr8("스프링8");

        return "forward:/final1";
    }
    @GetMapping("/final1")
    public String final1(Model model) {

        // model객체에 data
        model.addAttribute("data1", data1);
        model.addAttribute("data2", data2);
        model.addAttribute("data3", data3);
        model.addAttribute("data4", data4);

        return "final";
    }
}
728x90
728x90

1.Mapping (파라미터로 값 추출하기)

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<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
    d3:<input type="checkbox" name="d3" value="20">data3 20<br>
    <button type="submit">test2</button>
</form>

<br><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">test4</a><br>
</body>
</html>

1-1) HttpServletRequest사용

package kr.bit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.context.request.WebRequest;

import javax.servlet.http.HttpServletRequest;

@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("dataa3");

        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("data1"); // 10
            String d2=request.getParameter("data2"); // 20
            String d3[] = request.getParameterValues("dataa3");

            System.out.println(d1);
            System.out.println(d2);
            for(String str:d3){
                System.out.println(str);
            }
            return "final";
    }
}

1-2)  WebRequest사용

@GetMapping("/t3")
public String t3(WebRequest request) {
        String d1=request.getParameter("data1"); // 10
        String d2=request.getParameter("data2"); // 20
        String d3[] = request.getParameterValues("dataa3");

        System.out.println(d1);
        System.out.println(d2);
        for(String str:d3){
            System.out.println(str);
        }
        return "final";
    }

 

1-3) 경로로 주입받기(@PathVariable) 주소/값1/값2...

 @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";
    }

}

 

 

1-4) ** @RequestParam **

  • 값을 직접 주입받을 수 있다.
    (이름이 같아야함 / 변수이름 = 파라미터 이름)

@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";
}

 

 

 1-5) @RequestParam(required = false)

null

 @GetMapping("/t7")                      //required = 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";
    }
}

 

 

 

 

 


index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<body>
<a href="t1?data1=10&data2=20&data3=30&data3=40">test1</a><br>
<a href="t2?data1=10&data2=20&data3=30&data3=40">test2</a><br>
</body>
</html>
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;
    }
}

 

 

 

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.RequestParam;

import java.util.List;
import java.util.Map;

@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1(@RequestParam Map<String,String> map, @RequestParam List<String> data3) {

        String data1=map.get("data1");
        String data2=map.get("data2");


        System.out.println(data1);
        System.out.println(data2);


        for(String str:data3) {
            System.out.println(str);
        }
        return "final";

    }

}

 

 

1-6) @ModelAttribute  (객체로 파라미터 주입받기)

파일new

파라미터를 객체로 주입받을 수 있다.

컨트롤러에서 메서드의 파라미터는 기본자료형을 제외한 객체형 타입은 다시 화면으로 전달
@ModelAttribute는 명시적으로 화면에 전달되도록 지정
 @GetMapping("/t2") //index.jsp에서 값을 넘길때 (/t2) -> Data 객체 필드에 주입됨 (넘긴값)
       public String t2(Data bean1, @ModelAttribute 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";
    }

}

 


 

2. viewResolver (값을 Model에 담아 브라우저에 값 출력하기)

파일new

값을 주입받아 값을 브라우저에 출력

값을 담는 setAttribute사용해서 브라우저에 전달

(pageContext, request, session, Application)

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<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>

 


package kr.bit.controller;

import javax.servlet.http.HttpServletRequest;

import kr.bit.beans.Data;
import kr.bit.beans.Data2;
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 java.util.List;
import java.util.Map;

@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1() {
        return "test1";
    }
}

 

 

 

 

test1.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--data1,data2 출력--%>
${param.data1}<br>
${param.data2}
</body>
</html>

2-1) HttpServletRequest

 

    @GetMapping("/t2")
    public String t2(HttpServletRequest request) {
        request.setAttribute("data1", 10);
        request.setAttribute("data2", 20);

        return "test2";
    }
}

 

test2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${requestScope.data1}<br>
${data2}
</body>
</html>

 

 

 


2-2) Model

    @GetMapping("/t3")
    public String t3(Model model) { // 범위 = request
        model.addAttribute("data1",30);
        model.addAttribute("data2",40);

        return "test3";
    }
}

 

test3.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
</head>
<body>
${requestScope.data1}<br>
${data2}
</body>
</html>

2-3) ModelAndView

    @GetMapping("/t4")
    public ModelAndView t4(ModelAndView mv) { // 객체에다 넣기때문에 ModelAndView로 돌려받아야함

        mv.addObject("data1",50); // 값 세팅
        mv.addObject("data2",60);

        mv.setViewName("test4"); // test4로 뷰 페이지 설정 -> 페이지 이동

        return mv;
    }
}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${requestScope.data1}<br>
${data2}
</body>
</html>

 


2-4) @ModelAttribute  (객체로 저장된 필드 값 가져오기) - 클래스명 : 소문자

index.jsp

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

<form action="t1" method="post">
    d1:<input type="text" name="str1"><br>
    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>

 

 

 

 

package kr.bit.controller;

import javax.servlet.http.HttpServletRequest;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;


@Controller
public class SpringController {

    @PostMapping("/t1")
    public String t1(@ModelAttribute Data bean1) {
        return "test1";
    }

}

 

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--객체로 저장된 필드 값 가져올 때 클래스명 맨 앞글자는 소문자--%>
${requestScope.data.str1}<br>
${data.str2}<br>
</body>
</html>

 

 

 

 

    @PostMapping("/t2")
    public String t2(@ModelAttribute("test") Data bean1) {
        return "test2";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
${requestScope.test.str1}<br>     // data -> test로 바뀐게 중요!
${test.str2}<br>
</body>
</html>

 

728x90

+ Recent posts