@Controller
@RequestMapping("/user.do")
public class EditUserController {
...중략...
}
@Controller
@RequestMapping("/userList.do")
public class UserController {
... 중략 ...
@RequestMapping
public Model getUserList() {
List userList = userService.getUserList();
ExtendedModelMap map = new ExtendedModelMap();
map.addAttribute("userList", userList);
return map;
}
}
@Controller
@RequestMapping("/user.do")
public class EditUserController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView addUserView() {
... 중략 ...
return mnv;
}
@RequestMapping(method = RequestMethod.POST)
public String addUser(HttpServletRequest request, @ModelAttribute("user")
User user, BindingResult result, SessionStatus status) throws Exception {
... 중략 ...
return "/userList.do";
}
}
@Controller
public class DeptController {
@RequestMapping("/deptList.do")
public ModelAndView getDeptList() {
...중략...
return mnv;
}
@RequestMapping("/getDept.do")
public String getDept(@RequestParam("deptId")
String deptId, ModelMap model) {
...중략...
return "/jsp/dept/getDept.jsp";
}
}
| value | "value='/getUser.do'"와 같은 형식의 매핑 URI이다. 디폴트 속성이기 때문에 value만 정의하는 경우에는 'value='은 생략할 수 있다.
예 : @RequestMapping(value = {"/addDept.do", "/updateDept.do" }) 위의 경우 "/addDept.do", "/updateDept.do" 두 URL 모두 처리한다. |
| method | GET, POST, HEAD 등으로 표현되는 HTTP Request method에 따라 requestMapping을 할 수 있다. 'method=RequestMethod.GET' 형식으로 사용한다.
method 값을 정의하지 않는 경우 모든 HTTP Request method에 대해서 처리한다.
예 : @RequestMapping(method = RequestMethod.POST). 이 경우 value 값은 클래스 선언에 정의한 @RequestMapping의 value 값을 상속받는다. |
| params | HTTP Request로 들어오는 파라미터 표현이다.'params={"param1=a", "param2", "!myParam"}' 로 다양하게 표현 가능하다.
예 : @RequestMapping(params = {"param1=a", "param2", "!myParam"}) 위의 경우 HTTP Request에 param1과 param2 파라미터가 존재해야하고 param1의 값은 'a'이어야 하며, myParam이라는 파라미터는 존재하지 않아야한다. 또한, value 값은 클래스 선언에 정의한 @RequestMapping의 value 값을 상속받는다. |
@RequestMapping(params = "param=add")
public String addUser(HttpServletRequest request, @ModelAttribute("user")
User user, BindingResult result, SessionStatus status) throws Exception {
...중략...
String message = messageSource.getMessage(
"user.error.exist", new String[] {user.getUserId() },
localeResolver.resolveLocale(request));
}
@RequestMapping("/login.do")
protected ModelAndView handleRequestInternal(HttpSession session,
@RequestParam("userId") String userId) throws Exception {
session.setAttribute("userId", userId);
return new ModelAndView("/index.jsp");
}
@RequestMapping(params = "param=add")
public String addUser(Locale locale, @ModelAttribute("user")
User user, BindingResult result, SessionStatus status) throws Exception {
...중략...
String message = messageSource.getMessage(
"user.error.exist", new String[] {user.getUserId()}, locale);
}
@RequestMapping(params = "param=add")
public String addUser(InputStream is, @ModelAttribute("user")
User user, BindingResult result, SessionStatus status) throws Exception {
...중략...
for(int totalRead = 0; totalRead < totalBytes; totalRead += readBytes) {
readBytes = is.read(binArray, totalRead, totalBytes - totalRead);
...중략...
}
...중략...
}
@RequestMapping(params = "param=add")
public String addUser(OutputStream os, @ModelAttribute("user")
User user, BindingResult result, SessionStatus status) throws Exception {
...중략...
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] content = outStream.toByteArray();
os.write(content);
os.flush();
...중략...
}
@RequestMapping("/deleteDept.do")
public String deleteDept(@RequestParam("deptId") String deptId) {
deptService.deleteDept(deptId);
return "/deptList.do";
}
@RequestMapping("/getDept.do")
public String getDept(@RequestParam("deptId") String deptId, Map map) {
Dept dept = deptService.getDept(deptId);
// 여기서 dept는 "dept"라는 이름으로 @SessionAttributes를 통해 session에 저장되어 관리될 수 있다.
map.put("dept", dept);
return "/jsp/dept/getDept.jsp";
}
@RequestMapping("/getDept.do")
public String getDept(@RequestParam("deptId") String deptId, Model model) {
Dept dept = deptService.getDept(deptId);
// 여기서 dept는 "dept"라는 이름으로 @SessionAttributes를 통해 session에 저장되어 관리될 수 있다.
model.addAttribute("dept", dept);
return "/jsp/dept/getDept.jsp";
}
@RequestMapping("/getUser.do")
public String getUser(@RequestParam("userId") String userId, ModelMap model) {
User user = userService.getUser(userId);
// 여기서 user는 "user"라는 이름으로 @SessionAttributes를 통해 session에 저장되어 관리될 수 있다.
model.addAttribute("user", user);
return "/jsp/user/getUser.jsp";
}
@RequestMapping("/addDept.do")
public String updateDept(Dept dept, SessionStatus status) throws Exception {
...메소드 내부에서 dept 객체에 대한 처리를 하고,
"dept"라는 이름의 model attribute로 다음 View에 전달됨....
return "/deptList.do";
}
@RequestMapping("/addDept.do")
public String updateDept(@ModelAttribute("updatedDept") Dept dept,
SessionStatus status) throws Exception {
...메소드 내부에서 dept 객체에 대한 처리를 하고,
"updatedDept"라는 이름의 model attribute로 다음 View에 전달됨....
return "/deptList.do";
}
@RequestMapping(params = "param=add")
public String addUser(HttpServletRequest request, @ModelAttribute("user")
User user, BindingResult result, SessionStatus status) throws Exception {
new UserValidator().validate(user, result);
if (result.hasErrors()) {
return "/jsp/user/userForm.jsp";
} else {
...중략...
return "/userList.do";
}
}
@RequestMapping(params = "param=add")
public String addUser(HttpServletRequest request, @ModelAttribute("user")
User user, BindingResult result, SessionStatus status) {
...중략...
userService.addUser(user);
status.setComplete();
return "/userList.do";
}
@RequestMapping(params = "param=addView")
public ModelAndView addUserView() {
ModelAndView mnv = new ModelAndView("/jsp/user/userForm.jsp");
mnv.addObject("user", new User());
return mnv;
}
@RequestMapping("/userList.do")
public Map getUserList() {
List userList = userService.getUserList();
ModelMap map = new ModelMap(userList);//userList가 "userList"라는 이름으로 저장됨.
return map;
}
http://localhost:8080/anyframe-sample/display.do -> 생성된 View name : 'display' http://localhost:8080/anyframe-sample/admin/index.do -> 생성된 View name : 'admin/index'
<bean id="viewNameTranslator"
class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator">
<property name="prefix" value="jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
Model
은 Java-5 부터 추가된 인터페이스이다. 기본적으로 ModelMap과 같은 기능을 제공한다.
Model 인터페이스의 구현클래스에는 BindingAwareModelMap
와 ExtendedModelMap
이 있다.
@RequestMapping("/userList.do")
public Model getUserList() {
List userList = userService.getUserList();
ExtendedModelMap map = new ExtendedModelMap();
map.addAttribute("userList", userList);
return map;
}
@RequestMapping(value = {"/addDept.do", "/updateDept.do" })
public String updateDept(Dept dept, SessionStatus status) throws Exception {
...중략 ...
return "/deptList.do";
}
@RequestMapping("/addView.do")
public void addView(HttpServletResponse response) {
...중략...
// response 직접 처리
}
@RequestMapping("/addView.do")
public void addView() {
...중략...
// View name이 DefaultRequestToViewNameTranslator에 의해서 내부적으로 'addView'로 결정됨.
}
@RequestMapping("/updateUser.do")
public String updateUser(@RequestParam("userId") String userId,
@RequestParam("userGrade") int grade,
@RequestParam("realImageFile") MultipartFile picturefile) {
...중략...
return "/userList.do";
}
org.springframework.web.bind.MissingServletRequestParameterException이 발생한다.
org.springframework.web.bind.MissingServletRequestParameterException:
Required java.lang.String parameter 'deptId' is not present
@RequestMapping("/deleteUser.do")
public String deleteUser(@RequestParam(value="userId", required="false")String userId){
...중략...
}
@Controller
@RequestMapping("/user.do")
public class EditUserController {
// 컨트롤러 메소드에 정의
@ModelAttribute("deptList")
public List populateDeptList() throws Exception {
return deptService.getDeptList();
}
@RequestMapping(params = "param=add")
public String addUser(@ModelAttribute("user")
User user, BindingResult result, SessionStatus status) throws Exception {
...중략...
}
}
@Controller
@RequestMapping("/user.do")
@SessionAttributes(value = {"user", "dept"})
public class EditUserController {
...중략...
}