본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 55일차(주석문, 지시자, JSP 내장객체(out, request, response, redirect, application)

[주석문]

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을 반환

-> 웹 어플리케이션 폴더 경로를 사용 :경로가 변경되더라도 변경없이 접근 가능

웹 애플리케이션 경로 구하기