java 인터프리터가 클래스에 있는 main() 메서드를 호출
접속할 컴퓨터의 IP주소를 브라우저에 입력해 원격 프로그램 실행
@Controller // 1. 프로그램 등록
public class Hello {
@RequestMapping("/hello") // 2. URL과 프로그램 (main())을 연결
public void main(){
System.out.println("Hello");
}
}
static 메서드로 생성해도 상관없지만 static 메서드는 인스턴스 변수를 사용할 수 없어 인스턴스 메서드를 사용하는게 보편적이다.
URL과 연결만 되어있다면 접근제어자와 상관없이 웹에서 호출가능 (Spring에서 Reflect API를 사용해 객체를 만들기 때문!)
1. STS의 프로젝트명을 우클릭해 EXPORT 클릭
2. WAR 파일 선택 후 Finish
3. AWS의 가상 컴퓨터의 Tomcat\webapps 안에 WAR파일을 붙여넣고 톰캣 실행
상태 라인 : 요청이 어떻게 처리되었는지 알려준다
[응답코드]
2xx - Success
3xx - Redirect(다른 URL로 요청하라는 의미)
4xx - Client Error
5xx - Server Error
헤더 : 부가적 정보 전달
바디 : 응답내용
***헤더의 길이는 가변적이라서 헤더와 바디는 한 줄의 띄워 구분한다
GET | POST |
---|---|
리소스를 얻을 때 사용 | 리소스를 전달할 때 사용 |
쿼리스트링을 통해 데이터 전달(소용량) | body를 통해 데이터 전달(대용량) |
데이터 공유에 유리 | 보안에 유리 |
보안에 취약 | 데이터 공유에 불리 |
검색엔진에서 검색단어 전송 | 게시판에 글쓰기, 로그인... |
HttpServletRequest 메서드원격 프로그램을 브라우저로 호출하면 Tomcat이
HttpServletRequest
객체를 생성하고 요청 정보를 객체에 담아 매핑된 메서드에 넘겨줌
-> 이때 객체에 정보를 전달하기 위해 QueryString 이용!!
@Controller
public class YoilTeller {
@RequestMapping("/getYoil")
public void main(HttpServletRequest request) {
//1.입력
String year = request.getParameter("year");
String month = request.getParameter("month");
String day = request.getParameter("day");
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(1);
//3.출력
System.out.println(year+"년"+month+"월"+day+"일은 ");
System.out.println(yoil + "요일입니다.");
//localhost:8080/ch2/getYoil?year=2023&month=5&day=12 로 이동
[실행결과]
2023년5월12일은
일요일입니다.
}
}
💡 여기서 Query없이 localhost:8080/ch2/getYoil
로 접속하거나 읽고자 하는 Parameter가 존재하지 않는 경우 에러 발생
@Controller
public class YoilTeller {
@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");
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(1);
//3.출력
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
//response 객체에서 브라우저로의 출력 스트림 얻기
PrintWriter out = response.getWriter();
out.println(year+"년"+month+"월"+day+"일은 ");
out.println(yoil + "요일입니다. ");
//http://localhost:8080/ch2/getYoil?year=2023&month=5&day=12 접속
[실행결과]
2023년5월12일은 일요일입니다.
}
}
💡 setContentType, setCharacterEncoding 메서드로 타입을 지정, 인코딩 방법을 알려줘야 브라우저에서 제대로 출력됨
1. 프로젝트의 src/main/webapp/resources 안에 이미지 파일 넣기
2. html의 img 태그를 이용해 <img src='resources/[파일 경로]'>를
response의 outputstream으로 출력
Email server : 이메일 서비스를 제공하는 서버
File server : 파일을 제공하는 서버
Web server : 웹과 관련된 모든 서비스를 제공하는 서버
IP주소:포트번호
형식으로 클라이언트가 요청서버에 프로그램을 설치하고 클라이언트가 프로그램을 사용가능하도록 서비스하는 서버 (ex. Tomcat)
💡 프로그램을 업데이트할 때 수월 (클라이언트의 프로그램을 각각 업데이트 vs 서버의 프로그램만 업데이트)
파일 종류 | 저장하는 데이터 | 쓰기 | 읽기 |
---|---|---|---|
바이너리 | 문자, 숫자 | 문자->문자, 숫자->숫자 | 문자->문자, 숫자->숫자 |
텍스트 | 문자 | 문자->문자, 숫자->문자 | 문자->문자, |
STS 실행시 응답없음 오류