관리 메뉴

거니의 velog

(20) 스프링 애너테이션 기능 3 본문

Java_Spring Framework part1

(20) 스프링 애너테이션 기능 3

Unlimited00 2023. 11. 11. 17:23

(3) @RequestParam 이용해 Map에 매개변수 값 설정하기

* 전송되는 매개변수의 수가 많을 경우 일일이 변수를 저장해서 사용하려면 불편하다. 이번에는 전달되는 매개변수 값들을 Map에 저장해 보자.

1. LoginController 클래스를 다음과 같이 작성한다. @RequestParam Map<String, Stirng> info는 이름이 info인 Map에 매개변수 이름을 key로, 매개변수 값을 value로 저장하는 구문이다.

	@RequestMapping(value = "/test/login3.do", method = { RequestMethod.GET, RequestMethod.POST })
	public ModelAndView login3(@RequestParam Map<String, String> info, // @RequestParam을 이용해 Map에 전송된 매개변수 이름을 key, 값을 value로 저장한다.
			                   HttpServletRequest request, HttpServletResponse response) throws Exception {
		request.setCharacterEncoding("utf-8");
		ModelAndView mav = new ModelAndView();
		
		String userID = info.get("userID");
		String userName = info.get("userName"); // Map에 저장된 매개변수의 이름으로 전달된 값을 가져온다.
		System.out.println("userID: "+userID);
		System.out.println("userName: "+userName);
		
		mav.addObject("info", info); // @RequestParam에서 설정한 Map 이름으로 바인딩한다.
		mav.setViewName("result");
		return mav;
	}

2. 결과창에서 바인딩한 속성 이름으로 출력한다.

[result.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" 
    isELIgnored="false"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>

<%
  request.setCharacterEncoding("UTF-8");
%>

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>결과창</title>
    </head>

    <body>
        <%-- <h1>아이디 : ${userID }</h1>
        <h1>이름 : ${userName }</h1> --%>
        <h1>아이디 : ${info.userID }</h1> <!-- Map에 key로 접근하여 값을 출력한다. -->
        <h1>이름   : ${info.userName }</h1>
    </body>

</html>

3. 로그인창에서 아이디와 이름을 입력한 후 로그인을 클릭하면 /test/login3.do로 요청하여 결과를 출력한다.

- http://localhost:8090/pro26/test/loginForm.do


(4) @ModelAttribute 이용해 VO에 매개변수 값 설정하기

* 이번에는 여러 개의 매개변수를 전달해 보자. 우선 @ModelAttribute를 이용해 VO 클래스의 속성에 매개변수 값이 자동으로 설정되도록 해보자.

1. LoginController 클래스를 다음과 같이 작성한다. @ModelAttribute("info") LoginVO loginVO는 전달된 매개변수에 대해 LoginVO 클래스 객체를 생성한다. 이어서 매개변수 이름과 같은 속성에 매개변수 값을 설정한 후 info 이름으로 바인딩한다. 예를 들어 로그인창에서 전달된 매개변수 이름이 userID이고, 값이 hong일 경우, @ModelAttribute로 LoginVO를 지정하면 전달 시 LoginVO의 속성 userID에 전달된 값 hong을 자동으로 설정해 준다.

	@RequestMapping(value = "/test/login4.do", method = { RequestMethod.GET, RequestMethod.POST })
	public ModelAndView login4(@ModelAttribute("info") LoginVO loginVO, // @ModelAttribute를 이용해 전달되는 매개변수 값을 LoginVO 클래스와 이름이 같은 속성에 자동으로 설정한다. addObject()를 이용할 필요 없이 info를 이용해 바로 JSP에서 LoginVO 속성에 접근할 수 있다.
			                   HttpServletRequest request, HttpServletResponse response) throws Exception {
		request.setCharacterEncoding("utf-8");
		ModelAndView mav = new ModelAndView();
		System.out.println("userID: "+loginVO.getUserID());
		System.out.println("userName: "+loginVO.getUserName());
		mav.setViewName("result");
		return mav;
	}

2. LoginVO 클래스를 다음과 같이 작성한다. 로그인 창에서 입력한 ID와 비밀번호를 속성에 저장한다.

package com.spring.ex02;

public class LoginVO {
	private String userID;
	private String userName;
	public String getUserID() {
		return userID;
	}
	public void setUserID(String userID) {
		this.userID = userID;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
}

3. 로그인 창에 입력한 ID와 비밀번호가 출력되도록 result.jsp를 작성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" 
    isELIgnored="false"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>

<%
  request.setCharacterEncoding("UTF-8");
%>

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>결과창</title>
    </head>

    <body>
        <%-- <h1>아이디 : ${userID }</h1>
        <h1>이름 : ${userName }</h1> --%>
        <h1>아이디 : ${info.userID }</h1> 
        <h1>이름   : ${info.userName }</h1> <!-- @ModelAttribute("info")에서 지정한 이름으로 속성에 접근한다. -->
    </body>

</html>

4. 로그인 창에서 로그인을 하면 ID와 이름을 출력한다.

- http://localhost:8090/pro26/test/loginForm.do


(5) Model 클래스 이용해 값 전달하기

* Model 클래스를 이용하면 메서드 호출 시 JSP로 값을 바로 바인딩하여 전달할 수 있다.

* Model 클래스의 addAttribute() 메서드는 ModelAndView의 addObject() 메서드와 같은 기능을 한다. Model 클래스는 따로 뷰 정보를 전달할 필요가 없을 때 사용하면 편리하다.

1. LoginController 클래스를 다음과 같이 작성한다.

	@RequestMapping(value = "/test/login5.do", method = { RequestMethod.GET, RequestMethod.POST })
	public String login5(Model model, // 메서드 호출 시 Model 클래스 객체를 생성한다.
			                   HttpServletRequest request, HttpServletResponse response) throws Exception {
		request.setCharacterEncoding("utf-8");
		model.addAttribute("userID", "hong");
		model.addAttribute("userName", "홍길동"); // JSP에 전달할 데이터를 model에 addAttribute() 메서드를 이용해서 바인딩한다.
		return "result";
	}

2. 로그인창에서 입력한 ID와 비밀번호가 출력되도록 result.jsp를 작성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" 
    isELIgnored="false"  %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>

<%
  request.setCharacterEncoding("UTF-8");
%>

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>결과창</title>
    </head>

    <body>
        <h1>아이디 : ${userID }</h1>
        <h1>이름 : ${userName }</h1>
    </body>

</html>

3. 다음은 로그인창에서 요청한 실행 결과이다.

- http://localhost:8090/pro26/test/loginForm.do