: jsp 페이지에서 사용할 수 있도록 jsp 컨테이너에 미리 정의된 객체
: import문 없이 자유롭게 사용 가능
: 스크립틀릿 태그나 표현문 태그에 선언이나 객체 생성하지 않고도 직접 호출하여 사용이 가능하다
: jsp 페이지에서 가장 많이 사용되는 기본 내장 객체
: 웹 브라우저에서 서버의 jsp 페이지로 전달하는 정보를 저장
폼 페이지로부터 입력된 데이터를 request.getParameter("");
형태로 받아서 파라미터 값을 가져온다.
"request.jsp 파일"
<body>
<p> request 내장 객체 사용 <br>
: 요청 파라미터 값 출력하기 </p>
<!-- 많은 값을 넘길때는 post / 주소에 붙여서 값 넘길때는 get 방식 -->
<form action="process.jsp" method="post" />
<p> <label> 이름 : <input type="text" name="name"></label>
<p> <input type="submit" name="전송" >
</body>
"process.jsp 파일"
<body>
<p> 서버 쪽 jsp인 request.jsp의 form action 에서 호출된 파일 </p>
<%
String name = request.getParameter("name");
%>
입력된 이름 : <%= name %>
</body>
"request 파일"에서 입력창으로 입력받은 내용을
"process 파일에서 변수타입 변수명 = request.getParameter(" ");
의 형태로 받아 처리한 것을 확인 할 수 있다.
클라이언트가 전송한 정보와 서버정보를 볼 수 있는 메소드 제공한다
<body>
클라이언트IP = <%= request.getRemoteAddr() %> <br>
요청정보길이 = <%= request.getContentLength() %> <br>
요청정보 인코딩 = <%= request.getCharacterEncoding() %> <br>
요청정보 컨텐츠 유형 = <%= request.getContentType() %> <br>
요청정보 프로토콜 = <%= request.getProtocol() %> <br>
요청정보 전송방식 = <%= request.getMethod() %> <br>
요청 URI = <%= request.getRequestURI() %> <br>
콘텐츠 경로 = <%= request.getContextPath() %> <br>
서버이름 = <%= request.getServerName() %> <br>
서버포트 = <%= request.getServerPort() %> <br>
쿼리문 = <%= request.getQueryString() %>
</body>
내 노트북으로 해당 페이지를 로드한 결과가 위와 같이 나온다.
웹 브라우저는 http 헤더에 부가적인 정보를 담아 서버로 전송하며,
HTTP 프로토콜은 헤더 정보에 부가적인 정보를 담고 있다
(브라우저 종류, 운영체제, 운영체제 버전 등)
관련 메소드의 종류는 아래와 같다
<body>
<p> request 내장객체로 모든 http 헤더 정보값 출력하기 </p>
<%
// getHeaderNames : 모든 헤더의 이름 가져오기
Enumeration en = request.getHeaderNames();
// hasMoreElements : 자료가 있으면 true / 없으면 false
while(en.hasMoreElements()) {
String headerName = (String) en.nextElement();
// getHeader : 설정한 name의 헤더 값을 가져온다
String headerValue = request.getHeader(headerName);
// getIntHeaders : 설정한 name의 헤더값을 int로 가져온다
int n = request.getIntHeader("headerName");
// getDateHeader : 설정한 name의 헤더값을 시간으로 가져온다
long lo = request.getDateHeader(headerValue);
%>
헤더 이름 : <%= headerName %> <br>
헤더 값 : <%= headerValue %> <br>
정수로 가져온 헤더값 : <%= n %> <br>
시간으로 가져온 헤더값 : <%= lo %> <br>
<hr>
<%
}
%>
<%
// getHeaders : 설정한 name의 헤더 목록 값을 가져온다
// () 에 헤더 이름을 넣으면 헤더 값이 출력된다.
Enumeration enu = request.getHeaders("accept");
while(enu.hasMoreElements()) {
String headerValuee = (String) enu.nextElement();
out.print(headerValuee + "<br>");
}
%>
<%
// 모든 쿠키 값 가져오기
Cookie[] cArr = request.getCookies();
String cD = cArr[0].getDomain();
out.print(cD);
%>
</body>
폼 태그 사용시 <form action="" method="" scope="">
와 같은 모양에서 scope란 뭘까.
scope
: 속성을 공유할 수 있는 범위
: scope = "page | request | session | application"
: 4종류 중 default는 page이다.
서버에서 웹 브라우저로 응답하는 정보를 처리하기 위해, 객체 타입의 response 내장 객체를 사용하여 사용자의 요청에 응답하게 된다.
페이지 이동 = 리다이렉션(redirection)
사용자가 새로운 페이지를 요청할 때와 같이 페이지를 강제로 이동하는 것
서버는 웹 브라우저에 다른 페이지로 강제 이동하도록 response 내장 객체의 리다이렉션 메소드를 제공하며, 페이지 이동 시에는 문자 인코딩을 알맞게 설정해야 한다.
서버가 웹 브라우저에 응답하는 정보에 헤더를 추가하는 기능을 제공하며, 헤더 정보에는 주로 서버에 대한 정보가 저장되어 있다.
관련 메소드
1. setContentType(String type)
모양 : response.setContentType("text/html; charset=utf-8");
반환 유형 : void
설명 : 웹 브라우저에 응답할 MIME 유형을 설정
2. getContentType()
모양 : response.getContentType()
반환 유형 : String
설명 : 웹 브라우저에 응답할 MIME 유형을 가져온다
3. SetCharacterEncoding(String charset)
모양 : request.setCharacterEncoding("utf-8");
반환 유형 : void
설명 : 웹 브라우저에 응답할 문자 인코딩을 설정한다.
4. getCharacterEncoding()
모양 : response.getCharacterEncoding()
반환 유형 : String
설명 : 웹 브라우저에 응답할 문자 인코딩을 가져온다
5. sendError(int status_code, String message)
모양 : response.sendError(404, "에러입니다");
반환 유형: void
설명 : 오류(코드 및 오류 메시지)를 설정
6. setStatus(int statuscode)
반환 유형 : void
설명 : 응답할 http 코드를 설정
"response.jsp" 파일
<body>
<p> response 내장 객체로 페이지 이동하기</p>
<form action="process.jsp" method="post" scope="page">
<fieldset>
<p> <lable> 아이디 <input type="text" name="id" />
<lable> 비밀번호 <input type="passsword" name="passwd"/>
<input type="submit" value="로그인" >
</fieldset>
</form>
</body>
받아와서 if 문으로 조건 처리 후 맞는 페이지를 호출한다.
"process.jsp" 파일
<body>
<P> 서버쪽 response </P>
<%
// 인코딩 유형은 utf-8로 설정
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pw = request.getParameter("passwd");
if( id.equals("admin") && pw.equals("1234")){
response.sendRedirect("response_success.jsp");
} else{
response.sendRedirect("response_fail.jsp");
}
%>
</body>
"response_success.jsp" 파일
<body>
<h3> 로그인 되었습니다 </h3>
</body>
"response_fail.jsp" 파일
<body>
<h3> 입력하신 아이디 / 비밀번호를 확인해주세요 </h3>
</body>
실행시 가장 먼저 뜨는 화면
만약 관리자 로그인에 성공한다면
실패한다면
<body>
<p> 응답 http 헤더에 정보 추가하기 </p>
<%
response.setHeader("Catche-control", "use_cache");
response.addHeader("contentType", "text/html; charset=utf-8");
response.setDateHeader("date", 1L);
response.setIntHeader("start", 5);
%>
Cache-Control : <%= response.getHeader("Catche-control") %> <br>
contentType : <%= response.getHeader("contentType") %> <br>
date : <%= response.getHeader("date") %> <br>
start : <%= response.getHeader("start") %> <br>
</body>
<body>
<p> 이 페이지는 5초마다 새로고침(갱신) 됩니다 </p>
<%
response.setIntHeader("Refresh", 5);
%>
<p> <%= new java.util.Date() %>
</body>
실행시 저 초 부분이 5초마다 자동으로 갱신되는 것을 확인할 수 있다.
response 내장 객체는 웹 브라우저로 응답하기 위해 MIME 유형, 문자 인코딩, 오류 메시지, 상태 코드 등을 설정하고 가져오는 관련 메소드를 제공한다.
<body>
<p> response 내장 객체로 오류 응답 코드와 오류 메시지 보이기 </p>
<%
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
// 아래 코드로 실행시 pdf 파일로 저장되게끔 한다.
// response.setContentType("application/pdf");
// 고의로 404 에러를 발생시키는 코드
//response.sendError(404, "에러입니다");
%>
문자 인코딩 : <%= response.getCharacterEncoding() %> <br>
콘텐츠 유형 : <%= response.getContentType() %>
</body>
만약 에러발생 코드를 주석에서 풀어준다면 실행시 아래와 같이 출력된다.
웹 브라우저에 데이터를 전송하는 출력 스트림 객체
jsp 컨테이너는 jsp 페이지에 사용되는 모든 표현문 태그와 html, 일반 텍스트 등을 out 내장 객체를 통해 웹 브라우저에 그대로 전달
스크립틀릿 태그에 사용하여 단순히 값을 출력하는 표현문 태그 ( <%= ... %>
) 와 같은 결과를 얻을 수 있다.
java에서는 println
자체가 print + \n
으로 줄바꿈이 포함되어 있었지만, jsp 에서는 그렇지 않다.
<body>
<p> out 객체 사용 </p>
<%
out.println("jsp에서 println은" + "<br>");
out.print("print와 같이 줄바꿈이 되지 않습니다" + "<br><br>");
out.println("오늘 날짜와 시간 : ");
out.print(Calendar.getInstance().getTime().toLocaleString());
%>
</body>
라디오 / 체크박스로 값을 넘겨죽고, 받아서 출력하기
<input type="radio" name="radio_01" value="홍길동"> 홍길동
라디오 타입에서 value를 원래는 radio_input1
이런식으로 넘겨주려 했다. 하지만 받는 곳에서 어떻게 처리해야할 지 모르겠어서 그냥 한글로 넣어버렸다.
그래서 상단에 <% request.setCharacterEncoding("euc-kr"); %>
를 명시해주어 한글 처리가 가능하도록 하였다.
<body>
<p> 체크박스 / 라디오 버튼 만들기 </p>
<form action="out_process.jsp" method="post" scope="page" >
<fieldset>
<legend> 수강 과목 </legend>
<input type="checkbox" name="check_01" value="korean" > 국어
<input type="checkbox" name="check_02" value="english"> 영어
<input type="checkbox" name="check_03" value="math"> 수학
<input type="checkbox" name="check_04" value="sing"> 가창
</fieldset>
<fieldset>
<legend> 상담 진행 교수 신청 </legend>
<input type="radio" name="radio_01" value="홍길동"> 홍길동
<input type="radio" name="radio_01" value="김자바"> 김자바
<input type="radio" name="radio_01" value="이민규"> 이민규
<input type="radio" name="radio_01" value="배두민"> 배두민
</fieldset>
<input type="submit" value="확인" >
</form>
</body>
체크박스에서 선택하지 않으면 값이 null로 들어가게 되고, null 이면 출력이 안되도록 하고 싶었다.
if (check_01 != null) {
check_01 = "국어 ";
} else {
check_01 = "";
}
그래서 값이 들어오면 원하는 단어로 바꾸고, null 이라면 출력되는 게 없도록 하였다.
<body>
<%
request.setCharacterEncoding("euc-kr");
String check_01 = request.getParameter("check_01");
String check_02 = request.getParameter("check_02");
String check_03 = request.getParameter("check_03");
String check_04 = request.getParameter("check_04");
String radio = request.getParameter("radio_01");
if (check_01 != null) {
check_01 = "국어 ";
} else {
check_01 = "";
}
if (check_02 != null) {
check_02 = "영어 ";
} else {
check_02 = "";
}
if (check_03 != null) {
check_03 = "수학 ";
} else {
check_03 = "";
}
if (check_04 != null) {
check_04 = "가창 ";
} else {
check_04 = "";
}
%>
과목 명 : <%= check_01 %><%= check_02 %><%= check_03 %><%= check_04 %> <br>
담당 교수 명 : <%= radio %>
</body>
첫 실행화면
아래와 같이 값 선택 후 전송(확인)버튼을 누르면
원하는 대로 출력되었다