티스토리 뷰
Spring MVC - Request Params & Requst Mappings
junojuno 2021. 2. 9. 18:241. RequestParam
(1) 코드예시
1) form data를 프로세스할 새로운 method를 만든다.
2) @RequestParam("studentName")을 통해 form의 input name이 "studentName"인 필드를 가져온다.
- form data를 읽어와서 자동으로 method안에 들어오는 parameter에 연결시킨다.
- 백그라운드에서, Spring이 request로부터의 param인 studentName을 읽어서 theName이라는 String변수에 binding시킨다.
@RequestMapping("/processFormVersionThree")
public String processFromVersionThree(@RequestParam("studentName") String theName,
Model model) {
/*
// read the request parameter from the HTML form
String theName = request.getParameter("studentName");
-> Spring이 자동으로 해주기 때문에 필요가 없다.
*/
// convert the data to all caps
theName = theName.toUpperCase();
// create the message
String result = "Hey My Friend from v3! " + theName;
// add message to the model
model.addAttribute("message",result);
return "helloworld";
}
다음과 같이 설정해 준뒤, form페이지에서 action 속성을 processFormVersionThree로 설정해주면 된다.
포인트는 Spring이 @RequestParam이라는 annotation으로 form data를 읽어 올 수 있다는 것이다.
2. RequestMapping
(1) Controller에 request mapping 추가
- Controller의 parent mapping로서 역할을 한다.
- Controller안의 method의 모든 request mapping은 controller의 경로에 상대적이다.
- 폴더 directory structure와 비슷하다.
-> request mapping을 그룹화 시키는데 좋은 방법임. 다른 controller의 request mapping들과의 충돌을 해결하는데 좋은 테크닉임.
(2) 코드 예시
package com.luv2code.springdemo.mvc;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/hello") // Parent mapping. 아래 mapping들은 모두 sub mapping이 된다.
public class HelloWorldController {
// need a controller method to show the initial HTML form
@RequestMapping("/showForm")
public String showForm() {
return "helloworld-form";
}
//need a controller method to process the HTML form
@RequestMapping("/processForm")
public String processForm() {
return "helloworld";
}
//new a controller method to read form data and
//add data to the model
@RequestMapping("/processFormVersionTwo")
public String letsShoutDude(HttpServletRequest request, Model model) {
...
}
@RequestMapping("/processFormVersionThree")
public String processFromVersionThree(@RequestParam("studentName") String theName,
Model model) {
...
}
}
package com.luv2code.springdemo.mvc;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SillyController {
@RequestMapping("/showForm")
public String displayTheForm() {
return "silly";
}
//different method name, same request mapping
}
위 코드와 같이 여러개의 Controller에서의 method에 @RequestMapping을 통해 경로를 설정해 놓은것이 충돌이 일어날 수 있다. 이런경우를 대비해서 클래스에 @RequestMapping을 설정함으로서 controller클래스간의 경로 충돌을 해결 할 수 있을 뿐만 아니라 정리되는 기능 또한 있다.
* 폼 페이지에서 action 속성은 controller에 RequstMapping으로 부모 경로를 설정해줬다해서 변경할 필요는 없다.
왜냐하면 위 예시에서 controller class에 @RequstMapping("/hello")를 설정하고 @RequestMapping("/showForm")을 통해서 폼 페이지를 보여준다면, 폼 페이지가 열릴때 hello/showForm으로 열리게 되고, 이 시점에서 browser URL/path가 http://localhost:8080/spring-mvc-demo/hello로 설정된다.
따라서 action 속성으로 submit한 후의 페이지로 넘겨도 http://localhost:8080/spring-mvc-demo/hello/processForm으로 실제 URL이 넘어가게 된다.
그러므로 폼이 있는 JSP페이지에서 경로를 다시 설정해 주지 않아도된다.
'Programming > Spring & Hibernate' 카테고리의 다른 글
Spring MVC Form Validation - Built-In Validation Rule 적용하기 (0) | 2021.02.17 |
---|---|
Spring MVC - Form Tags and Data Binding (0) | 2021.02.09 |
Spring MVC - Creating Controllers & Views (0) | 2021.02.09 |
Spring MVC - Overview & Configuration (0) | 2021.02.08 |
Spring Configuration with Java code (0) | 2021.01.31 |
- Total
- Today
- Yesterday