[주석문]
1. JSP 주석문 <%-- 주석 내용 --%>
1) jsp 주석문은 브라우저로 전달되지 않음
2. HTML 주석문 <!-- 주석 내용 -->
1) HTML 주석문은 브라우저로 전달됨
3. 각자의 용도에 맞는 주석문을 사용하여야 한다.
빨간 동그라미 친 부분이 JSP 주석문으로 브라우저로 전달되지 않았다.
[page 지시자]
<%@ page 속성="값" ... %>
1. language 속성 : jsp 에서 사용할 언어를 설정
1) default : java , 자바외에는 없으므로 현재는 의미가 없긴 하다.
2. extends 속성 : 기본적으로 서블릿 컨테이너에서 알아서 처리한다.
3. import 속성 : 자바 프로그램과 같이 사용하는 외부 클래스를 import 해주어야 함
<%@ page import="java.util.Calendar" %>
import 할 클래스 앞에 ctrl+space 를 누르면 이클립스에서 자동 import 해준다.
4. session 속성 : session의 사용 여부를 설정 (default : true)
1) session = "false"로 하면 접속할 때마다 새로운 session key가 할당됨
5. buffer 속성 : 출력 버퍼 크기
1) default : 8KB
6. autoFlush 속성
1) default : true (버퍼가 꽉차면 자동으로 버퍼를 비우도록 함)
2) false 로 설정하면 버퍼가 꽉찰 경우 에러가 발생됨
3) 버퍼가 꽉차기 전에 flush()를 사용하여 버퍼를 비우도록 하여야 함
7. isThreadSafe 속성 : 스레드 동기화 설정(true)
8. info 속성 : jsp 페이지에 대한 간략한 설명을 기록
9. errorPage 속성 : jsp 페이지에서 에러 발생 시 보여줄 에러페이지를 설정
1) <%@ page errorPage="error.jsp" %>
10. isErrorPage 속성 : 현재의 페이지가 에러 페이지 인지 아닌지를 설정
에러가 뜨기 전의 본 페이지 코드(07_divide)
error 화면을 보여주는 코드
11. contentType 속성 : jsp 페이지의 MIME 타입을 결정
1) 서버가 브라우저에 전송할 데이터의 유형을 헤더에 포함하여 미리 알려줌
2) default : "text/html"
3) 서블릿의 response.setContentType("text/html");에 대응
4) jsp 출력에 대한 한글 처리 : charset=UTF-8 추가
5) <%@ page contentType="text/html; charset=UTF-8" %>
12. pageEncoding 속성 : jsp 페이지의 인코딩 속성
1) pageEncoding="UTF-8"
13. trimDriectiveWhiteSapces 속성
1) true : jsp 스크립트릿 부분이 브라우저로 전송될 때는 빈공간으로 대체되며, 이를 없애준다.
[include 지시자]
<%@ include file="URL" %>
1. 현재 페이지에 다른 HTML 문서나 JSP 페이지의 내용을 삽입할 때 사용
2. file 속성에 기술할 파일을 jsp 파일 안으로 포함시킨다.
메인페이지
서브페이지
footer (공통부분)
[JSP 내장 객체와 액션태그]
1. JSP 내장 객체
1) JSP 에서 프로그래머가 객체를 생성하는 과정 없이 바로 사용할 수 있는 객체
2) JSP가 서블릿으로 변환될 때 JSP 컨테이너가 객체를 자동으로 생성해준다.
2. 9개의 내장 객체
내장 객체의 분류 | 내장 객체 | hello_jsp.java 파일 |
입출력 관련 객체 | request response out |
HttpServletRequest HttpServletResponse JspWriter |
서블릿 관련 객체 | page config |
Object ServletConfig |
외부 환경 정보를 제공하는 객체 |
session application pageContext |
HttpSession ServletContext PageContext |
예외 관련 객체 | exception | JSP 페이지가 에러 페이지로 지정되면 만들어짐 |
[out 내장 객체]
1. 서버에서 클라이언트로 열려 있는 출력 스트림
2. JSP의 실행결과를 클라이언트의 브라우저로 출력할 때 가장 효과적으로 사용할 수 있는 객체
3. 서블릿 클래스가 만들어질 때 자동으로 만들어짐
1) JspWriter로 선언
javax.servlet.jsp.JspWriter out = null;
out = pageContext.getOut();
4. out 객체를 사용하여 브라우저로 출력
out.print("Hello JSP");
[request 내장 객체]
1. 웹 서비스를 위한 클라이언트와 웹 서버 사이의 요청에 관련한 정보를 저장
메소드 | 설명 |
getContextPath() | JSP 페이지가 속한 웹 애플리케이션의 컨텍스트 패스를 구한다. |
getMethod() | 요청방식이 GET 방식인지 POST 방식인지를 알려준다. |
getRequestURL() | 요청 URL 을 구한다. |
getRequestURI() | 요청 URL에서 쿼리 스트링을 제외한 부분을 구한다. |
getQueryString() | 요청 URL 다음에 오는 쿼리 스트링을 구한다. |
getSession(flag) | 요청 관련된 세션 객체를 구한다. |
getRequestDispatcher(path) | 지정 로컬 URL에 대한 RequestDispatcher 객체를 구한다. |
getRemoteHost() | 요청한 호스트의 완전한 이름을 구한다. |
getRemoteAddr() | 요청한 호스트의 네트워크 주소를 구한다. |
getRemoteUser() | 요청한 사용자의 이름을 구한다. |
getSession() | 세션 객체를 구한다. |
getServerName() | 서버의 이름을 구한다. |
getProtocol() | 사용 중인 프로토콜을 알려준다. |
색깔 친 칸은 자주 쓰는 메소드.
request 메소드로 브라우저와 웹 서버 정보 알아내기
2. request 요청 파라미터 관련 메소드
메소드 | 설명 |
getParameter(String name) | 지정한 이름의 파라미터를 구한다. 지정한 이름의 파라미터가 여러 개 있을 경우에는 첫 번째 파라미터의 값을 구한다. |
getParameterNames() | 모든 파라미터의 이름을 구한다. |
getParameterValues(String name) | 지정한 이름의 파라미터가 여러 개 있을 경우 사용하며 지정한 이름을 가진 파라미터의 모든 값을 String[]로 구한다. |
요청 파라미터 얻기, Form
요청 파라미터 얻기 결과, result
[response 기본객체]
1. 웹 브라우저에 보내는 응답 정보
1) 헤더 정보 입력
2) 리다이렉트 하기
메소드 | 설명 |
addDateHeader (String name, long date) |
name 헤더에 date를 추가 |
addHeader (String name, String value) |
name 헤더에 value 를 값으로 추가 |
addIntHeader (String name, int value) |
name 헤더에 정수 값 value를 추가 |
setDateHeader (String name, long date) |
name 헤더의 값을 date로 지정 |
setHeader (String name, String value) |
name 헤더의 값을 value로 지정 |
setIntHeader (String name, int value) |
name 헤더의 값을 정수 값 value로 지정 |
containsHeader (String name) |
이름이 name인 헤더를 포함하고 있으면 true, 그렇지 않으면 false를 반환 |
2. 웹 브라우저 캐시 제어를 위한 응답 헤더 입력
1) 캐시
(1) 웹 브라우저가 변경된 내역을 출력하지 않는 이유 중 하나가, 웹 브라우저가 서버가 생성한 결과를 출력하지
않고 캐시에 저장된 데이터를 출력하기 때문
(2) HTTP는 특수한 응답 헤더를 통해서 웹 브라우저가 응답 결과를 캐시할 것인지에 대한 여부를 설정
응답 헤더 | 설명 |
Cache-Control | HTTP 1.1에서 지원 ‘no-cache’ : 웹 브라우저는 응답 결과를 캐시하지 않음 ‘no-store’ : 응답 결과가 캐시 저장소 자체에 보관되지 않음 |
Pragma | HTTP 1.0에서 지원 ‘no-cache’ : 응답 결과를 캐시에 저장하지 않음 |
Expires | HTTP 1.0에서 지원 응답 결과의 만료일을 지정. 만료일을 현재 시간보다 이전으로 설정 -> 저장안됨. |
3. 웹 브라우저 캐시 제어를 위한 응답 헤더 입력
1) 게시글 쓰기 후 게시글 목록보기를 할 때, 브라우저가 cache 된 내용을 출력하면 추가한 글이 보이지 않을 수 있음
<%
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragmal", "no-cache");
response.setHeader("Expires", 1L);
%>
4. 리다이렉트를 이용해서 페이지 이동하기
1) 리다이렉트에 대한 인코딩 : java.netURLEncoder 클래스에서 제공
(1) URLEncoder.encode() 메소드
response.sendRedirect를 통해 로드북 홈페이지로 이동
로그인 과정을 통한 redirect 이해, 로그인 메인화면
id=pinksung, pwd= 1234이면 메인 창으로 redirect, 그렇지 않으면 로그인창으로 redirect
로그인 결과 창
[JSP에서 다른 페이지로 이동하기 위한 방법]
1. 리다이렉트 방식 : response.sendRedirect("destination");
1) 브라우저의 url 이 유지되지 않고 새로운 url로 변경이 되면서 이동하는 방법
2) request 와 response 객체는 유지되지 않음
2. 포워드(forward) 방식
RequestDispatcher dispatcher = request.getRequestDispatcher("05_forwardResult.jsp");
dispatcher.forward(request, response);
1) 서버상의 페이지 이동으로 브라우저는 알지 못하며 url 도 변겨오디지 않음
2) 기존의 request와 response 는 유지
3) url은 처음에 요청된 url을 사용하며, 포워딩된 url은 나타나지 않음
4) 포워딩 하면서 새로운 데이터를 전달하려면 request 객체의 setAttribute() 메소드를 이용
예: request.setAttribute("age", 20);
5) 포워딩된 JSP에서 데이터를 이용하려면 request 객체의 getAttribute() 메소드를 사용
예 : int age = (Integer)request.getAttribute("age");
forward 방식으로 JSP 이동 1
dispatcher 로 05_forwardResult로 forward 함.
결과, request.getAttribute로 forward 된 JSP에서 name 값 사용
[applicaition 내장객체]
1. 하나의 웹 애플리케이션을 관리하고 웹 애플리케이션 안에서의 자원을 공유
2. 저장방법
1) application.setAttribute("name", "application man");
name = 이름, application man = 값
2) request 객체와 같은 방법을 사용하지만, 하나의 프로젝트 내의 모든 JSP 페이지에서 공통적으로 사용가능
(1) request 내장 객체의 저장방법
request.setAttribute("name", "request man"); / 이번 페이지에서 사용한 정보를 다음 페이지에서 사용
3. 웹 어플리케이션 초기화 파라미터
1) WEB-INF/web.xml 파일에 <context-param> 태그를 사용하여 추가
<context-param>
<description> 파라미터 설명(O) </description>
<param-name> 파라미터 이름 </param-name>
<param-value> 파라미터 값 </param-value>
<context-param>
2) 웹 어플리케이션 초기화 관련 메소드
메소드 | 리턴 타입 | 설명 |
getInitParameter (String name) |
String | 이름이 name인 웹 어플리케이션 초기화 파라미터 값을 읽어온다. 존재하지 않으면 null을 반환 |
getInitParameterNames() | Enumeration<String> | 웹 어플리케이션 초기화 파라미터 이름 목록을 반환 |
3) 서버 정보 읽어오기 : 웹 컨테이너에 대한 정보를 읽어오는 메소드 제공
메소드 | 리턴 타입 | 설명 |
getServerInfo() | String | 서버 정보를 구한다 |
getMajorVersion() | String | 서버가 지원하는 서블릿 규약의 메이저 버전을 반환 |
getMinorVersion() | String | 서버가 지원하는 서블릿 규약의 마이너 버전을 반환 |
4) 로그 메시지 기록하기 : localhost.yyyy-mm-dd.log
메소드 | 리턴 타입 | 설명 |
log(String msg) | void | msg를 로그로 남긴다. |
log(String msg, Throwable throwable | void | msg를 로그로 남긴다. 예외정보도 함께 로그에 기록 |
(1) JSP가 기록하는 로그 : ".jsp:" 라는 문장이 추가
5) 웹 어플리케이션 자원 구하기
메소드 | 리턴 타입 | 설명 |
getRealPath (String path) |
String | 웹 어플리케이션 내에서 지정한 경로에 해당하는 자원의 시스템 상에서의 경로를 반환 |
getResource (String path) |
URL | 웹 어플리케이션 내에서 지정한 경로에 해당하는 자원에 접근할 수 있는 URL 객체를 반환 |
getResourceAsStream (String path) |
InputStream | 웹 어플리케이션 내에서 지정한 경로에 해당하는 자원으로부터의 데이터를 읽어올 수 있는 InputStream을 반환 |
-> 웹 어플리케이션 폴더 경로를 사용 :경로가 변경되더라도 변경없이 접근 가능
웹 애플리케이션 경로 구하기