날아라쩡글이의 블로그입니다.
Spring 쿼리스트링 값, form값 읽어오기 본문
중앙 HTA (2106기) story/spring java framwork story
Spring 쿼리스트링 값, form값 읽어오기
날아라쩡글이 2021. 12. 29. 19:59728x90
반응형
요청 URL
http:// localhost:8080/emp/detail.do?id=102
요청 핸들러 메소드
@RequestMapping("/detail.do")
public String detail(){ return "employees/detail.jsp"};
id값이 필요하다.
이제는 jsp에 id=""처럼 넣지 않고, 요청핸들러메소드에서 id가 필요시 detail(int id)처럼 매개변수선언하면 spring이 자동으로 요청파라미터값을 확인하고 해당하는 변수이름 값에 값을 저장한다.
2개면 detail(int id, int cpno)처럼 요청파라미터의 값을 획득할 수 있다.
똑같은 이름의 변수를 선언하면
RequestMappingHandlerMapping이 Arguments: [{}]
핸들러 메소드에서 매개변수를 확인하고 요청파라미터 확인, 변수의 이름을 확인하고, 그 값을 자동형변환해서 값을 넣어놓는다.
객체를 보낼 때
- @RequestMapping(path = "/list.do")
public String list(Model model) {
//전체 직원 목록 조회
List<Employee> employees = employeeService.getAllEmployees();
//보여주기 위해서 list.jsp에 Model model매개변수에 담아서 전달해준다. spring이 list에 담아보낼때 ui.model에 담아서 보낸다.
//employee/list.jsp에서 표현할 데이터를 Model객체에 저장한다.
//model에 담은걸 속성에 넣는다. ui로 표현할 데이터를 객체에 저장한다.
model.addAttribute("employees", employees);
return "/employee/list.jsp";
} - 매개변수의 값을 Model로 설정하고, 응답객체로 보낼때 model의 값으로 입력 후 보내준다.
- 꺼낼때는 "employees"에서 지정한 값으로 꺼낸다.
쿼리스트링으로 전달된 요청파라미터 값
- 요청핸들러 메소드에 요청파라미터 이름과 같은 이름의 매개변수를 선언하면 값을 획득할 수 있다.
- @GetMapping("/detail.do")
public String detail(int id, Model model) { //기본자료형의 값은 요청파라미터, Model은 뷰페이지에 담을 때 사용한다.
System.out.println("조회할 사원아이디 : " +id);
Employee employee = employeeService.getEmployeeDetailById(id);
model.addAttribute("employee", employee);
return "employee/detail.jsp";
} - 요청이 GET이냐 POST방식이냐에 따라서 getMapping과 postMapping으로 사용할 수 있다.
- 직원 정보 등록 폼 요청하기(GET)
- 요청 URL
- http://localhost:8080/emp/insert.do
- 요청핸들러 메소드
- @GetMapping("/insert.do")
public String form(){
return "employee/form.jsp"
}
- @GetMapping("/insert.do")
- a태그를 클릭하고, get방식으로 요청할 때 get방식으로 전달이 된다.
- 요청 URL
- 직원 정보 저장 요청하기
- form.jap
- <form method="post" action="inser.do">
<button type="submit">등록</button>
</form>
- <form method="post" action="inser.do">
- 요청 URL
- http://localhost:8080/emp/insert.do
- 요청핸들러 메소드
- @postMapping("/insert.do")
public String insert(){
return "redirect:list.do"
}
- @postMapping("/insert.do")
- @PostMapping("/insert.do")
public String save(EmployeeSaveForm employeeForm) { //많으면 입력하기 힘들다.form패키지 추가함
//Employee employee = new Employee();
//BeanUtils.copyProperties(employeeForm, employee);
//beanUtils로 알아서 spring이 알아서 복사한다.
employeeService.addNewEmployee(employeeForm.toEmployee());
//메소드로 정의하면 너무 자동화가 되어있지 않기 때문에 이름을 결합해서 작성할 수 있다.
return "redirect:list.do";
} - 폼입력데이터가 아래와 같은 형식으로 전달된다.
- firstName=김&lastName=유신
- 처리하는 방법은 3가지가 존재한다.
- 1. 매개변수에 담는방법
public String save(String firstname, String lastName){
}
엄청난 폼 데이터는 입력하기 힘들다. - 2. 객체를 만들어서 객체에 담아오고 BeanUtils의 메소드 copyProperties를 사용하는 방법
WEB-INF/jsp/employee/form.jsp의 폼 입력값을 저장하기 위한 객체애 대한 클래스를 설정한다. EmployeeSaveForm.java를 만들고, 폼요소의 이름과 같은 이름을 가진 멤버변수로 구성된 클래스를 작성한다.
기본생성자, getter/setter메소드를 포함해야한다.
현재는 문자열밖에 없지만, 나중에 int와 Data를 편하게 작성하면 된다. 나중에 문자열로 들어간다.
객체로 만들어서 담아오면- 나중에 유효성 체크에 관련해서 작성할 수 있다.
- 객체에 담아오고, BeanUtils.copyProperties(employeeForm, employee) 실행한다.
자동이 되어있기 때문에 내가 원하는 문자열을 결합하는 방식을 이용할 수 없다. - //Employee employee = new Employee();
- //BeanUtils.copyProperties(employeeForm, employee);
- //employeeService.addNewEmployee(employee);
- 3. 객체에 담아오고, 그대로 사용하는 방법
- 1. EmployeeSaveForm 객체를 생성한다.
- 2. EmployeeSaveForm 객체의 멤버변수 타입과 이름을 조사한다.
- 3. 요청객체의 요청파라미터에 동일한 이름의 요청파라미터가 있으면 값을 조회해서 EmployeeSaveForm객체의 setter메소드를 호출해서 값을 저장한다.
- 요청객체를 기준으로 모든 변수들을 확인한다.
- 4. 모든 멤버변수에 대한 처리가 완료되면 요청 핸들러 메소드를 실행하고, 매개변수 인자로 요청파라미터값이 저장된 EmployeeSaveForm객체를 전달한다.
- 그래서 여기에 response가 존재하지 않는 것이다.
- Command객체, form객체라고 부른다.
- employeeService.addNewEmployee(employeeForm.toEmployee());
- 1. 매개변수에 담는방법
- 요청핸들러 메소드의 매개변수에 사용자 정의 클래스 타입의 변수를 선언하면 스프링은 폼입력값을 담는 Form객체로 인지한다.
- form의 값이 많을 경우 List<String> skill처럼 배열에 담아오면 된다.
- form.jap
- 요청방식에 따라 다르게 연결, 분류된다.
요청URL을 여러개로 만들 필요가 없다.
rest방식의 요청과 응답 설계하기
요청내용 | 요청방식 | 요청URL | 요청data | 응답data |
직원조회 | GET | /hr/employees/ | 없음 | 조회데이터 |
직원등록 | POST | /hr/employees/ | 입력데이터 | 조회데이터 |
직원삭제 | DELETE | /hr/employees/10 | 없음 | 없음 |
직원정보변경 | PUT | /hr/employees/11 | 변경데이터 | 없음 |
직원조회 | GET | /hr/employees/12 | 없음 | 조회데이터 |
요청방식에 따라서 요청내용이 바뀐다.
요청URL하나로 5개의 요청과 mapping시킬 수 있다.
RESTful이라고 한다.
반응형
'중앙 HTA (2106기) story > spring java framwork story' 카테고리의 다른 글
myBatis(SQL mapperFrameWork) (0) | 2021.12.30 |
---|---|
어노테이션 설정하기 (0) | 2021.12.29 |
web.xml, spring Container (0) | 2021.12.29 |
DB Access 방법 (CRUD) (0) | 2021.12.28 |
느슨한 결합, DB 연결 (0) | 2021.12.27 |
Comments