view.setViewName("ModelAndView_test"); -> 이 안에 적은 string 값이 jsp 파일의 이름이 됨
view.addObject("name", "yeeun"); -> 이런식으로 객체를 만들어 정보 전달 가능
controller에서 이런 식으로 실행
@RequestMapping("/doE")
public ModelAndView hello() {
ModelAndView view = new ModelAndView();
view.setViewName("ModelAndView_test");
view.addObject("name", "yeeun");
return view;
}
ModelAndView_test.jsp 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ModelAndView 타입</title>
</head>
<body>
<h1>ModelAndView_test.jsp파일</h1>
<p>view.setViewName("ModelAndView_test"); 이 안에 적은 string 값이 jsp 파일의 이름이 됨</p>
<h4>이름 : ${name}</h4>
<p>view.addObject("name", "yeeun"); 이런식으로 객체를 만들어 정보 전달 가능</p>
</body>
</html>
데이터 전달하지 않을 때는 아래와 같은 형식으로 실행된다. return 된 string.jsp 파일을 보여준다.
아래에 있는 @ModelAttribute("msg")는 url이 넘어올때 ?msg=haha라고 넘어오면 msg의 값이 haha라고 된다.
@RequestMapping("/doB")
public String doC(@ModelAttribute("msg") String msg){
logger.info("문자열.jsp 파일을 찾아서 실행");
System.out.println("doC 메시지 : "+msg);
return "string";
}
string.jsp 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>string type</title>
</head>
<body>
<h1>
string 타입으로 실행!!
</h1>
<p>문자열.jsp 파일을 찾아서 실행</p>
<p> @ModelAttribute("msg") 는 주소창에 msg라는 파라미터 값을 가져온다.<br>
http://localhost:8080/doB?msg=haha 이런 식으로 넘김
</p>
<p>넘어온 것 찍어보자!!: ${msg}</p>
<p>넘기기 위해서는 위 url에 적어야 한다!! </p>
</body>
</html>
데이터를 전달할 때는 addAttribute() 메소드를 사용한다.
addAttribute("이름", 객체) : 이름을 이용해 객체를 사용
addAttribute(객체) : 이름을 지정하지 않을 경우 자동적으로 객체의 클래스명 앞글자를 소문자로 처리해서 이름으로 사용
userVO.java
package com.study.returnType.VO;
public class userVO {
private String name;
private String userId;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
@Override
public String toString(){
return "MemberVO [User name = " + name + ", User Id = " + userId + "]";
}
}
controller
아래와 같이 setter를 사용해서 보낼 수도 있고 map과 같이 묶어서 보낼 수도 있다.
@RequestMapping("/doC")
public String doD(Model model){
logger.info("setter로 저장해서 String 데이터 전달!!");
userVO user = new userVO();
user.setName("mary");
user.setUserId("hahahaha");
model.addAttribute("user", user);
//model.addAttribute(member);
logger.info("userVO : "+user.toString());
return "data";
}
@RequestMapping("/doD")
public String doE(Model model){
logger.info("map에 담아서 String 데이터 전달!!");
Map<String,String> map = new HashMap<String,String>();
map.put("name", "friend");
map.put("userId", "7979");
model.addAttribute("map", map);
return "data";
}
url.jsp 파일을 보여줌
controller에서 이렇게 실행하면
@RequestMapping("/doA")
public void doA(){
logger.info("doA.jsp 찾아 실행!!");
}
doA.jsp 파일 실행된다
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>void type</title>
</head>
<body>
<h1>
void 타입으로 실행!!
</h1>
<p>url.jsp 파일을 실행함!! 지금 이거는 doA.jsp 파일이다!!</p>
</body>
</html>
RequestToViewNameResolver를 통해 자동생성되는 View 이름이 사용
메시지 컨버터를 통해 바로 HTTP 응답의 메시지 본문으로 전환
controller
@RequestMapping("/doF")
@ResponseBody
public String doF() {
return "<html><body><h1>doF!! not jsp file!!</h1></body></html>";
}