금요일, 5월 17
Shadow

#017 필터(Filter)

미분류
01. 필터란 무엇인가 ? HTTP 요청과 응듭을 변경할수 있는 재 사용가능한 코드 이다. 필터는 객체의 형태로 존재하며 클라이언트로 부터 오는 요청과 최정자원 사이에 위치하여 클라이언트의 요청 정보를 알맞게 변경할수 있으며, 또한 필터는 최종 자원과 클라이언트 가능 응답 사이에 위치하여 최종자원의 요청결과를 알맞게 변경할수 있다. 자원이 받게 되는 요청 정보는 클라이언트와 자원 사이에 존재하는 필어에 의해 변경된 요청 정보가 되며, 도한 클라이언트가 보게 되는 응답 정보는 클라이언트와 자원사이에 존재하는 필터에 의해 변경된 응답 정보가 된다. 클라이언트와 자원사이에 한개의 필터만 존재할수 있는 것은 아니며, 여러개의 필터가 모여 하나의 필터 체인을 형성하게 된다. 여러개의 필터가 모여서 하나의 체인을 형성할떄 첫번째 필터가 변경하는 요청 정보는 클라이언트의 요청 정보가 되지만, 체인의 두번째 필터가 변경하는 요청정보는 첫번째 필터를 통해 변경된 요청정보가 된다. 즉, 요청 정보는 변경에 변경을 거듭하게 되는 것이다. 02. 필터의 구현 2.1 필터 인터페이스 Fileter 인터페이스는 다음과 같은 메서드를 선언하고 있으며, 필터 기능을 제공할 클래스느 ㄴ필터 인터페이스를 알맞게 구현해 주어야 한다. public void init(FilterConfig filterConfig) throwxception : 필터를 초기화 할때 호출 된다. public void doFilter(ServletRequest request, ServletResponse response, Filter Ch...

#016 커스텀 태그 만들기

미분류
때에 따라서 JSP 액션 태그나 JSTL 태그만으로는 뭔가 아쉬울 때가 있다. 예를 들어 로그인에 성공헀을때 세션의 member 속성에 Member 자바빈 객체를 저장한다고 해보자 이때 로그인 여부를 판단할때에는 다음과 같은 JSTL 태그를 사용할수 있다. <c:if test="${! empty sessionScope.member}"> 로그인한상태 </c:if> <c:if test="${empty sessionScope.member}"> 로그인 하지 않은 상태 </c:if> 하지만 다음과 같이 원하는 기능에 알맞은 태그를 사용할수 있다면 어떨가? <ct:login> 로그인한 상태 </ct:login> <ct:login value="false"> 로그인하지 않은 상태 </ct:login> 위와 같은 특정한 상황에 알맞은 태그가 존재한다면 코드를 더욱 간결하게 작성할수 있을 것이다. 또한 더 중요한 것은 코드의 의미가 명확해 진다는 것이다. JSP는 이처럼 JSTL이나 기본적인 JSP 액션 태그로 표현할수 없는 경우 스크립트 코드와 EL 코드를 혼합해서 사용하는 대신 또 다른 태그를 만들어서 사용할수 있도록 지원하고 있는데 이렇게 원하는 목적에 맞게 작성된 태그를 커스텀 태그라고 부른다. 그리고 커스텀 태그를 모아 놓은 것이 커스텀 태그 라이브러리라 한다. 1.1 커스텀 태그의 장점 ㅇ 재사용성 향상 : 한번 작성한 커스텀 태그는 어떤 JSP 컨테이너에서든지 사용이 가능하다. ㅇ 쉽...

#015 표준 태그 라이브러리(JSTL)

미분류
JSP는 개발자가 직접 <jsp:include>와 같은 태그를 작성할수있는 기능을 제공하는데 이를 태그라고 한다. 이것들을 모아서 JSTL이라는 규약을 만들었다. 1. JSTL이란 1.1 JSTL이 제공하는 태그의 종류 코어 : 변수지원, 흐름제어, URL처리 --> c xml : XML 코어, 흐름제어, XML 변호나 --> x 국제화 : 지역, 메시지 형식, 숫자 및 날짜 형식 --> fmt 데이터베이스 : SQL --> sql 함수 : 컬렉션 처리, String 커리 --> fn 02. 코어 태그 변수지원 set : JSP에서 사용될 변수를 설정한다. remove : 설정한 변수를 제거한다. 흐름제어 if : 조건에 따라 내부 코드를 수행한다. choose : 다중 조건을 처리할때 사용된다. forEach : 컬렉션이나 Map의 각 항목을 처리할때 사용된다. forTokens: 구분자로 분리된 각각의 토큰을 처리할때 사용된다. URL처리 import : URL을 사용하여 다른 자원의 결과를 삽입힌다. redirect : 지정한 경로로 리다이렉트 한다. url : URL을 사용하여 다른 자원의 결과를 삽입힌다. 기타 태그 catch : 예외처리에 사용된다. out : JspWriter에 내용을 알맞게 처리한 후 출력한다. 2.1 변수지원태그 (1) <c:set>태그 <c:set var = "varName" value="varvalue" [scpoe="영역"]/> <c:set var ...

#015 표준 태그 라이브러리(JSTL)

미분류
JSP는 개발자가 직접 <jsp:include>와 같은 태그를 작성할수있는 기능을 제공하는데 이를 태그라고 한다. 이것들을 모아서 JSTL이라는 규약을 만들었다. 1. JSTL이란 1.1 JSTL이 제공하는 태그의 종류 코어 : 변수지원, 흐름제어, URL처리 --> c xml : XML 코어, 흐름제어, XML 변호나 --> x 국제화 : 지역, 메시지 형식, 숫자 및 날짜 형식 --> fmt 데이터베이스 : SQL --> sql 함수 : 컬렉션 처리, String 커리 --> fn 02. 코어 태그 변수지원 set : JSP에서 사용될 변수를 설정한다. remove : 설정한 변수를 제거한다. 흐름제어 if : 조건에 따라 내부 코드를 수행한다. choose : 다중 조건을 처리할때 사용된다. forEach : 컬렉션이나 Map의 각 항목을 처리할때 사용된다. forTokens: 구분자로 분리된 각각의 토큰을 처리할때 사용된다. URL처리 import : URL을 사용하여 다른 자원의 결과를 삽입힌다. redirect : 지정한 경로로 리다이렉트 한다. url : URL을 사용하여 다른 자원의 결과를 삽입힌다. 기타 태그 catch : 예외처리에 사용된다. out : JspWriter에 내용을 알맞게 처리한 후 출력한다. 2.1 변수지원태그 (1) <c:set>태그 <c:set var = "varName" value="varvalue" [scpoe="영역"]/> <c:set var ...

#013 표현언어(Expression Language)

미분류
표현언어는 이름에서 알수 있듯이 값을 표현하는데 사용되는 새로운 스크립트 언어로서 JSP의 기본 문법을 보오나하는 역할을 한다. 1. JSP의 네가지 기본 객체가 제공하는 영역의 속성을 사용한다. 2. 집합 객체에 대한 접근 방법 제공 3. 수치 연산, 관계연산, 논리 연산자 제공 4. 자바 클래스 메서드 호출 기능 제공 5. 표현언어만의 기본 객체 제공 1.1 표현언어의 기본 문법 ${expr} <jsp:include page="/module/${skin.id}/header.jsp" flush="ture" /> <b>${sessionScope.member.id}</b>님 환영합니다. #{expr} 형식의 EL은 실제로 값이 필요할때 계산을 수행하기 때문에 Deferred Expression 이라고 부른다. 02. 표현언어의 기본 객체 EL도 이와 마찬기지로 11개의 기본 객체를 제공함으로써 요청 파라마터나 세션 속성값등을 표현식에서 쉽게 사용할수 있도록 하고 있다. pageContext : JSP의 page 기본 객체와 동일한다. pageScope : pageContext 기본 객체에 저장된 속성의<속성, 값> 매핑을 저장한 Map 객체 requestScope : request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 MAP 객체 sessionScope : session기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 MAP 객체 applicationScope : appli...

#013 데이터베이스 프로그래밍 기초

미분류
01. JSP에서 JDBC 프로그래밍 하기 1.1 JDBC의 구조 자바 웹 어플리케이션 => JDBC API => JDBC 드라이버 1.2 JDBC 프로그래밍의 코딩 스타일 1. JDBC 드라이버 로딩 2. 데이터베이스 커넥션 구함 3. 쿼리 실행을 위한 statement 객체 생성 4. 쿼리 실행 5. 쿼리 실행 결과 사용 6. statement 종료 7. 데이터베이스 커넥션 사용 1.3 <%@ page  import  = "java.sql.DriverManager"%> <%@ page  import  = "java.sql.Connection"%> <%@ page  import  = "java.sql.Statement"%> <%@ page  import  = "java.sql.ResultSet"%> <%@ page  import  = "java.sql.SQLException"%> <% Class.forName("com.mysql.jdbc.Driver"); Connection conn = null; Statement stmt = null; ResultSet rs = null; try{ String jdbcDriver = "jdbc:mysql://localhost:3306/chap12?" +   useUnicode=true&characterEncoding=euckr"; String dbUser = "sa"; String dbpass = "sa"; String query = "s...

#012 액션 태그를 이용한 객체 사용

미분류
01. 자바빈 자바빈은 데이터를 표현한는 것을 목적으로 하는 자바 클래스로서, 다음과 같은 형태로 구성된다. public class BeanClassName implements java.io.Serializable{ private String value; // BeanClassName의 기본 생성자 public BeanClassName(){ } // 필드의 값을 읽어오는 값 public String getvalue(){ return value; } //필드의 값을 변경하는 값 public void setValue(String value){ this.value = value; } } 자바빈 규약에 따르는 클래스를 자바빈이라고 부르며, JSP 프로그래밍에서 사용되는 자바빈클래스는 위 예시코드와 같이 데이터를 저장하는 필드, 데이터를 읽어올때 사용되는 메서드, 값을 저장할때 사용되는 메서드로 구성된다. 1.1 자바빈 프로퍼티 public void setMaxAge(int value); public int getMaxAge(); ㅇ 읽기 전용 프로퍼티 : get 또는 is메소드만 존재하는 프로퍼티 ㅇ 읽기/쓰기 프로퍼티 : get/set 또는 is/set 메소드가 존재하는 프로퍼티 ㅇ자바빈 프로퍼티의 타입은 다음과 같이 배열로도 정의 할수 있다. public int[] getMark() public void setMark(int[] values) 02. <jsp:useBean> 태그를 이용한 자바 객체 사용 <% MembeInfo mi...

#011 클라이언트오의 대화 2: 세션

미분류
세션을 사용하면 서버는 클라이언트의 상태 값을 유지 할수 있기 때문에, 인증도니 사용자 정보를 유지하기 위한 목적으로 세션을 많이 사용한다. 01. 세션사용하기 세션은 웹 컨테이너에서 정보를 보관 할때 사용된다. 세션은 오직 서버에서만 사용된다. 웹컨테이너는 기본적으로 하나의 웹 브라우저에 하나의 새션을 생섢나다. 1.1 세션 생성하기 JSP에서 세션을 생성하기 위해서는 page 디렉티브의 session 속성을 true로 지정해 주면 된다. <%@ page session = "true"%> : page의 ssion 속성의 기본값은 true 이므로 session 속성의 값을 false로 지정하지만 않으면 세션이 생성된다. 일단 새션이 생성되면 session 기본 객체를 통해서 새션을 사용할수 있게 된다. 1.2 session 기본 객체 getID() : 새션의 고유 ID를 구한다. getCreationTime() : 새션의 생성된 시간을 구한다. 단위는 1/1000초이다. getLastAccessedTime() : 웹브라우저가 가장 마지막에 새션에 접근한 시간을 구한다. 단위는 1/1000초이다. <@ page session = "true"%> 새션ID : <%= session.getID() %> <% time.setTime(session.getCreationTime()); %> 새션 생성 시간 : <%=formatter:format(time) %> <% time.setTime(Session.getLastAcce...

#010 클라이언트와의 대화1 : 쿠키

미분류
ㅇ 웹서버가 우 브라우저에 정보를 전달하는 방법 01. 쿠키 사용 쿠키란 : 웹 브라우저가 보관하고 있는 데이터로서 웹 서버에 요청을 보낼때 함꼐 전송된다. 웹서버와 웹 브라우저 양쪽에서 생성 할수 있으며, 웹 서버는 웹 브라우저가 전송한 쿠키를 사용하여 필요한 데이터를 읽어 올수 있다. ㅇ 쿠키생성 단계 : 쿠키를 사용하기 위해서는 쿠키를 생성해야 한다. ㅇ 쿠키저장단계 : 웹 브라우저는 응답데이터에 포하된 쿠키를 쿠키저장소에 보고나한다. 쿠키의 종류에 따라 메모리나 파일로 저장된다. ㅇ 쿠키전송단계 : 웹 브라우저는 한번 저장된 쿠키를 매번 요청이 있을때 웹 서버에 전송한다. 웹서버는 웹 브라우저가 전송한 쿠키를 사용해서 핋요한 작업을 수행 할수있다. - 웹브라우저는 쿠키가 삭제 되기 전까지 웹 서버에 쿠키를 전송한다. 지속적으로 유지해야 하는 정보는 쿠키를 사용해서 저장할수 있다. 1.1 쿠키의 구성 이름 : 각각의 쿠키 를 구별하는데 사용되는 이름 값 : 쿠키의 이름과 관련된 값 유효시간 : 쿠키의 유지 시간 도메인 : 쿠키를 전송할 도메인 경로 : 쿠키를 전송할 요청 경로 - 쿠키의 이름은 아스키 코드의 알파벳과 숫자만을 포함할수 있다. - 콤마, 세미콜론, 공백등의 문자는 포함할수 없다. - $ 로 시작할수 없다. 1.2 쿠키 생성하기 <% Cookie cookie = new Cookie("cookieName", "cookieValue"); response.addCookie(cookie); %> <% cookie.getName() ...

#008 페이지 모듈화와 요청 흐름 제어

미분류
01. <JSP:include> 액션 태그 - main.jsp가 웹 브라이저에 요청을 받는다. - 출력내용 A를 출력버퍼에 저장한다. - <jsp:include>가 실행되면 요청흐름을 sub.jsp로 이동시킨다. - 출력내용 B를 출력버퍼에 저장한다. - sub.jsp의 실행이 끝나면 요청 흐름이 다시 amin.jsp의 <jsp:include>로 돌아온다. - <jsp:include> 이후 부분인 출력내용 C를 출력 버퍼에 저장한다. - 출력 버퍼의 내용을 응답 데이터로 전송한다. 태그 사용법 - <jsp:include page = "포함할페이지" flush ="true"/> page : 포함할 jsp 페이지 flush : 지정한 jsp페이지를 실행하기 전에 ㅊ풀력 버퍼를 플러시 할지의 여부를 저장한다. true이면 출력 버퍼를 플러시 하고, false이면 하지 않는다. <jsp:include page = "sub.jsp" flush ="true"/> * 액션 태그를 이용한 중복 영역의 처리 - 한개의 JSP페이지만 같은 코딩이 반복된다면 개발 및 유지 보수 과정에서 문제가 발생하게 된다. <JSP:INCLUDE> 태그를 사용하면 공통되는 부분의 수정에 따른 문제를 최소화 할수 있다. - <jsp:param>을 이용한 포함될 페이지에 파리미터 추가 JSP 페이지에 파라미터를 추가 할수 잇다. <jsp:param name="param1" value="value1"> <js...