날아라쩡글이의 블로그입니다.

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

중앙 HTA (2106기) story/spring java framwork story

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

날아라쩡글이 2021. 12. 29. 19:59
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<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"
        }
    • a태그를 클릭하고, get방식으로 요청할 때 get방식으로 전달이 된다. 
  • 직원 정보 저장 요청하기 
    • form.jap 
      • <form method="post" action="inser.do">
        <button type="submit">등록</button>
        </form>
    • 요청 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<String> 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이라고 한다. 

반응형

'중앙 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