본문 바로가기
백엔드/Spring Framework

Web Application(1) / 화면에서 자바로 데이터 전송(1. Form Data) / 요청 url 매핑 방식

by maverick11471 2024. 7. 15.

[과제]

 1. NameTelController 에서 '데이터 전송방식' 구현 (form submit 방식)

 2. NAME_TEL 테이블 생성

 3. name-tel.jsp 생성 (요청 url 매핑 방식 구현)

 

 


1. Spring Application 구동

WAS 구동 시 web.xml 읽은 후 ServletContainer 구동
 - web.xml: 서블릿의 생명주기 관리하는 설정이 담겨있는 설정파일.
            이 설정파일을 읽어서 서블릿등을 생성하는 컨테이너가 하나 생성
 -> 컨테이너: 설정파일을 저장하고 있는 상자. 어떤 동작이 일어났을 때 저장되어 있는 설정파일로 무언가를 생성해주는 상자
    - context-param: servlet-container가 구동되면서 전달할 파라미터
                     스프링 컨테이너 설정파일을 지정해서
                     servlet-contianer가 구동되면서 
                     스프링 부모컨테이너를 바로 구동할 수 있도록 한다.
                     context-param으로 지정되어 있는 root-context.xml을 읽어 
                     부모 스프링 컨테이너를 구동

[결론]
 - root-context(부모 스프링 컨테이너): Model(비즈니스 로직, DB 커넥션 관련) 설정
 - servelet-context(자식 스프링 컨테이너): View-Controller(화면단과 정적파일들) 관련 설정을 주로함.

 

2. 화면에서 자바로 데이터 전송방식 (가. form submit 방식 이용)

가. form submit: form 태그의 입력된 input 데이터를 바로 요청 url로 전송
                 각 input의 name 속성이 키로 지정되어 입력된 값을 매핑되어 전송

 나. ajax 를 이용한 비동기 통신 전송: ajax 비동기 통신할 때 data 속성으로 원하는 데이터 전송
                                   contentType 속성에서 전송될 데이터 형식을 지정
                                   json, html, text 등 지정 가능

 다. multipartFormData: new FormData()로 객체를 생성해서 전송하는 방식. 파일전송 시 주로 이 방식
                       혹은 form 태그의 enctype 속성으로 FormData 객체 전송 가능

 

3. 요청 url 매핑 방식

가. get 방식: body 생성 안됨. 
 			 url 표출 됨
             보안상 중요하지 않은 데이터 사용 / 단순 조회 / 속도 빠름
             ★ 쿼리스트링 방식: 요청주소? key=value&key2=value2....
             ★ ★ 화면 이동시 사용
나. post 방식: body 생성. 
 			 url 표출 안됨
             보안상 중요한 내용.
             ★ ★ 기능을 발휘해야 할 때(로그인, 회원가입 등) 사용
다. put, delet 방식: Spring Framework에서도 사용 가능하나, Spring Boot에서 배워 볼 예정

 

[참고] [(free-detail.do)Request Method : get 방식]

 

4. database - table 생성("NAME_TEL")

 

5. views - name-tel.jsp 생성

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
// prefix 지정
// 이 선언문을 통해 JSP 파일에서 JSTL(Java Standard Tag Library) 태그를 사용할 수 있습니다.
// JSTL: jsp를 동적으로 표현 가능
<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<html>
<head>
// name-tel 타이틀 지정
    <title>name-tel</title>

// style 지정
    <style>
        div > p {
            display: inline-block;
            margin-left: 10px;
        }
    </style>
</head>
<body>
// /name-tel.do 는 name-tel.jsp 파일을 시행한다는 뜻
// method = post, get, put, delete
    <form action="/name-tel.do" method="post">
        <input type="text" name="name">
        <input type="text" name="tel">
        <input type="submit" value="전송">
    </form>
</body>
</html>

 

 

6. java 폴더 - NameTelController.java 생성

 - (주의) get, post, request 방법을 사용할 때 다른 것들은 주석처리 해야한다.

@Controller
public class NameTelController {
    private NameTelService nameTelService;

    @Autowired
    public NameTelController(NameTelService nameTelService) {
        this.nameTelService = nameTelService;
    }
    // 요청 방식(get, post)에 따라 다른 메소드를 실행시킬 수 있도록 지정할 수 있다.
    // 요청 url 매핑: @RequestMapping, @GetMapping, @PostMapping에 지정된 url로 요청이 발생할 경우
    //               매핑되어 있는 메소드를 실행시킨다.
    @RequestMapping(value = "/name-tel.do", method = RequestMethod.GET) /*==> @GetMapping("/name-tel.do")*/
    public String nameTelView() {
        System.out.println("get방식 동작");
        return "name-tel";
    }

    @RequestMapping(value = "/name-tel.do", method = RequestMethod.POST) /*==> @PostMapping("/name-tel.do")*/
    public String nameTelPost() {
        System.out.println("post방식 동작");
        return "name-tel";
    }

//     GET/POST 방식 모두 지원하는 url 매핑
    @RequestMapping("/name-tel.do")
    public String nameTelGetPost() {
        System.out.println("GET/POST 방식 모두 동작");
        return "name-tel";
    }

 

 - get 방식

  * 주소창에 '쿼리스트링' 방식으로 접근

  * 콘솔창에 get 방식 동작

 

- post 방식

 * 주소창에 입력은 무조건 GET 방식으로 입력해야 한다.

    이유: 일반적으로 POST 요청은 브라우저의 주소창을 통해 직접 입력할 수 없기 때문에. 

                POST 요청은 server 로 전송할 때 사용한다.

 

- request 방식

  * 콘솔창 : GET/POST 방식 모두 동작