HTTP 요청과 응답

태민·2022년 11월 25일
0
post-thumbnail

Http 요청과 응답에 대해 간단하게 설명하면

WAS가 웹으로부터 어떠한 요청을 받으면 HttpServletRequest객체를 생성해서 그 안에 요청정보를 저장하고 요청을 받은 후 값을 만들어서 응답을 돌려줄 HttpServletResponse객체를 만들어서 요청에 대한 답을 돌려주게 된다

즉 요청-> 어떤 요청인지 Request객체에 담아서 ~~~ 한 요청이야 라고 던지주면 ->
요청받은 값을 처리한다음 -> Response객체를 만들어 요청에 대한 값을 담아서 다시 던져준다

HttpServletRequest는 한마디로 요청정보를 서블릿에게 전달하기 위해 존재하는 것

Servlet은 HttpServletResponse객체에 Content Type, 응답코드, 응답 메시지등을
모두 담아서 전달해준다

URL은 HttpServletRequest객체를 만들게되는데 이때 웹으로부터 요청받은 정보를 담고
main() 메서드에게전달한다

main() 매개변수를 HttpServletRequest request라고 적어주게되면 Tomcat은 HttpServletRequest에 있는 객체를 만들어서 URL이 가지고있는 정보를 매개변수에게 전달한다

QueryString()

?year=2021&month=10&day=1
여기서 ? 는 값을 전달할 때 사용되는데 물음표 뒤에 데이터를 같이 보낼 수 있다

QueryString 에서는 name과 value를 이용해서 값을전달하는데
여러개의 값을 한번에 전달할 때는 & 구분자를 사용하면 된다

String year = request.getParameter("year");
String month = reqeust.getParameter("month");
String day = request.getParameter("day");

위 코드는 말 그대로 요청하는 것이다 year month day 값을 전부 요청하는 코드

getParameter("year"); 는 year에 해당하는 값을 출력하는 것

그러면 year가 가지고있는 value값 "2021"이 출력된다
QueryString 값은 기본적으로 전부 문자열이므로
출력될 값을 숫자형태로 만들기위해서는 int yy=integer.parseint를 사용해서 숫자형태로 바꿔주면된다

로컬에서 원격호출을 하는 방법은 HttpServletResponse를 사용하게 되는데

@Controller 적어주고 @RequestMapping URL 연결을 해서 getYoil이라고 적어주면

주소창에 http://localhost:8080/getYoil?year=2021&month=10&day=1 이라는 값을 입력해주면

Console 창에 2021년10월1일은 금요일입니다. 라고 나오게 된다

System.out이 아닌 브라우저에서 결과가 출력되게 하려면 response객체를 매개변수로 써주면되고

HttpServletResponse을 사용하면 톰켓에서 요청받은 것을 담을 객체를 알아서 만들어준다
그 덕에 브라우저에서 결과를 볼 수 있게 되는 것이다

아래는 예시 코드 전문이다

package com.fastcampus.ch2;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;

//년월일을 입력하면 요일을 알려주는 프로그램
@Controller
public class YoilTeller {//http://localhost:8080/getYoil?year=2021&month=10&day=1
    // public static void main(String[] args) {
    @RequestMapping("/getYoil")
    public void main(HttpServletRequest request, HttpServletResponse response) throws IOException { // 톰캣에게 요청하는 객체와 받을 객체를 선언해주는 것
        //1. 입력
        String year = request.getParameter("year");
        String month = request.getParameter("month");
        String day = request.getParameter("day");


        //2. 작업
        int yyyy = Integer.parseInt(year);
        int mm = Integer.parseInt(month);
        int dd = Integer.parseInt(day);

        Calendar cal= Calendar.getInstance();
        cal.set(yyyy, mm-1, dd -1);

        int dayOfweek = cal.get(Calendar.DAY_OF_WEEK); //1:일요일 2:월요일 ...
        char yoil= "일월화수목금토".charAt(dayOfweek);

        //3. 출력
        response.setContentType("text/html"); //어떤 형태로 받을 것인지 작성 텍스트형태로 받음
        response.setCharacterEncoding("utf-8"); // 한글로 깨지지 않고 잘 나오기 위해 작성
        PrintWriter out = response.getWriter();// response객체에서 브라우저로의 출력 스트링을 얻는다.
        out.println(year + "년" + month + "월" + day + "일은 " );
        out.println(yoil+ "요일입니다.");
    }
}

간단하지만 어렵고 아직 이해가 전부되지는 않지만 공부하면서
계속해서 수정해나가고 나의 것으로 만들려고 노력해야겠다

profile
몰입이 즐거운 개발자

0개의 댓글