[JSP] 용케 JSP 까지 왔군요 휴먼..!

Beom J·2021년 6월 13일
0

Java

목록 보기
3/8

JSP 시작

정신놓고 어찌저찌 하라는대로 쫓아갔더니, 어느새 진도는 훅 빠져있고 JSP 까지 왔다.
음 뭐랄까...

나: 아 이제 조금 java에 익숙해진것 같..?
쌤: 자! 이제 JSP를 해봅시다!
나: (결국 java 기반이니까 여태 하던거랑 뭐 얼마나 다르겠엉)
쌤: 머릿속에 있는 html, css, javasctript 전부 꺼내오세요~~
내 머리: (...? 그거 벌써 버렸는데? )

한줄 요약 > 망했다는 거지요!

초딩때부터... 하루 전날 친 시험 내용도 빠르게 메모리 정리하던 내 뇌는 당황을 했어요.
다시 새로 배우는 기분으로 돌아가볼까요?

out.println();

기본 자바에서 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 를 통해 객체를 별도 생성해주지 않아도 JSP 에서 바로 사용 가능한 객체
  • 컨테이너가 jsp 를 서블릿으로 변환할 때 자동으로 객체가 생성되기 때문!

내장 객체는 말 그대로 JSP 안에 기본적으로 내장되어 있는 객체라, 따로 선언이나 만들어 줄 필요 없이 (new 없이) 바로 사용이 가능!

JSP 기본 객체 종류

  1. request
  2. response
  3. out
  4. page
  5. config
  6. appication
  7. pageContext
  8. exeception
  9. session

1. request

  • 생성 : 클라이언트 요청 시
  • 소멸 : 요청에 대한 처리 완료 시
  • 사용 범위 : 요청을 처리하기 위한 하나의 스레드

클라이언트가 요청한 정보에 대한 객체!
웹브라우저에 웹사이트 주소를 입력하면, 웹 브라우저가 해당 웹 서버에 연결한 후 요청 정보를 전송하는데, 여기서 이 요청 정보를 제공하는 것이 바로 request 기본 객체이다.
(이름을 아주 기깔나게 잘 지었다!)

기본 제공 기능

  • 클라이언트(웹 브라우저)와 관련된 정보 읽기 기능
  • 서버와 관련된 정보 읽기 기능
  • 클라이언트가 전송한 요청 파라미터 읽기 기능
  • 클라리언트가 전송한 요청 헤어 읽기 기능
  • 클라이언트가 전송한 쿠키 읽기 기능
  • 속성 처리 기능

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") 을 넣어줘야 한글이 깨지지 않는다!

2. response

  • 생성 : 클라이언트 요청 시
  • 소멸 : 요청에 대한 처리 완료 시
  • 사용 범위 : 요청을 처리하기 위한 하나의 스레드

클라이언트에게 회신을 보내주는 응답 객체! request 객체와 반대의 기능을 수행한다.
request는 웹 브라우저가 전송한 요청 정보를 담고 있다면, response는 웹 브라우저에 보내는 응답 정보를 담는다.

기본 제공 기능

  • 헤더 정보 입력
  • 리다이렉트 하기

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를 리턴한다
등등등...

3. out

  • 생성 : 클라이언트 요청 시
  • 소멸 : 요청에 대한 처리 완료 시
  • 사용 범위 : 요청을 처리하기 위한 하나의 스레드

출력 스트림으로써, 사용자의 웹 브라우저로 출력시키기 위한 객체!
버퍼 관련 메서드와 출력 관련 메서드로 구성되어 있다.

out 주요 메서드 설명
getBufferSize() output buffer의 크기를 바이트로 알려준다.
getremaining() 남아 있는 버퍼의 크기 중 사용 가능한 비율을 알려준다.
clearBuffer() 버퍼에 쌓인 내용을 모두 삭제 (전송하지 않음)
flush() 버퍼에 있는 내용을 모두 전송하고 비움
close() 출력 버퍼에 저장된 내용을 모두 전송하고 스트림을 닫음
println(content) content의 내용을 newline과 함께 출력한다.
print(content) content의 내용을 출력한다.
출력되는 내용들을 모두 버퍼에 담아두었다가 한번에 보내는 객체로, 스크립트릿<% %> 안에서 HTML 코드를 섞지 않고 바로 출력할 수 있게 해준다.

주의 할 점!
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>

실제 출력은
안녕 하세요.

안녕하세요.
가 된다.

profile
네..? 개발자요...? 아....직 일걸요...?

0개의 댓글