2-3. HTTP 요청과 응답 - 실습

서현우·2022년 5월 11일
0

스프링의정석

목록 보기
3/85

YoilTeller.java

요청 : HttpServletRequest request
응답 : HttpServletResponse response

package com.fastcampus.ch2;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

/* 
 * 1.URL을 입력해서 호출을 하면 톰캣이 HttpServletRequest객체를 만듬
 * 2.브라우저에서 요청한 정보를 HttpServletRequest객체에 담아서 자동으로 main메서드의 매개변수로 넘겨줌
 * 3.public void main(HttpServletRequest request){...}의 request 객체로 받음
 * 4.request객체로 요청정보에 접근 가능
 */

/*
 * 1. 입력
 * 원격프로그램으로 변경
 * 원격 연결 할 클래스 앞에 @Controller, 메서드앞에 @RequestMapping("servlet path")
 * 메서드의 매개변수로 입력값을 받고(HttpServletRequest request)
 * String year = request.getParameter("year")name으로 request객체의 value값을 변수에 저장
 * 
 * 2. 작업
 * 입력받은 값으로 처리
 * 
 * 3. 출력
 * 매서드의 매개변수에 response객체를 추가(HttpServletRequest request, HttpServletResponse response)
 * PrintWriter out = response.getWriter(); //response객체에서 브라우져로의 출력 스트림을 얻는다.
 * out.println("...")으로 브라우져에 출력
 * 출력 내용의 타입과 인코딩을 아래와같이 알려줘야 브라우져가 해석할 수 있음(설정해야 한글 깨짐이 없음)
 * response.setContentType("text/html");
 * response.setCharacterEncoding("utf-8");
 */
@Controller //1. 프로그램 등록
public class YoilTeller {
	@RequestMapping("/getYoil") //2. URL과 main()을 연결
	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); //month는 0부터 시작
		
		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 + "요일입니다.");
	}
}

RequestInfo.java

자주 쓰이는 request메서드

package com.fastcampus.ch2;

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

import javax.servlet.http.HttpServletRequest;

@Controller
public class RequestInfo {
    @RequestMapping("/requestInfo")
    public void main(HttpServletRequest request) {
        System.out.println("request.getCharacterEncoding()="+request.getCharacterEncoding()); // 요청 내용의 인코딩
        System.out.println("request.getContentLength()="+request.getContentLength());  // 요청 내용의 길이. 알수 없을 때는 -1
        System.out.println("request.getContentType()="+request.getContentType()); // 요청 내용의 타입. 알 수 없을 때는 null

        System.out.println("request.getMethod()="+request.getMethod());      // 요청 방법
        System.out.println("request.getProtocol()="+request.getProtocol());  // 프로토콜의 종류와 버젼 HTTP/1.1
        System.out.println("request.getScheme()="+request.getScheme());      // 프로토콜

        System.out.println("request.getServerName()="+request.getServerName()); // 서버 이름 또는 ip주소
        System.out.println("request.getServerPort()="+request.getServerPort()); // 서버 포트
        System.out.println("request.getRequestURL()="+request.getRequestURL()); // 요청 URL
        System.out.println("request.getRequestURI()="+request.getRequestURI()); // 요청 URI

        System.out.println("request.getContextPath()="+request.getContextPath()); // context path
        System.out.println("request.getServletPath()="+request.getServletPath()); // servlet path
        System.out.println("request.getQueryString()="+request.getQueryString()); // 쿼리 스트링

        System.out.println("request.getLocalName()="+request.getLocalName()); // 로컬 이름
        System.out.println("request.getLocalPort()="+request.getLocalPort()); // 로컬 포트

        System.out.println("request.getRemoteAddr()="+request.getRemoteAddr()); // 원격 ip주소
        System.out.println("request.getRemoteHost()="+request.getRemoteHost()); // 원격 호스트 또는 ip주소
        System.out.println("request.getRemotePort()="+request.getRemotePort()); // 원격 포트
    
    /*
    request.getCharacterEncoding()=null //요청 내용의 인코딩
	request.getContentLength()=-1 		//요청 내용의 길이. 알 수 없을때는 -1
	request.getContentType()=null 		//요청 내용의 타입. 알 수 없을때는 null
	request.getMethod()=GET				//요청 방법
	request.getProtocol()=HTTP/1.1		//프로토콜의 종류와 버전
	request.getScheme()=http			//프로토콜
	request.getServerName()=localhost	//서버 이름 또는 ip주소
	request.getServerPort()=8080		//서버 포트
	request.getRequestURL()=http://localhost:8080/ch2/requestInfo //요청 URL
	request.getRequestURI()=/ch2/requestInfo //요청 URI
	request.getContextPath()=/ch2			 //context path 
											 //(/ch2 : context root(Project root라 보면 됨))
	request.getServletPath()=/requestInfo    //servlet path
	request.getQueryString()=null			 //쿼리 스트링 : 값을 전달 할 때 사용
	request.getLocalName()=0:0:0:0:0:0:0:1   //로컬 이름
	request.getLocalPort()=8080				 //로컬 포트
	request.getRemoteAddr()=0:0:0:0:0:0:0:1  //원격 ip주소
	request.getRemoteHost()=0:0:0:0:0:0:0:1  //원격 호스트 또는 ip주소
	request.getRemotePort()=10350			 //원격 포트
	
	getQueryString() = ?year=2021&month=10&day=1 //name=value꼴
	request.getParameter(name) //매개변수로 name
	*/
    }
}
profile
안녕하세요!!

0개의 댓글