# Http 파라미터 처리
@RequestParam 어노테이션을 이용한 요청 파라미터 구하기
get / post로 요청을 넘겨 받으면
@RequesMapping("/test8")
// 여러 옵션 지정 가능 required, defaultValue
public ModelAndView test8(@RequestParam("id", required=false, defaultValue="") String id){
ModelAndView vew = new ModelAndView();
view.setViewName("test/test8");
view.addObject("userID",id);
return view;
}
Command 객체를 이용해 폼 전송 처리하기
다음과 같이 input이 많아지면 @RequestParam으로 하나씩 처리하기 불편함, 유지보수 단점
<form method="post">
<input type="text" name="email"/>
<input type="text" name="name"/>
<input type="tex"t name="pw"/>
...
</form>
파라미터의 이름과 동일한 프러퍼티를 가진 클래스를 작성
public class Member{
private String email;
private String name;
private String pw;
// getter, setter
...
}
그러면 자동으로 Mapping하여 가져올 수 있음
@RequestMapping(value="/join", method=RequestMethod.POST)
public ModelAndView test9(Member member){
// 서비스 호출 및 데이터 확보
...
return new ModelAndView("bbs/join").addObject("member", member);
}
Command 객체는 자동으로 VIew의 Model로 바로 등록함(view.addObject 필요 없음)
커맨드 객체를 JSP에서 사용할 때는 객체명 중 첫글자만 소문자로 바꾸어 사용
타입 자동 변환 기능 숫자는 int(long), double로 변환, true/false는 boolean 으로 변환
Collection 처리: HTML에서 같은 이름의 input 엘리먼트가 구성
Command 객체를 사용하여 List로 처리
<input type="text" name="names" value="1">
<input type="text" name="names" value="2">
<input type="text" name="names" value="3">
private List<String> names; // 자동 맵핑됨
# 실습 Path Variable 처리, Command 객체 처리
Post 방식과 Get 방식 처리
package kr.co.acomp.hello.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import kr.co.acomp.hello.service.BbsService;
import kr.co.acomp.hello.vo.Article;
@Controller
@RequestMapping("/bbs") // 클래스 레벨 맵핑
public class BbsController {
@Autowired // DI 자동 주입
private BbsService bbsService;
// @PostMapping
@RequestMapping(value="/write", method=RequestMethod.POST) // 메소드 레벨 맵핑
public String dowrite() {
bbsService.registArticle(new Article());
System.out.println("post request...");
return "write_ok";
}
// @GetMapping
@RequestMapping("/write") // 메소드 레벨 맵핑
public String write() {
bbsService.registArticle(new Article());
System.out.println("get request...");
return "write_ok";
}
}
Path variable 활용하기
package kr.co.acomp.hello.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import kr.co.acomp.hello.service.BbsService;
import kr.co.acomp.hello.vo.Article;
@Controller
@RequestMapping("/bbs") // 클래스 레벨 맵핑
public class BbsController {
@Autowired // DI 자동 주입
private BbsService bbsService;
// 글 상세 보기
@RequestMapping("/{articleId}")
public String viewDetail(@PathVariable String articleId) {
System.out.println("글번호는: " + articleId);
return "write_ok";
}
...
}
요청 준비
package kr.co.acomp.hello.dao;
import org.springframework.stereotype.Repository;
import kr.co.acomp.hello.vo.Article;
@Repository // Repository Annotation
public class ArticleDAO {
// 디버깅 용
public void insertArticle(Article article) {
System.out.println(article);
}
}
package kr.co.acomp.hello.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import kr.co.acomp.hello.service.BbsService;
import kr.co.acomp.hello.vo.Article;
@Controller
@RequestMapping("/bbs") // 클래스 레벨 맵핑
public class BbsController {
@Autowired // DI 자동 주입
private BbsService bbsService;
...
// @PostMapping
@RequestMapping(value="/write", method=RequestMethod.POST) // 메소드 레벨 맵핑
public String dowrite(Article article) {
bbsService.registArticle(article);
System.out.println("post request...");
return "write_ok";
}
...
}
전송시 콘솔창에 정상적으로 값이 들어옴
ModelAndView 처리
// @PostMapping
@RequestMapping(value="/write", method=RequestMethod.POST)
public ModelAndView dowrite(Article article) {
bbsService.registArticle(article);
System.out.println("post request...");
return new ModelAndView("write_ok").addObject("article",article);
}
write_ok.jsp 파일 수정
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>hello</h1>
<ul>
<li>${aticle.articleId}</li>
<li>${aticle.author}</li>
<li>${aticle.title}</li>
<li>${aticle.content}</li>
</ul>
</body>
</html>
'Archived(Programming) > Spring #2(기초)' 카테고리의 다른 글
Static file 처리와 FileUpload (0) | 2020.03.12 |
---|---|
Restful API (0) | 2020.03.12 |
@Controller (0) | 2020.03.11 |
Spring MVC (0) | 2020.03.11 |
Layered Architecture & @Component (4) | 2020.03.10 |