JSP 뿐만 아니라 Spring 또는 Spring Boot 를 쓸 때 서버에서 데이터를 request하고 다시 클라이언트로 response해주기 위해서는 데이터 요청이 필요하다.
HTTP Method에는 Get Post Put Delet가 있다. 그러면 이 메소드를 통해 데이터 요청하는 방식은 어떤것이 있는지 알아보자.
1. form submit요청
form submit요청은 html파일에서 form태그내에 있는 내용을 통째로 서버에 전달해주는 것을 말한다. form태그는 Get요청과 Post요청만 사용할 수 있는데 Get요청의 경우 params(파라미터) 데이터로 요청하며 Post의 경우는 body, JSON으로 요청한다. 하지만 대부분 Post요청을 이용하고 Get요청은 사용하지 않는다.
form태그는 html에서 지원해주는 태그인데, 안에 action과 method를 넣을 수 있다. action은 요청 메시지를 입력하는 곳이며 method는 Get, Post 와 같은 HTTP Method를 입력하는 곳이다.
form태그 내에서 input태그라던지 button 태그를 많이 이용하는데, input태그 내에서 name속성을 이용해서 key값으로 value값을 가져올 수 있다.
```
<form action="/signup" method="post">
<table>
<tr>
<th>이름</th>
<td><input type="text" name="name"></td>
</tr>
<tr>
<th>이메일</th>
<td><input type="email" name="email"></td>
</tr>
<tr>
<th>사용자 이름</th>
<td><input type="text" name="username"></td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="password"></td>
</tr>
</table>
<button type="submit">가입하기</button>
<button type="reset">재작성</button>
</form>
```
이런식으로 작성하고 input태그에 값을 넣고 submit을 눌러보면 값이 들어오게된다. 서버에 값이 들어오는지를 확인하기 위해서는 서블릿에서 doGet 메소드를 만들어서 확인해보면 된다.
```
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getParameter("name"));
System.out.println(request.getParameter("email"));
System.out.println(request.getParameter("username"));
System.out.println(request.getParameter("password"));
}
```
request내에 getParameter를 통해 form태그로 전달한 key값으로 어떤 내용을 입력했는지 불러올 수 있다.
또한 postman에서도 확인할 수 있는데 postman에 보면 params라는 것이 있고, 그 밑에는 key 와 value를 입력할 수 있다.
key는 내가 form에서 name요소에 작성한 것들을 쓰고 value는 서버에 전달하고 싶은 내용을 써주면 된다.
"http://localhost:8000/signup?name=홍길동 &email=aaa@gmail.com&username=aaaa&password=1234"
이런식으로 작성하면 홍길동, aaa@gmail.com, aaaa, 1234가 넘어오게 된다.
?뒤에서부터가 params값들이고 name=홍길동 이부분이 key와 value가 된다. &는 전달하고 싶은 데이터가 더 있을 경우 추가해주는 식이 된다.
하지만 위에서는 get요청으로 파라미터를 보냈지만, 우리는 post형식으로 사용할 것이다.
이유는 user의 회원가입단계인데, 이 정보를 주소창에 노출하게 되면 보안상 문제가되기 때문에 post요청으로 하는것이다.
그렇다면 post요청은 어떤것으로 보내야하느냐 인데 일단 Body로 보내는 방법이 있다.
postman에서 pararms로 보냈다면, 옆에 태그에 Body라고 있을것이다. Body에서 x-www-form-urlencoded라고 있는데, 여기도 params와 마찬가지로 key와 value에 입력해주면된다.
params와의 차이는 역시 위에서 언급했듯이 주소창에 이 정보들이 드러나지 않는다는 것이다.
입력하고 send하게 되면 아래와 같이 콘솔에 날라올 것이다.
????¸¸???
aaa@gmail.com
aaa
1234
위에보면 문제가 post요청은 한글이 깨지는 모습을 볼 수 있다. 이는 페이지에서 가입하기를 누른 후 클라이언트 console창(F12)를 누르고 네트워크 -> Headers를 보면 contentType이 UTF-8로 인코딩이 안되어서 이러한 문제가 생긴걸 알 수 있다. 이는 클라이언트에서 인코딩을 해줄 수 없기 때문에, request가 들어올 때 서버에서 UTF-8로 인코딩해서 보내주면 된다.
```
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("회원가입 요청");
request.setCharacterEncoding("UTF-8");
System.out.println(request.getParameter("name"));
System.out.println(request.getParameter("email"));
System.out.println(request.getParameter("username"));
System.out.println(request.getParameter("password"));
}
```
이렇게하고 Send를 보내면 한글이 잘 들어오는것을 볼 수 있다.
'JSP' 카테고리의 다른 글
JSP Filter 2 (0) | 2022.12.21 |
---|---|
JSP Filter (0) | 2022.12.21 |
JSP 요청과 경로 (0) | 2022.12.14 |
JSP와 Servlet 사용 및 파라미터 활용 (0) | 2022.12.12 |
Jsp 요청과 CRUD (0) | 2022.12.12 |