728x90
반응형

서블릿 28

필터 - RESPONSE

필터를 통해 서블릿이 실행되기 전에 특정 액션을 하게 만들 수 있다고 했다. 그런데 서블릿이 실행되고 나서 특정 액션을 하게 만들려면 어떻게 해야 할까? 간단하게 생각해 보면 필터의 doFilter()메소드 안에 있는 chain.doFilter(request, response) 를 마치고 나서 작업하면 될 것 같다. 하지만, 서블릿에 넘겨주는 response 객체를 서블릿이 사용하게 되면, 필터를 거치지 않고 바로 클라이언트로 response 하게 된다. 따라서 doFilter를 통해 response를 넘길 때 새로운 응답 객체(HttpServletResponse를 구현한 객체)를 만들어 넘기는 방법을 써야 한다. 하지만, HttpServletResponse는 간단한 클래스가 아니므로, 썬에서 구현해 둔..

Java/Servlet & JSP 2009.04.28

필터 - REQUEST

모든 서블릿 앞단에서 공통적으로 처리해야 할 내용이 있을 경우 필터를 사용해서 해당 내용을 처리할 수 있다. 필터는 자신만의 고유 API가 있으며, 컨테이너가 이 API를 알고 호출해 준다. 해당 API는 init(), destroy(), doFilter()이다. 그리고 호출해야 할 필터는 DD(web.xml)에서 설정하게 된다. 하나의 예제로 필터를 만들어 보면 다음과 같이 할 수 있다.(Head & First 예제) BeerRequestFilter.java package com.example.web; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.F..

Java/Servlet & JSP 2009.04.16 (1)

웹 애플리케이션 보안

보안을 위해서는 인증(Authentication), 인가(Authorization), 데이터 무결성(Data Integrity), 기밀성(Confidentiality)이 보장 되어야 한다. 인증이란 쉽게 말해 로그인을 통해 누구인지 서버(컨테이너)가 알 수 있도록 체크하는 단계이다. 인가는 인증된 사용자의 권한 레벨을 확인할 수 있도록 체크하는 단계이다. 데이터 무결성이란 클라이언트가 서버에 보낸 정보가 변경되지 않도록 하는 것이며, 기밀성이란 중간에 해당 데이터를 엿보지 못하도록 하는 것이다. 인증 및 인가 작업은 php에서도 많이 하는 작업이므로 그 의미에 대해서 별 다른 설명은 필요해 보이지 않는다. 자세한 설정 방법 및 사용 법은 아래 예제들을 통해 알 수 있다. 우선은 서버 자체에서 지원하는 인..

Java/Servlet & JSP 2009.04.10 (4)

썬 개발자 뉴스레터(SDN) 메일에 블로그 글이 실렸었네요.

그냥 정기적으로 보내주는 형식의 메일을 잘 확인 안해보는 습관이 있어서, 썬에서 보내주는 메일도 확인도 안해보고 넘기다가 오늘 우연치 않게 지메일을 확인하다 아래 내용을 발견 했네요. 별볼일 없는, 그냥 Head & First 책에 나오는 내용을 정리한 포스팅인데, 그 내용이 뉴스레터에 실리다니... 참으로 창피하네요 ^^;; 내용도 기초적인 내용이고 ㅎㅎ 이메일에 실린 포스트는 http://www.4te.co.kr/566 입니다. 나중에 고수가 된다면, 기초적인 내용이 아닌 정말로 유익한 정보를 블로그에 포스팅을 쓸수 있겠죠 ㅎ 하지만 이 놈의 귀차니즘 때문에 진도가 느려서 탈입니다. ㅎㅎ

인생이야기/Gossip 2009.04.08 (2)

웹 애플리케이션 배포하기

어떤 파일이 어느 곳에 위치하는지는 중요하다. php를 개발 할 때 프로그래머가 임의로 정하는 장소와는 달리 Java(JSP)는 어느정도 rule을 가지고 특정 위치에 특정 파일을 배포해야지만, 전체 웹 애플리케이션이 돌아가기 때문이다. 따라서 중요한 몇개의 파일 타입별 배포 위치에 대해 정리해 보면 아래와 같다. 정적인 컨텐츠(html, 이미지) 및 jsp 루트 디렉토리 및 그 하위 디렉토리 WEB-INF 밑에 배포 할 경우에는 클라이언트가 직접 접근할 수 없다. 대신 웹 애플리케이션에서 접근을 하게 만들 경우를 위해서 배포할 순 있다. 태그파일(.tag) - http://www.4te.co.kr/567 참고 WEB-INF/tags 디렉토리에 배포 DD 파일 이름은 web.xml이어야 하며 WEB-IN..

Java/Servlet & JSP 2009.04.07

부모 자식 태그간의 통신

커스텀 태그 안에 커스텀 태그가 위치해 있을 경우 서로간에 필요한 속성이라던가 내용 등을 읽어올 필요가 있다. 이럴 경우에는 다음과 같은 방법으로 접근할 수 있다. myCustomTag3.tld 0.1 Nested NestedLevel Check NestedLevel com.example.tag.NestedLevelTag JSP NestedLevelTag.java package com.example.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.TagSupport; public class NestedL..

Java/Servlet & JSP 2009.03.26

클래식 커스텀 태그

JSP2.0 이전 버젼에서의 커스텀 태그는 심플 방식이 아닌 클래식 방식을 사용한다. simple 방식에서는 doTag() 메소드 하나로 모든 작업을 하고, exception 처리도 JspException, IOException를 throw 해서 catch 블럭이 없지만, 클래식 방식에는 doStartTag(), doEndTag() 메소드를 사용하며, JspException만을 throw 해서 catch 블럭에서 IOException을 잡을 필요가 있다. 간단하게 아래 예제를 통해 알아보자 tld 파일 0.9 KathyClassicTags ludicrous use of a Classic tag classicOne com.example.tag.Classic1 empty com.example.tag.Clas..

Java/Servlet & JSP 2009.03.26

사용자 정의 태그 개발 (1)

표준 액션 또는 JSTl과 같은 기능을 하는 태그 파일을 만들어 보자. 위와 같이 코딩 한 후 WEB-INF 아래 tags란 디렉토리를 만들어 Header.tag 파일로 저장한다. 그리고 난 후 우리가 url에 호출할 파일을 만들어 보자. Welcome to our site. 위와 같이 만든 다음 DocumentRoot 아래 customTag란 디렉토리 안에 customTag.jsp란 파일로 만들었다. 브라우져에 http://localhost:8080/customTag/customTag.jsp를 호출하면 아래와 같은 모습이 보여진다. 위에서 라고 사용한 부분을 보면 파일명이 바로 Tag 명이 된 것을 알 수 있다. 또한 표준액션에서 param을 사용한 것처럼 사용할 수 있다. customTag.jsp H..

Java/Servlet & JSP 2009.03.23

커스텀 태그 사용하기

사용자 정의 태그를 만들어서 사용할 수 있다. 사용 방법은 EL에서 함수를 만드는 방법과 유사하나 조금 더 복잡한 부면이 있다. 커스텀 태그를 만들기 위해서는 tld 파일과 java class 파일이 필요하다. 예제로 유저에게 랜덤하게 조언을 해 주는 커스텀 태그 소스를 보면 이해하는데 도움이 된다.(소스는 역시 Head & First Servelet & JSP에서 사용된 것이다.) 우선 tld 파일은 EL과 마찬가지로 WEB-INF 밑에 작성한다. 이름은 myCustomTag.tld로 한다. 0.9 RandomTags rollIt com.example.DiceRoller int rollDice() randomThings random advice advice com.example.AdvisorTagHan..

Java/Servlet & JSP 2009.03.17

JSTL 사용하기 (2)

클라이언트의 브라우져에서 쿠키 사용을 제한 하고 있을 경우 jsessionid를 추가하여 url로 세션 정보를 공유하는 방법은 이미 서블릿에서 살펴 봤다. jstl에서도 이와 같은 방법을 사용할 수 있다. 서블릿 response.encodeURL("/BeerTest.do"); jstl 위와 같이 하게 되면 url 뒤에 jsessionid를 덧 붙여서 사용하게 된다. 하지만 urlencoding을 자동으로 하지는 않게 된다. urlencoding을 하게 하려면 아래와 같은 방법을 사용해야 한다. 위와 같이 하게 되면 last, first에 설정 된 값에 있는 공백과 같은 값이 인코딩 되어 사용 된다. * 오류 페이지 만들기 오류 메시지를 그대로 보여주지 않고 디자인 된 페이지를 보여주려면, 예외 사항이 발..

Java/Servlet & JSP 2009.03.16

JSTL 사용하기 (1)

jsp에서 스크립팅을 사용하지 않고 루프를 돌리거나 조건문을 실행하는 방법으로 사용하는 것이 JSTL이다. JSTL을 사용하기 위해서는 다음과 같은 방법으로 설정을 해 줘야 한다. apache-tomcat-6.0.18\webapps\examples\WEB-INF\lib 에 있는 jstl.jar 파일과 standard.jar 파일을 WebContent/WEB-INF/lib 밑으로 copy 한다. 위와 같이 하게 되면 jstl을 사용할 수 있다. jstl을 사용할 수 있게 됬으므로 forEach 문을 돌려보자. 사용 방법은 php에서 사용하는 foreach 문과 별로 다를 바가 없다. web.xml jstlTest com.example.jstlTest jstlTest /Jstl 서블릿 코드 package c..

Java/Servlet & JSP 2009.03.12 (5)

템플릿 형태로 JSP 사용하기

템플릿 형태로 모듈화 해서 jsp를 사용하기 위해서는 include를 사용하면 된다. include를 사용하는 형식은 "include 지시자"와 "include 표준 액션"을 사용할 수 있다. include 지시자를 사용하여 코딩하는 예제는 다음과 같다. include 표준 액션은 다음과 같이 사용한다. 지시자를 사용한 include일 경우에는 변환시에, include 표준액션은 실행시에 Header.jsp파일을 실행한다. 만일 Header.jsp 파일에서 동적인 내용을 포함할 페이지로부터 받아야 한다면 다음과 같이 사용할 수 있다. Header.jsp ${param.subTitle} 변수를 미리 선언해 두고 Header.jsp 파일에서 사용하는 방법이 아닌 param 태그를 사용하여 변수를 넘길 수 있..

Java/Servlet & JSP 2009.02.16

EL 함수 사용하기

EL 표현에서도 함수(메소드)를 사용할 수 있다. EL에서 메소드를 사용하기 위해서는 다음과 같은 순서를 따라 작성해야 한다. 1. 정적인 공용 메소드를 제공하는 클래스를 만든다. 해당 메소드는 EL(JSP)에서 사용할 메소드이므로 반드시 정적인 공용 메소드여야 하며, 리턴 타입이 있어야 한다. 그래야지 JSP에서 브라우져에 내용을 그릴 수 있다. 2. 태그 라이브러리 서술자 파일을 만든다. EL 함수를 사용하기 위해서는 TLD(Tag Library Descriptor)란 파일로 자바 클래스, 메소드와 EL에서 호출할 메소드 명을 맵핑해야 한다. 3. JSP에 taglib 지시자를 코딩한다. 4. 함수를 호출하는 EL을 작성한다. 위 형식대로 EL을 작성해 보면 아래 처럼 작성할 수 있다. * DiceR..

Java/Servlet & JSP 2009.02.13

EL 사용하기

프로퍼티의 프로퍼티를 스크립틀릿이나 표준액션으로만 표현하기가 어렵거나 아예 불가능한 경우가 있다. 즉 다음과 같은 서블릿 코드를 스크립틀릿이나 표준액션으로 표현하려고 하면 다음과 같이 표현할 수 밖에 없을 것이다. public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { foo.Person p = new foo.Person(); p.setName("Evan"); foo.Dog dog = new foo.Dog(); dog.setName("spike"); p.setDog(dog); request.setAttribute("person", p); RequestDi..

Java/Servlet & JSP 2009.02.12 (3)

표준 액션을 사용한 JSP

"자바 빈을 이용해서 특정 객체의 값을 가져와 보여주는 소스는 아래와 같은 형식으로 jsp에서 사용할 수 있다. Person is : jsp내에서 스크립틀릿을 없애기 위해 나온 것이 표준 액션이므로 스크립틀릿을 없애는 방법으로 표현하자면 아래와 같이 할 수 있다. Person created by servlet : 위에서 id로 지정한 것을 아래 getProperty에서 name으로 가져다 쓸 수 있다. property의 name은 자바빈의 getter, setter에서 사용하는 값이다. 즉 name은 getName()과 같은 기능을 하게 되는 것이다. class는 패키지 명까지 다 써야한다. getProperty가 있다면 당연히 setProperty도 있다. setProperty는 다음과 같이 사용할 수..

Java/Servlet & JSP 2009.02.11

JSP 초기화 하기

ServletConfig를 web.xml에 정의해 두고 나서 서블릿에서 가져다 쓰는 방법에 대해 http://www.4te.co.kr/540 에서 다루었었다. JSP에서도 마찬가지로 초기화를 통해서 web.xml에 있는 ServletConfig를 변수처럼 사용할 수 있다. 방법은 서블릿 생명 주기에서 가장 처음에 한번만 호출하는 메소드인 jspInit() 메소드를 오버라이드 해서 사용하면 되는 것이다. 사용 방법은 아래와 같다. MyTestInit /TestInit.jsp email ikickedbutt@wickedlysmart.com MyTestInit /TestInit.jsp 위와 같이 설정을 하면 된다. 다만 servlet-class가 아니라 jsp-file 이라는 태그를 사용하게 되며, 패키지 형..

Java/Servlet & JSP 2009.02.10

스크립틀릿에서 변수 선언하기

다음과 같이 jsp를 작성해서 방문자의 숫자를 세어 보는 코드를 만들 생각을 할 수 있다. The page count is now: 이렇게 하게 되면 화면에 "The page count is now:1" 이라는 메시지가 찍힐 것이다. 하짐나 브라우져를 리프레쉬 하게 되면 count가 2가 되는 것이 아니라 여전히 1이 된다. 왜냐면 위에서 선언한 count란 변수는 지역 변수로 작용하기 때문이다. 즉 jsp는 서블릿으로 변하면서 그 모든 코드가 _jspService 메소드 안에 작성 되는데 count란 변수 역시 _jspService 메소드 안에서 정의 된다는 뜻이다. jsp 코드가 서블릿으로 변환 되게 된다면 아래와 같은 코드를 가지게 될 것이다. public void _jspService(HttpSe..

Java/Servlet & JSP 2009.02.04

간단한 Jsp 시작하기

Jsp를 작성하게 되면 jsp는 컨테이너에 의해서 서블릿으로 변형되게 된다. 간단하게 얼마나 많은 요청을 받았는지를 출력하는 jsp를 작성해 보면 다음과 같다. Counter.java package com.example; public class Counter { private static int count; public static synchronized int getCount() { count++; return count; } } BasicCounter.jsp Counter 클래스에서 static int 변수를 두어서 요청한 횟수를 저장할 변수를 만든다. BasicCounter.jsp에서는 page 지시자를 사용하여 com.example.*을 import 한 후 Counter 객체를 사용해서 카운트를 ..

Java/Servlet & JSP 2009.02.04

HttpSessionBindingListener와 HttpSessionAttributeListener

HttpSessionAttributeListener는 세션에 어떤 속성이 추가, 제거, 수정되는 이벤트가 발생하는지 알고 싶을 때 사용한다. 반면에 HttpSessionBindingListener는 자신이 세션에 속성으로 추가되었는지, 제거 되었는지 알기 위하여 사용한다. package com.example; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; public class Dog implements HttpSessionBindingListener { private String breed; public Dog(String breed) { this.breed = ..

Java/Servlet & JSP 2009.02.02

Cookie 사용하기

웹 프로그래밍을 하다 보면 자연스럽게 나오게 되는 부분이 쿠키(Cookie)이다. Java에서도 쿠키를 사용할 수 있는데, 다음과 같은 방식으로 사용하면 된다. 1. Cookie 객체 생성 Cookie cookie = new Cookie("username", name); 2. Cookie 생명 주기 설정 cookie.setMaxAge(30*60); //30분... 3. Response에 Cookie 추카 response.addCookie(cookie); 4. Request에서 Cookie 일어오기 Cookie[] cookies = request.getCookies(); for(int i = 0 ; i

Java/Servlet & JSP 2009.02.02

Session 관리

클라이언트와 지속적인 연결을 유지하지 못하는 것이 http protocol의 특징이므로, 이전 요청한 클라이언트와의 연결을 유지하기 위해서 Session을 사용한다. 컨테이너(톰캣) 단에서 Session ID를 발행하고, 해당 Session ID와 Cookie를 맵핑 한 다음 해당 쿠키를 클라이언트에서 사용하도록 하면 클라이언트를 구분해서 받을 수 있다. * 세션 ID는 다음과 같은 방법으로 사용할 수 있다. HttpSession session = request.getSession(); 위와 같이 하게 되면, request로부터 세션 ID를 가지고 올 수 있고, 제일 처음 요청이라면 response 객체에 보낼 쿠키도 생성하게 된다. * 세션이 이미 있는지, 아니면 처음 요청으로 새롭게 만들게 되었는지를..

Java/Servlet & JSP 2009.01.30

스레드 안전한 ServletContext 만들기

스레드 안전이란 말은 어떤 속성에 set을 한 다음 get을 하기 전에 다른 무엇인가가 해당 속성에 set을 해서 내가 set한 속성 값을 그대로 get하지 못하는 경우를 말한다. ServletContext에서도 스레드 안전이 보장되지 못한다. 즉 다음과 같이 코딩하게 되면 잘못된 결과가 리턴될 수도 있다는 말이다. public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("test context a..

Java/Servlet & JSP 2009.01.29 (1)

ServletContext 이용하기

ServletConfig는 해당 서블릿에서만 사용할 수 있지만 Web App 내에서 공통적인 내용을 가져다 사용하려면 ServletContext를 사용할 수 있다. ServletContext는 ServletConfig와 마찬가지로 web.xml을 사용하며, 따라서 바로 사용하려면 String만 사용할 수 있다. 하지만, ServletContextListener를 이용하면 객체 역시 Web App 전역에서 사용할 수 있다. ServletContextListener는 서블릿이 로딩 되기 전, 컨테이너(ex:톰캣) 차원에서 initialize 하고 destroy 하게 하는 것이다. 따라서 이 속성을 이용해서 컨테이너가 ServletContextListener를 로딩할 때 context-param을 추가한 후,..

Java/Servlet & JSP 2009.01.23 (2)

ServletConfig 이용하기

web.xml에 config 정보를 정의하고 해당 내용을 servlet에서 불러와 사용할 수 있다. 사용 방법은 다음과 같다. 1. web.xml 작성 BeerParamTests com.example.TestInitParams adminEmail likewecare@wickedlysmart.com mainEmail blooper@wickedlysmart.com BeerParamTests /Tester.do init-param을 통해서 param-name(변수명)을 정하고 param-value에 값을 넣은 후 사용할 수 있다. 2. com.example.TestInitParams.java 작성 package com.example; import java.io.IOException; import java.io..

Java/Servlet & JSP 2009.01.22

이클립스에서 Dynamic Web Project 시작하기

항상 기본 Pojo Java만 공부하다가 이클립스로 Servlet & JSP를 이용하는 Dynamic Web Project를 시작하게 되니 여간 헷깔리는 것이 아니었다. 그래서 정리 차원에서 블로그에 올려본다. 1. 일단 이클립스에는 WTP(Web Tools Platform)을 설치해야 한다. 설치하지 않을 경우 'New -> Project'에서 Dynamic Web Project가 보이지 않는 것 같다. 다운은 http://download.eclipse.org/webtools/downloads/ 에서 받아도 되며, 이클립스 자체에서 업데이트 해도 된다. 이클립스 자체에서 업데이트 하는 방법은 아래와 같다.(가니마데와 유로파가 서로 UI가 좀 틀린 듯 하다. 아래는 유로파 기준이다.) 위와 같이 한 후 ..

MVC 식 Servlet 사용

Head First Servlet & JSP 책을 통해 알게 된 MVC 식 Servlet 예제를 통해 기본적인 Servlet & JSP가 어떻게 돌아가는지 확인해 본다. 기본적인 디렉토리는 아래와 같다는 가정하에 작업을 한다. 1. 디렉토리 구성 src밑에 com.example.web 패키지와 com.example.model 패키지를 만든다.(패키지는 디렉토리와 같은 개념이다.) web 디렉토리 밑에는 일반적인 servlet이 들어가며, model 밑에는 Pojo Java가 들어간다. 기본적인 html 파일인 form.html과 결과값을 처리할 jsp 파일인 result.jsp 파일은 WebContent 밑에 들어간다. 2. web.xml 작성 WebContent/WEB-INF/web.xml에 다음과 같..

Java/Servlet & JSP 2009.01.21

Servlet의 작성

php에서는 DocumentRoot 아래에 있는 물리적인 디렉토리와 물리적인 파일을 호출하게 된다. 반면에 Java(Servlet)에서는 web.xml을 통해 url과 물리적인 servlet class를 맵핑 시켜서 호출하게 된다. 맵핑 시키는 방법은 아래와 같다. 위와 같은 디렉토리가 있다면, "WebContent/WEB-INF/web.xml" 파일을 열어 맵핑 정보를 등록할 수 있다. web.xml 파일은 기본으로 생성되어 있으며, 다음과 같이 작성할 수 있다. Chapter1 Servlet Ch1Servlet Chapter1 Servlet /Serv1 위와 같이 작성을 하게 되면 물리적인 servlet 파일을 찾아가는 flow는 다음과 같다. 1. http://localhost:8080/Serv1을..

Java/Servlet & JSP 2009.01.21 (3)
728x90
반응형