[Spring] HTTP 요청과 응답

8720 단어 JavahttpSpringJava
package com.fastcampus.ch2;

import java.util.Calendar;

public class YoilTeller {
	public static void main(String[] args) {
		String year = args[0];
		String month = args[1];
		String day = args[2];
		
		int yyyy = Integer.parseInt(year);
		int mm = Integer.parseInt(month);
		int dd = Integer.parseInt(day);
		
		//2. 작업
		Calendar cal = Calendar.getInstance();
		cal.set(yyyy, mm-1, dd);
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
		char yoil = " 일월화수목금토".charAt(dayOfWeek);
		
		//3. 출력
		System.out.println(year + "년" + month + "월 " + day + "일은 ");
		System.out.println(yoil + "요일 입니다");
	}

}

우리는 콘솔창을 통해 매개변수를 이용하여 콘솔에
java com.fastcampus.ch2.YoilTeller 2012 11 6 이라고 입력하면 값이 year과 month day에 2012, 11 , 6이 각각 전달 된다.

이 처럼 HTTP와 같은 웹 페이지 상에서는 정보를 전달하기 위해HttpServletRequest를 통해 데이터를 전달할 수 있다.

2.HttpServletRequest의 메서드
getScheme() - http , https
getServerName() - IP주소
getServerPort() - 서버의 Port
getContextPath() - 프로젝트 폴더이름
getServletPath() - 현재 서블릿 이름
getRequestURI() - 현재 Request 클래스 경로

위에꺼를 모두 포함한 값이 getRequestURL()
getQueryString() - 매개변수 정보 출력

@Controller
public class RequestInfo {
    @RequestMapping("/requestInfo")
    //    public static void main(String[] args) {
    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()); // 원격 포트
    }

getQueryString()에서 웹페이지 끝에 ?year=2021&month=10&day=1
라는 데이터를 붙여 GET 방식으로 데이터를 전달할 수 있는데
String year = request.getParameter("year");
과 같은식으로 데이터를 뽑을 수 있다.
String year = args[0]; 와 동일

http://localhost:8080/ch2/getYoil?year=2016&month=11&day=16

package com.fastcampus.ch2;

import java.util.Calendar;

import javax.servlet.http.HttpServletRequest;

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

@Controller
public class YoilTellerController {
	//public static void main(String[] args) {
	@RequestMapping("/getYoil")
	public void main(HttpServletRequest request) {
		//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);
		
		//2. 작업
		Calendar cal = Calendar.getInstance();
		cal.set(yyyy, mm-1, dd);
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
		char yoil = " 일월화수목금토".charAt(dayOfWeek);
		
		//3. 출력
		System.out.println(year + "년" + month + "월 " + day + "일은 ");
		System.out.println(yoil + "요일 입니다");
	}

}

동일한 결과가 나오는 것을 확인할 수 있다.
System안에서 print를 했기 때문에 웹에서는 404에러가 나오지만
다음과 같이 바꾸면 브라우저에서 표시가 가능하다.
HttpserverletResponse를 매개변수로 추가해주고 response 객체의 출력 스트림 정보를 얻은 후 컨텐츠 타입을 명시하고 출력해준다.

@Controller
public class YoilTellerController {
	//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);
		
		//2. 작업
		Calendar cal = Calendar.getInstance();
		cal.set(yyyy, mm-1, dd);
		int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
		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 + "요일 입니다");
	}

}

동적리소스는 실행할때 마다 결과가 변함
2가지 주사위 이미지를 랜덤으로 표시해주는 기능

정적리소스 - 이미지, js , css ,html
동적리소스 - 프로그램 , 스트리밍

package com.fastcampus.ch2;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

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

@Controller // ctrl+shift+o 는 자동 import 
public class TwoDice {
	@RequestMapping("/rollDice")
	public void main(HttpServletResponse response) throws IOException {
		int idx1 = (int) (Math.random()*6)+1;
		int idx2 = (int) (Math.random()*6)+1;
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("</body>");
		out.println("<img src='resources/img/dice" + idx1 + ".jpg'>");
		out.println("<img src='resources/img/dice" + idx2 + ".jpg'>");
		out.println("</body>");
		out.println("</html>");
	}

}

좋은 웹페이지 즐겨찾기