[Spring] HTTP 요청과 응답
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>");
}
}
Author And Source
이 문제에 관하여([Spring] HTTP 요청과 응답), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sdj3261/Spring-HTTP-요청과-응답저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)