정신놓고 어찌저찌 하라는대로 쫓아갔더니, 어느새 진도는 훅 빠져있고 JSP 까지 왔다.
음 뭐랄까...
나: 아 이제 조금 java에 익숙해진것 같..?
쌤: 자! 이제 JSP를 해봅시다!
나: (결국 java 기반이니까 여태 하던거랑 뭐 얼마나 다르겠엉)
쌤: 머릿속에 있는 html, css, javasctript 전부 꺼내오세요~~
내 머리: (...? 그거 벌써 버렸는데? )
한줄 요약 > 망했다는 거지요!
초딩때부터... 하루 전날 친 시험 내용도 빠르게 메모리 정리하던 내 뇌는 당황을 했어요.
다시 새로 배우는 기분으로 돌아가볼까요?
기본 자바에서 System.out.println();
을 카톡만큼 자주 썼던 기억.
System.out.println 이 말그대로 System! 콘솔에 출력을 시켜주는 디버깅용 메소드라면
out.println 은 html을 받아서 웹창에 출력시켜주는 친구!
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>Insert title here</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello JSP");
out.println("</body>");
out.println("</html>");
톰캣과 연결해서 실행시켜 보면, 웹창에 반가운지겨운 Hello JSP 가 출력된다!
어? 그런데 왜 out 의 시작이 대문자 Out 이 아니라 소문자 out 이죠?
클래스는 항상 대문자로 시작하는 것 아니었나요?!
음~!
그건 바로 JSP 의 기본 내장 객체를 활용하기 때문이란다~~
내장 객체는 말 그대로 JSP 안에 기본적으로 내장되어 있는 객체라, 따로 선언이나 만들어 줄 필요 없이 (new 없이) 바로 사용이 가능!
- request
- response
- out
- page
- config
- appication
- pageContext
- exeception
- session
- 생성 : 클라이언트 요청 시
- 소멸 : 요청에 대한 처리 완료 시
- 사용 범위 : 요청을 처리하기 위한 하나의 스레드
클라이언트가 요청한 정보에 대한 객체!
웹브라우저에 웹사이트 주소를 입력하면, 웹 브라우저가 해당 웹 서버에 연결한 후 요청 정보를 전송하는데, 여기서 이 요청 정보를 제공하는 것이 바로 request 기본 객체이다.
(이름을 아주 기깔나게 잘 지었다!)
기본 제공 기능
request 주요 메서드 | 리턴 타입 | 설명 |
getRemoteAddr() | String | 웹 서버에 연결한 클라이언트의 IP 주소를 구한다. |
getParameter() | String | name(변수이름, 파라미터)의 값을 가져옴 |
getParameterValues() | String[] | name의 값이 1개 이상일 때 값을 모두 가져옴 |
getParameterNames() | Enumeration(String) | 모든 파라미터 name을 반환 (값이 아닌 변수 이름) |
getContentType() | String | 클라이언트가 요칭 정보를 전송할 때 사용한 컨텐츠의 타입을 구한다 |
그 외에도 이번에 배운 request 메소드 중에서 쌤이 강조했던 메소드로는
request.setCharacterEncoding()
메소드가 있는데,
post 방식일때 jsp -> jsp 로 데이터가 넘어로는 경우
jsp 파일 상단에 request.setCharacterEncoding("utf-8")
을 넣어줘야 한글이 깨지지 않는다!
클라이언트에게 회신을 보내주는 응답 객체! request 객체와 반대의 기능을 수행한다.
request는 웹 브라우저가 전송한 요청 정보를 담고 있다면, response는 웹 브라우저에 보내는 응답 정보를 담는다.
기본 제공 기능
response 주요 메서드 | 설명 |
addDateHeader(String name , long date) | name 헤더에 date를 추가한다. date는 1970년 1월 1일 이후 흘러간 시간을 1/1000초 단위로 나타낸다 |
addHeader(String name , String value) | name 헤더에 value를 값으로 추가한다 |
addlntHeader(String name , int value) | name 헤더에 정수 값 value를 추가한다 |
setDateHeader(String name , long date) | name 헤더의 값을 date로 지정한다 date는 1970년 1월 1일 이후 흘러간시간을 1/1000초 단위로 나타낸다 |
setHeader(String name , String value) | name 헤더의 값을 value로 지정한다 |
setlntHeader(String name , int value) | name 헤더의 값을 정수 값 value로 지정한다 |
containsHeader(String name) | 이름이 name인 헤더를 포함하고 있을 경우 true를, 그렇지 않을 경우 false를 리턴한다 |
출력 스트림으로써, 사용자의 웹 브라우저로 출력시키기 위한 객체!
버퍼 관련 메서드와 출력 관련 메서드로 구성되어 있다.
out 주요 메서드 | 설명 |
getBufferSize() | output buffer의 크기를 바이트로 알려준다. |
getremaining() | 남아 있는 버퍼의 크기 중 사용 가능한 비율을 알려준다. |
clearBuffer() | 버퍼에 쌓인 내용을 모두 삭제 (전송하지 않음) |
flush() | 버퍼에 있는 내용을 모두 전송하고 비움 |
close() | 출력 버퍼에 저장된 내용을 모두 전송하고 스트림을 닫음 |
println(content) | content의 내용을 newline과 함께 출력한다. |
print(content) | content의 내용을 출력한다. |
주의 할 점!
java 에서 System.out.prinln 은 개행문자가 포함되어 있어서 콘솔 출력시 줄바꿈이 일어났지만,
out.println은 막상 출력해보면 줄바꿈이 일어나지 않는다!
<br/>
이 아니라 html 코드 상의 줄바꿈이 적용되기 때문!
그래서 아래 코드는
<%
out.println("안녕");
out.println("하세요.");
%>
<br/>
<%
out.print("안녕");
out.print("하세요.");
%>
이렇게 아래 html 문서로 변환되고
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
안녕
하세요.
<br/>
안녕하세요.
</body>
</html>
실제 출력은
안녕 하세요.
와
안녕하세요.
가 된다.