[스프링SPRING]페이지이동하기, 파라미터가지고 페이지이동하기

특정 주소를 처리하는 메서드 2가지방식(페이지이동하기)

  • 리턴타입이 있는지 없는지에 따라 두가지 방식으로 나누어진다
    • 메서드 리턴타입이 void인 경우 [주소.jsp] 페이지 호출
    • 메소드 리턴타입이 String인 경우 [리턴되는_문자열.jsp] 페이지 호출




return타입 없는 경우

  • void 메서드를 사용하면 된다
  • 입력하는 주소 : http://localhost:8088/test/home
  • 메서드 실행에 따라 호출되는 페이지 : home.jsp
1
2
3
4
5
6
// http://localhost:8088/test/home
@RequestMapping("home")
private void doA() {
System.out.println("doA 메서드 호출");
logger.info("Logger: doA()호출");
}




return타입 있는 경우

  • string, int, 객체 등등 알맞은 데이터타입을 적어주면 된다.
  • 입력하는 주소 : http://localhost:8088/test/doC
  • 메서드에 따라 호출되는 페이지 : abc.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
@Controller
public class SampleController2 {
// 로그정보를 처리하는 객체 생성
private static final Logger logger = LoggerFactory.getLogger(SampleController2.class);

// http://localhost:8088/test/doC
@RequestMapping("doC")
private String doC() { //리턴타입 String인 경우
logger.info("doC 메서드 호출");

return "abc";
}
}




파라미터가지고 페이지이동하기

  • 파라미터의 데이터타입에 따라 다양하게 전달 가능
  • 파라미터 앞에 애노테이션과 키명을 적어주어야한다
    • @ModelAttribute("키_이름")
  • 예시 : 쇼핑몰로그인기능구현




파라미터 타입이 String인 경우

1
2
3
4
5
6
7
8
// http://localhost:8088/test/testParam?msg="hi"
@RequestMapping(value = "testParam")
private String doC1(@ModelAttribute("msg") String msg, @ModelAttribute("name") String username) {
logger.info("doC1 메서드 호출, 파라미터 메세지: "+msg+", 유저이름: "+username);
return "doC";
// return "doC?msg=Hi";
// Q. 에러의 이유가 'doC?msg=hi.jsp'로 매핑이 되서 그런거 아닌가요? A. 맞음
}
  • doC.jsp 뷰 페이지 코드
    • 표현식에는 el표현식방식과 jsp표현식방식이 있다.
    • 두가지 표현방식 중 주로 EL표현식을 사용한다.
    • 그 이유는 EL표현식은 데이터가 NULL일때 컴파일에러가 없이 빈 공백으로 표시되기때문에 안정성이 높아서.
1
2
3
4
5
6
<strong>(el태그 사용)</strong> 전달받은 메세지 파라미터는 ${msg } 입니다. 너의 이름은? ${name }<br>
<strong>(jsp표현식 사용)</strong> 전달받은 메세지 파라미터는 <%=request.getParameter("msg") %> 입니다. 너의 이름은? <%=request.getParameter("name") %><br>

//출력값
(el태그 사용) 전달받은 메세지 파라미터는 hi 입니다. 너의 이름은?
(jsp표현식 사용) 전달받은 메세지 파라미터는 hi 입니다. 너의 이름은? null




파라미터 타입이 객체인 경우

  • 기존에는 request.setAttribute로 객체를 넘겼는데 스프링에서는 model객체(스프링mvc에서 제공해주는 객체)를 사용

  • model 객체는 객체를 저장해서 뷰페이지로 전달

  • model 객체 생성 방법 두가지

    • 첫번째 방법: 키와값 쌍으로 전달 model.addAttribute("vo", vo);
    • 두번째 방법: 키없이 객체만 전달 model.addAttribute(vo);
      • 키없이 객체만 전달한 경우 받을때는 클래스 첫글자를 소문자 변경해서 el표현식으로 호출해야함.
  • 공통코드 : ProductVO.java라는 객체생성

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
32
33
34
35
36
// 도메인 : 프로젝트에서 중요한 의미를 가지는 명사로 ex) 회원, 글, 상품, 주문 ... 등등

//자바빈(DTO == VO)설계규약
//규칙1번 : public클래스
public class ProductVO {
//규칙2 : private로 멤버변수 생성
private String name;
private double price;

//규칙4 : 생성자(생략가능 - 생략하면 디폴트생성자)
public ProductVO() {};
public ProductVO(String name, double price) {
this.name = name;
this.price = price;
};

//규칙3 : getter setter메서드생성
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}

// 5. toString
@Override
public String toString() {
return "제품정보 [name=" + name + ", price=" + price + "]";
}
}
  • 동일한 페이지명으로 페이지이동시 자바코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Controller
public class SampleController3 {
// 페이지 이동시 객체 정보를 가지고 이동

// 로그정보 처리 객체
private static final Logger logger = LoggerFactory.getLogger(SampleController3.class);

// http://localhost:8088/test/doD
@RequestMapping("doD")
public void doD(Model model) {
logger.info("doD() 호출!!!");

//상품객체생성
ProductVO vo = new ProductVO("phone", 100);

// 첫번째 방법 : 키와값 쌍으로 전달
model.addAttribute("vo", vo);
// 두번째 방법: 키없이 객체만 전달
model.addAttribute(vo);
}
}
  • doD.jsp 뷰페이지 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<body>
전달받은 객체 호출<br>
<!-- toString()를 통해서 출력 -->
<%=request.getAttribute("vo") %>
<p></p>
제품명 : ${vo.name } <br>
가격 : ${vo.price } <br>

<hr>
제품명 : ${productVO.name } <br>
가격 : ${productVO.price } <br>
</body>

//출력값
전달받은 객체 호출
제품정보 [name=phone, price=100.0]
제품명 : phone
가격 : 100.0
제품명 : phone
가격 : 100.0
  • 다른 페이지명으로 페이지이동시 자바코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Controller
public class SampleController3 {
// 페이지 이동시 객체 정보를 가지고 이동
// 로그정보 처리 객체
private static final Logger logger = LoggerFactory.getLogger(SampleController3.class);

// http://localhost:8088/test/doD
@RequestMapping("doD")
public String doD(Model model) {
logger.info("doD() 호출!!!");

//상품객체생성
ProductVO vo = new ProductVO("phone", 100);

// 첫번째 방법: 키와값 쌍으로 전달
model.addAttribute("vo", vo);
// 두번째 방법: 키없이 객체만 전달
model.addAttribute(vo);

return "doDPage";
}
}
  • doDPage.jsp 뷰페이지 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<body>
전달받은 객체 호출(doDpage.jsp)<br>
<!-- toString()를 통해서 출력 -->
<%=request.getAttribute("vo") %>
<p></p>
제품명 : ${vo.name } <br>
가격 : ${vo.price } <br>

<hr>
제품명 : ${productVO.name } <br>
가격 : ${productVO.price } <br>
</body>

//출력값
전달받은 객체 호출(doDpage.jsp)
제품정보 [name=phone, price=100.0]
제품명 : phone
가격 : 100.0
제품명 : phone
가격 : 100.0