요청 : 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 + "요일입니다.");
}
}
자주 쓰이는 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
*/
}
}