티스토리 뷰

728x90

 

Client가 뭔가 요청하면 브라우저는 요청을 서버로 보내주지
서버는 요청을 보관해두려고 HttpServletRequest 객체를 사용하는데,
요청에 대한 결과가 전송될 때까지 유지/사용 가넝해~
이 범위를 바로 RequestScope라고 하쥐

한마디로 HttpServletRequest 객체에 데이터, 객체 저장 가능하고
RequestScope내에서 이용될 수 있다는거야

Java ver

 

 

 

 

 

 

 

 

 

프로젝트 생성

Project Explorer에서 빈공간에 우클릭하면 Dynamic Web Project 만들 수 있다!
여기까진 할 수 있잖아

 

방금 만든 그 프로젝트를 Maven Project로 만들어주자!

혹시 다시 Maven 제거하고 싶다면, 위의 그림처럼 Disabled Maven Nature 해주믄 되니꽈

아! 메이븐 설정하고 프로젝트에 오류뜨면 그냥 alt+F5로 마무리해주십시다

 

Maven 기본설정 해보자!

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <!-- pom모델버전 -->
  <modelVersion>4.0.0</modelVersion>
  <!-- 프로젝트 생성하는 조직의 고유 아이디 like 도메인 이름 -->
  <groupId>Ex01JavaSetting</groupId>
  <!-- Maven 프로젝트 식별하는 아이디 like 프로젝트명 -->
  <artifactId>Ex01JavaSetting</artifactId>
  <!-- 프로젝트 현재 버전 -->
  <version>0.0.1-SNAPSHOT</version>
  <!-- 어떤 형태로 프로젝트를 패키징할 지 결정 -->
  <packaging>war</packaging>
  
  <!-- 소스의 디렉토리 구조, 빌드 산출물 디렉토리 구조, 빌드시 사용할 플러긴 정보 관리 -->
  <build>
  	<!-- sourceDirectory : 자바 소스 코드를 관리하는 디렉토리 -->
  	<sourceDirectory>src/main/java</sourceDirectory>
  
	<!-- Maven제공 기능은 플러긴 기반으로 작동 따라서 설정 필요 -->  
    <plugins>
    
	  <!-- 컴파일 플러그인 설정 -->
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
        	<!-- 16>14변경 -->
          <release>14</release>
        </configuration>
      </plugin>
      
      <!-- 배포 패키징 플러긴 설정 -->
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.3</version>
        <!-- configuration 추가 -->
        <configuration>
        	<!-- 배포할 위치 directory -->
        	<warSourceDirectory>src</warSourceDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
  <!-- 라이브러리 버전관리 : properties -->
  <properties>
  	<javax.servlet-version>4.0.1</javax.servlet-version>
  	<javax.servlet.jsp-version>2.3.3</javax.servlet.jsp-version>
  	<javax.servlet.jsp.jstl-version>1.2</javax.servlet.jsp.jstl-version>
  	<org.springframework>5.2.2.RELEASE</org.springframework>
  </properties>
  
  <!-- 라이브러리 셋팅 : dependencies 프로그램과 의존관계인 라이브러리 관리 -->
  <dependencies>
  
  	<!-- servlet-api 라이브러리 적용 위한 설정 -->
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	    <!-- 버전관리는 properties에서 하기 때문에 변수처럼 사용하기 -->
	    <version>${javax.servlet-version}</version>
	    <scope>provided</scope>
	</dependency>
	
  	<!-- javax.servlet.jsp-api 라이브러리 적용 위한 설정 -->
	<dependency>
	    <groupId>javax.servlet.jsp</groupId>
	    <artifactId>javax.servlet.jsp-api</artifactId>
	    <!-- 버전관리는 properties에서 하기 때문에 변수처럼 사용하기 -->
	    <version>${javax.servlet.jsp-version}</version>
	    <scope>provided</scope>
	</dependency>

	<!-- javax.servlet/jstl 라이브러리 적용 위한 설정 -->
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>jstl</artifactId>
	    <!-- 버전관리는 properties에서 하기 때문에 변수처럼 사용하기 -->
	    <version>${javax.servlet.jsp.jstl-version}</version>
	</dependency>
	
	<!-- spring-webmvc 라이브러리 적용 위한 설정 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	    <!-- 버전관리는 properties에서 하기 때문에 변수처럼 사용하기 -->
	    <version>${org.springframework}</version>
	</dependency>
	
	
  </dependencies>
</project>

 

 

 

Spring MVC Java 기본설정

일단 Spring MVC를 어떻게 구현할지 구조부터 대충 살펴보면,
전에 JSP MVC 패턴때 BeansConfigClass 만들어서 bean을 정의해주었지
그 역할을 이젠 SpringConfigClass라는 이름으로 변경해 Java버전으로 해볼게!

import javax.servlet.Filter;

import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpringConfigClass extends AbstractAnnotationConfigDispatcherServletInitializer {

	//AbstractAnnotationConfigDispatcherServletInitializer의 메소드 전부 override
	
	//프로젝트에서 사용할 bean정의 클래스 지정
	@Override
	protected Class<?>[] getRootConfigClasses() {
		// TODO Auto-generated method stub
		//return 추가
		return new Class[] {RootAppContext.class};
	}

	//Spring MVC 프로젝트 설정 위한 configuration 클래스 지정
	@Override
	protected Class<?>[] getServletConfigClasses() {
		// TODO Auto-generated method stub
		return new Class[] {ServletAppContext.class};
	}

	//DispatcherServlet에 매핑할 요청 주소 세팅
	//DispatcherServlet : 클라이언트 요청을 맨 처음 받는 위치로 공통작업 후 세부 작업은 담당 컨트롤러로 전달하는 역할
	@Override
	protected String[] getServletMappings() {
		// TODO Auto-generated method stub
		return new String[] {"/"};
	}
	
	//얘는 안따라와서 따로 추가해줌
	//request.setCharacterEncoding("UTF-8") 한 번만 설정하기
	@Override
	protected Filter[] getServletFilters() {
		// TODO Auto-generated method stub
		CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
		encodingFilter.setEncoding("UTF-8");
		return new Filter[] {encodingFilter};
	}
	
}

AbstractAnnotationConfigDispatcherServletInitializer를 상속받아서 그 내부 메서드를 override 받았어.
맨 마지막 filter 메서드는 안따라오더라고?
걍 내가 불렀어 filter적고 ctrl+space하믄 뜰겨

보면 먼저 bean 뭐 쓸지 getRoot~()메서드에서 정의해주고,
getServletConfigClasses()메서드에서 Configuration을 지정해준다
getServletMapping()메서드는 말그대로 매핑 역할을 하는데, 위에서 적었다시피 클라이언트 요청 받으면
그 요청에 해당하는 컨트롤러 쪽으로 보내주는 것이 바로 매핑!
맨 마지막 filter 메서드는 우리 맨~날 스크립틀릿으로 또는 컨트롤러에서 request.set~("UTF-8") 적어줬잖아?
그걸 저기다가 딱 한 번, 두 번도 아니고 한 번만 적어주면 페이지마다 적은 효과를 주는거지

 

 

이제 getRootConfigClass 메서드에서 정의될 bean 클래스를 한 번 만들어보자

import org.springframework.context.annotation.Configuration;

//Spring MVC 프로젝트에서 사용할 bean 정의하는 클래스
@Configuration
public class RootAppContext {

}

간단하지? @Configuration 이라고 어노테이션 달아준 클래스가 전부야
물론 필요하게 되면 클래스 내부에 필드니, 생성자니, 메서드니 들어가겠지만 지금은 틀만 잡고 있는거니까 요대로 둘게

 

이번엔 getServletConfigClass 메서드에서 Spring MVC 설정을 해줄 Configuration 클래스를 정의해보자

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

//Spring MVC 프로젝트 설정 클래스
@Configuration

//@Controller 셋팅된 크래스를 Controller로 등록
@EnableWebMvc

//스캔할 패키지 저장
@ComponentScan("kr.co.goodee39.controller")
public class ServletAppContext implements WebMvcConfigurer {
	
	//Controller의 메서드가 반환하는 jsp의 이름 앞뒤에 경로(/WEB-INF/views), 확장자(.jsp) 추가하는 설정
	//configureViewResolvers
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		// TODO Auto-generated method stub
		WebMvcConfigurer.super.configureViewResolvers(registry);
		registry.jsp("/WEB-INF/views/", ".jsp");
	}
	
	//정적 파일(img, video, audio, etc) 경로 매핑
	//addResourceHandlers
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		// TODO Auto-generated method stub
		WebMvcConfigurer.super.addResourceHandlers(registry);
		registry.addResourceHandler("/**").addResourceLocations("/resources/");
	}
}

좀 낯설긴한데, servlet이라는 단어는 주구장창 봐왔잖아?
한 페이지 이동 할 때마다 servlet 추가추가추가 하던 그런 날이 끝났다 이거임..
여기서 한 큐에 설정이 가능해

일단 이 클래스가 Configuration할 클래스임을 어노테이션으로 명명하고,
@EnableWebMvc를 통해 이따가 @Controller 역할을 할 클래스를 진짜 controller로서 역할 할 수 있게 만들어줘
@ComponentScan으로 경로 설정해주면 그 내부 클래스 중 @Component설정된 클래스를 찾게될건데,
사실 이번에는 @Component로 등록된 클래스는 없어ㅎㅎㅎ

그리고나서 WebMvcConfigurer 상속받아준 후에 RootConfigClass와 마찬가지로 내부 메서드를 모두 상속 받아줘

configViewResolvers(ViewResolverResistry registry)라는 메서드는 이따가 @Controller에서 어떤 페이지로 갈 수 있게끔
jsp의 이름을 반환할텐데, 그 앞전 경로를 설정해주고, jsp파일임을 명시하는 확장자 설정이 가능해

addResourceHandelers(ResourceHandlerRegistry registry) 메서드는 정적인 파일, 예를들면 이미지, 영상, 음성 등등
어딘가에 딱 넣어두고, 불러와지기만 하는 변함없는 파일이잖아?
그 경로를 설정할 수 있는데, 여기서 보면 느끼겠지만 경로가 하나뿐이잖아..
하나의 경로밖에 못써..
뭐 하나의 경로 안에 폴더를 또 만들면 쓸 수 있겠지?
아 여기서 사실 addResourceHandler("/**")는 아직 어떤 역할인건지 잘 모르겠어.. 찾아보자 더 ㅎㅎㅎㅎ

 

자 여기까지가 기초다 기초...
사실 아직 100% 이해된건 아니야.
이렇다니까 일단 받아들인거고, 계속 따라쳐보고, 구글링 해보면서 내것으로 만들고 또 발전도 시켜봐야지!

 

Controller 클래스 만들기

아까 위에서 Spring MVC를 설정하게 해주는 클래스 하나가 있었잖아?
그 클래스 내부에 @EnableWebMvc라는 어노테이션이 있었는데
이건 @Controller로 지정된 클래스가 정말 controller로서의 역할을 할 수 있게끔 해주는 어노테이션이였어.
그럼 이제 @Controller를 달고있을 클래스를 만들어보자
따지고보면 JSP에서 Servlet역할의 일부를 담당하는 것이라고도 생각할 수 있지 않나? 싶네

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HomeController {
	
	//ServletAppContext에서 설정한 configureViewResolvers()메소드 통해서 
	///WEB-INF/views/index.jsp로 변환됨
	@RequestMapping(value="/", method=RequestMethod.GET)
	public String home() {
		return "index";
		
	}
}

별건 없어
그냥 무슨 역할하는지 보자고!

위에서 계속 언급했듯 이 클래스는 controller의 역할을 할 클래스이므로 어노테이션으로 이름표 달아주고,
메소드를 하나 만드는데, 이 메소드는 무어냐
첫 페이지 역할, 그러니까 home 역할을 할 페이지를 설정하는 메서드야
그래서 이름도 home이야 후후
value는 우리 JSP MVC 패턴에서 servlet만들면 맨 상단에 

@WebServlet("/블라블라")하는 공간이 있어 (ㄴㅇㄹ는 무시혀~ 걍 쓴거임)
저 블라블라는 보통 servlet이름이 들어가는데, 파일을 실행시켜서 이동한다거나 하면
url에 저기 작성된 이름이 뒤에 뜨더라고?
근데 이걸 /만 남기고 지워주면?!
그냥 RequestDispatcher rdp = request.getRequestDispatcher("");에서 설정한 jsp파일이 home으로 떠부러
servlet이라는 위치가 jsp파일 앞전에 안붙기 때문이지!
그거랑 같은 이치야 value = "/"는

아무턴, return "문자열";은 이따가 만들 home이 될 jsp파일 이름을 넣어준거야
이 controller가 실행되면 index라는 홈이름이 전달되겠지 어디로?
아까 위에서 @EnableWebMvc로 지금 이 클래스에 Controller의 자격을 준 servletAppContext 클래스로!

그리고는 configureViewResolvers(ViewResolverRegistry registry) 메소드를 만나 
/WEB-INF/views/index.jsp로 변신!
그리고 index.jsp에 이미지가 있다면 addResourceHandlers(ResourceHandlerRegistry registry) 메서드 통해서
src 앞에 /resources/가 콱 붙어주겠지~ 

 

 

 

HomeController에서 설정한 첫 페이지가 되어줄 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="test1">Test1</a><br />
	<a href="test2">Test2</a><br />
	<a href="test3">Test3</a><br />
	<a href="test4">Test4</a><br />
	<a href="test5">Test5</a><br />
</body>
</html>

 

총 5가지의 RequestScope에 대한 테스트를 해볼그야
a태그니까 전부 GET방식을 사용할게!

 

 

 

 

VO를 하나 만들어주자~
public class DataBean1 {
	
	private String data1;
	private String data2;
	
	public DataBean1() {
		// TODO Auto-generated constructor stub
	}

	public String getData1() {
		return data1;
	}

	public void setData1(String data1) {
		this.data1 = data1;
	}

	public String getData2() {
		return data2;
	}

	public void setData2(String data2) {
		this.data2 = data2;
	}
	
	
}

controller에서 test5()메서드에서 커맨드객체로 가져가서 사용할꾸

 

 

 

 

 

 

 

 

 

 

 

 

Controller 만들기

아우 설명하기 짜증나서 나눴다.

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;

import kr.co.goodee39.vo.DataBean1;

@Controller
public class TestController {

	//requestScope
	//index.jsp에서 test1 해당하는 a태그 클릭시, result1로 data1을 들고 이동!
	@GetMapping("/test1") 
	public String test1(HttpServletRequest request) {
		
		request.setAttribute("data1", "문자열1");
		
		//redirect는 페이지 요청 후 페이지 전달만 하고 이미 소멸된 상태이기 때문에 setAttribute로 설정한 data1은 전달되지 않음
		/* return "redirect:/result1"; */
		
		//forward는 서버상에서 코드 흐름 자체가 이동하기 때문에 setAttribute로 설정한 data이 전달됨
		return "forward:/result1";
	}
	
	@GetMapping("/result1") 
	public String result1(HttpServletRequest request) {
		
		String data1 = (String)request.getAttribute("data1");
		System.out.println("data1 : "+data1);
		
		return "result1";
	}
	
}

1-1) test1() 메서드

HttpServletRequest 객체를 이용해 request를 선언하고, 그 안에 data1이라는 속성으로 "문자열1"이란 데이터를 삽입!
이걸 forward 방식으로 보내쥬자~

1-2) result1() 메서드

result1.jsp 페이지로 이동하기 위한 메서드를 만들었음!
setAttribute로 설정을 했으니, getAttribute로 가져와서 한 번 출력이나 해보자구
마찬가지로 HttpServletRequest 객체 이용해 getAttribute로 뽑아오기
이동하는데 데이터 잘 가지고 가는건지 확인한는거지

 

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;

import kr.co.goodee39.vo.DataBean1;

@Controller
public class TestController {

	//index.jsp에서 test2 해당하는 a태그 클릭시, result2페이지로 data2을 들고 이동!
	//Model의 Scope확인
	@GetMapping("/test2")
	public String test2(Model model) {
		
		//requestScope로 데이터만 넘겨주고 model은 초기화됨
		model.addAttribute("data2", "문자열2");
		
		return "forward:/result2";
	}
	
	@GetMapping("/result2")
	public String result2(Model model, HttpServletRequest request) {

		String model_data2 = (String)model.getAttribute("data1");
		//model에는 data2남아있지 않으므로 null로 출력됨
		//model_data2 : null
		System.out.println("model_data2 : "+model_data2);
		
		String request_data2 = (String)request.getAttribute("data2");
		//requestScope영역에는 data2가 넘겨진 상태이므로 값이 잘 출력됨
		//request_data2 : 문자열2
		System.out.println("request_data2 : "+request_data2);
		
		return "result2";
	}
	
}

2-1) test2() 메서드

Model객체를 커맨드해 내부 메서드인 addAttribute를 사용해도 됨!
결과는 request.setAttribute와 다를 바가 없지

2-2) result2() 메서드

result2.jsp로 이동하기 위한 페이지인데, 여기서 어디까지 데이터가 닿는지 출력이나 해봅시다.
Model 객체 타입으로 출력했을때와 HttpServletRequest 객체 타입으로 출력하는구~

이미 주석에 써있기는 하지만, Model객체 타입은 null이 나온다..?
이게 신기한게, test2()메서드에서 model통해서 addAttribute하잖아?
그럼 RequestScope영역으로 전달을 해주긴 해줘,
근데 해주고 바로 Model객체 타입의 model은 초기화가 돼
그래서 result2메서드의 model.getAttibute로 출력하면 null이 나오는거야

반면, HttpServletRequest 객체 이용해서 getAttribute로 출력해보면
타란~ 하고 나온다 이거지..
결론은 requestScope로 전달이 되기 때문에 RequestScope로 출력해야 출력이 가능허다 뭐 그런,~

 

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;

import kr.co.goodee39.vo.DataBean1;

@Controller
public class TestController {

	//index.jsp에서 test3 해당하는 a태그 클릭시, result3페이지로 data3을 들고 이동!
	//WebRequest의 Scope확인
	@GetMapping("/test3")
	public String test3(Model model) {
		
		//requestScope로 데이터만 넘겨주고 model은 초기화됨
		model.addAttribute("data3", "문자열3");
		
		return "forward:/result3";
	}
	
	@GetMapping("/result3")
	public String result3(WebRequest request) {
		
		String data3 = (String)request.getAttribute("data3", WebRequest.SCOPE_REQUEST);
		//requestScope영역에는 data3이 넘겨진 상태이므로 값이 잘 출력됨 WebRequest도 어쨌든 request니까
		//data3 : 문자열3
		System.out.println("data3 : "+data3);
		
		return "result3";
	}
	
	
}

3-1) test3()메서드

test2()메서드와 마찬가지로 Model객체 이용해서 데이터를 result3.jsp로 전달한다

3-2) result3() 메서드

HttpServletRequest가 Spring에서는 WebRequest로 대체되기도 한다고 지난 번에 배워봤으니
여기서 한 번 시도 해보자구! 어쨌든 얘도 RequestScope이니꽈~

 

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;

import kr.co.goodee39.vo.DataBean1;

@Controller
public class TestController {

	//index.jsp에서 test4 해당하는 a태그 클릭시, result4페이지로 data4을 들고 이동!
	//ModelAndView의 Scope확인
	@GetMapping("/test4")
	public ModelAndView test4(ModelAndView mav) {
		
		//requestScope로 데이터만 넘겨주고 ModelAndView는 초기화됨
		mav.addObject("data4", "문자열4");
		mav.setViewName("forward:/result4");
		
		return mav;
	}
	
	@GetMapping("/result4")
	public ModelAndView result4(ModelAndView mav, HttpServletRequest request) {
		
		//getModel()을 먼저 하는 이유는, mav내부에 지금 View까지 한 번에 담겨진 상태이므로
		//Map형태로 만든 뒤에 출력하는 것
		String mav_data4 = (String)mav.getModel().get("data4");
		//ModelAndView에는 data2 남아있지 않으므로 null로 출력됨
		//mav_data4 : null
		System.out.println("mav_data4 : "+mav_data4);
		
		String request_data4 = (String)request.getAttribute("data4");
		//requestScope영역에는 data3이 넘겨진 상태이므로 값이 잘 출력됨
		//request_data4 : 문자열4
		System.out.println("request_data4 : "+request_data4);
		
		mav.setViewName("/result4");
		
		return mav;
	}
	
	
}

4-1) test4() 메서드

Model의 사촌, ModelAndView로도 한 번 데이터를 보내 보자구!
ModelAndView 객체 통해 선언한 변수에
addObject 속성으로 데이터 설정하고, setViewName 속성으로 데이터 이동시킬 페이지까지 한 번에 설정해서
변수를 통째로 반환한다

4-2) result4() 메서드

ModelAndView는 그의 커즌 Model과는 달리 RequestScope 영역에 있는지 함 보자고,
(같은 피인데 뭐 다르겄어..?ㅎㅎㅎㅎ)
이번에는 HttpServlerRequest 객체 타입으로도 함 뽑아보고~
얘는 되겠지 누가봐도 RequestScope니까

 

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.ModelAndView;

import kr.co.goodee39.vo.DataBean1;

@Controller
public class TestController {

//index.jsp에서 test5 해당하는 a태그 클릭시, result5페이지로 data5을 들고 이동!
	@GetMapping("/test5")
	public String test5(@ModelAttribute("bean1") DataBean1 bean1) {
		
		//requestScope로 데이터만 넘겨주고 bean1는 초기화됨
		bean1.setData1("문자열6");
		bean1.setData2("문자열7");
		
		return "forward:/result5";
	}

	@GetMapping("/result5")
	//DataBean1타입 bean1과 WebRequest타입 request 둘 다 선언시에 출력 안됨..
	/*public String result5(@ModelAttribute("bean1") DataBean1 bean1, WebRequest request) {
		
		
		System.out.println("bean1.data1 : "+bean1.getData1());
		//bean1.data1 : null
		System.out.println("bean1.data2 : "+bean1.getData2());
		//bean1.data2 : null
		 */
	public String result5(WebRequest request) {	
		DataBean1 request_data1 = (DataBean1)request.getAttribute("bean1", WebRequest.SCOPE_REQUEST);
		System.out.println("request_data1 : "+request_data1.getData1());
		//request_data1 : 문자열6
		System.out.println("request_data2 : "+request_data1.getData2());
		//request_data2 : 문자열7
		
		return "result5";
	}
	
	
}

5-1) test5()메서드

만들어 놓았던 DataBean1을 사용할 때가 왔다!
커맨드 객체로 불러오고, 결과 페이지에서 bean1으로 호출하기 위해 @ModelAttribute 어노테이션 깔꼼하게 써주자
DataBean1 객체 타입의 변수 bean1 선언, DataBean1의 setter 메서드 사용해 data1, data2 데이터 설정~

5-2) result5() 메서드

결과 페이지 이동 메서드이나, 여기서도 한 번 Request으로 출력해보되, DataBean1객체 타입으로 쇽
근데 잠깐, 여기서 객체 타입으로 불러온답시고는 커맨드객체로 DataBean1 가져와버리면
sysout도 null이고, 결과 페이지에도 아무것도 나오지 않게 됨

 

 

 

 

결과페이지를 만들자~

 

<%@ 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>
	<h1>Result Test</h1>
	<h3>data1 : ${requestScope.data1}</h3>
</body>
</html>
<%@ 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>
	<h1>Result1</h1>
	<h3>data1 : ${requestScope.data1}</h3>
</body>
</html>
<%@ 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>
	<h1>Result2</h1>
	<h3>data2 : ${requestScope.data2}</h3>
</body>
</html>
<%@ 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>
	<h1>Result3</h1>
	<h3>data3 : ${requestScope.data3}</h3>
</body>
</html>
<%@ 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>
	<h1>Result4</h1>
	<h3>data4 : ${requestScope.data4}</h3>
</body>
</html>
<%@ 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>
	<h1>Result5</h1>
	<h3>bean1.data1 : ${requestScope.bean1.data1}</h3>
	<h3>bean1.data2 : ${requestScope.bean1.data2}</h3>
</body>
</html>

 

 

 

 

 

 

 

home으로 만들었던 index페이지에서 진짜 이동 되는지 한 번 해보자!

Run on Server를 클릭해주쟈

 

결과

 

 

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함