Spring 쿼리스트링 값, form값 읽어오기

Spring 쿼리스트링 값, form값 읽어오기

728x90

요청 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 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";

}

//전체 직원 목록 조회 //보여주기 위해서 list.jsp에 Model model매개변수에 담아서 전달해준다. spring이 list에 담아보낼때 ui.model에 담아서 보낸다. //employee/list.jsp에서 표현할 데이터를 Model객체에 저장한다. //model에 담은걸 속성에 넣는다. ui로 표현할 데이터를 객체에 저장한다. 매개변수의 값을 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";

}

//기본자료형의 값은 요청파라미터, Model은 뷰페이지에 담을 때 사용한다. 요청이 GET이냐 POST방식이냐에 따라서 getMapping과 postMapping으로 사용할 수 있다.

직원 정보 등록 폼 요청하기(GET) 요청 URL http://localhost:8080/emp/insert.do 요청핸들러 메소드 @GetMapping("/insert.do")

public String form(){

return "employee/form.jsp"

} a태그를 클릭하고, get방식으로 요청할 때 get방식으로 전달이 된다.

직원 정보 저장 요청하기 form.jap

등록

요청 URL http://localhost:8080/emp/insert.do 요청핸들러 메소드 @postMapping("/insert.do")

public String insert(){

return "redirect:list.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()); 요청핸들러 메소드의 매개변수에 사용자 정의 클래스 타입의 변수를 선언하면 스프링은 폼입력값을 담는 Form객체로 인지한다. form의 값이 많을 경우 List skill처럼 배열에 담아오면 된다.

요청방식에 따라 다르게 연결, 분류된다.

요청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이라고 한다.

728x90

from http://lionpower.tistory.com/290 by ccl(A) rewrite - 2021-12-29 20:01:33