티스토리 뷰
GET으로 보내고 POST로 보내고 어떻게 받아서 사용할지 한번 알아보자!
<!-- calculator.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- GET 요청 -->
<form action="calculator" method="get">
<input type="submit">
</form>
</body>
</html>
/* Calculator.java */
package com.newlecture.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calculator")
public class Calculator extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* GET 요청 받기 */
if (req.getMethod().equals("GET")){
System.out.println("GET 요청");
}
/* POST 요청 받기 */
else if(req.getMethod().equals("POST")){
System.out.println("POST 요청");
}
//super.service(req, resp);
}
}
이렇게 calculator.html과 Calculator.java 파일을 만들고 확인해보자.
html에서 보내는 방식을 조건문을 통해서 GET, POST를 구분하는 방식이다.
주의해야 할 점은!!!!!!!
html에서는 get, post 소문자로 보냈지만, java에서 읽을 때는 GET, POST 대문자로 읽어야 한다!! 꼬꼬꼬꼮!
그러면 이번엔 html에서 POST로 보내보자!
<!-- calculator.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- GET 요청 -->
<form action="calculator" method="post">
<input type="submit">
</form>
</body>
</html>
이번엔 POST가 정상적으로 출력되는 것을 확인할 수 있다.
그리고 다른 방식으로 GET, POST를 요청하는 방법을 보자!
package com.newlecture.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calculator")
public class Calculator extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* GET 요청 받기 */
if (req.getMethod().equals("GET")){
System.out.println("GET 요청");
}
/* POST 요청 받기 */
else if(req.getMethod().equals("POST")){
System.out.println("POST 요청");
}
/* 서비스 함수 호출 */
super.service(req, resp);
}
}
주석 처리되어있던 service 서비스 함수를 사용해보자! 그리고 어떻게 실행되는지 결과를 통해 보겠다.
콘솔 출력 창에 정상적으로 POST 요청이라는 문구가 보이고,
웹 창에는 405 에러가 표시된다. 405는 URL은 있지만 메서드가 뭐가 문제가 있다는 말이다.
즉, 서비스 함수를 사용해서 GET이나 POST를 호출하기 위해서는 함수를 만들어줘야 한다.
doGet() 또는 doPOST() 함수를 한번 만들어보자!
자 이렇게 doGet, doPost를 코드로 만들어보자.
package com.newlecture.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calculator")
public class Calculator extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* GET 요청 받기 */
if (req.getMethod().equals("GET")){
System.out.println("GET 요청");
}
/* POST 요청 받기 */
else if(req.getMethod().equals("POST")){
System.out.println("POST 요청");
}
super.service(req, resp);
}
/*service 메소드로 만들어 */
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("GET 매소드 요청");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST 메소드 요청");
}
}
GET 메서드랑 POST 메소드랑 저렇게 구현하고 실행.
자 service함수 안에 있는 "GET 요청"도 출력되고, doPost함수에 "Get 메서드 요청"도 잘 출력되는 걸 확인할 수 있다.
그렇다면 가장 효율 적인 코드는?
/* Calculator.java get, post 가장 효율적인 코드 */
package com.newlecture.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calculator")
public class Calculator extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("GET 매소드 요청");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("POST 메소드 요청");
}
}
이렇게 사용하는 게 get이나 post를 따로 받아서 구현할 때 가장 효율적인 코드이다.
만약에 get이랑 post를 동시에 받아서 쓰려면 처음의 코드처럼 서비스 함수 내에 구현하는 것이 바람직할 듯하다.
'Servlet JSP' 카테고리의 다른 글
JSP란? (0) | 2021.04.26 |
---|---|
서블릿으로 합치기(계산기 진짜 완성) (0) | 2021.04.26 |
클리어(쿠키삭제)추가_계산기 만들기(완성2) (0) | 2021.04.26 |
동적 페이지 구현_계산기 만들기3(완성) (0) | 2021.04.25 |
처음이자 마지막으로 동적인 페이지 서블릿으로 직접 만들기_계산기 만들기2 (0) | 2021.04.25 |