IBM Korea Skip to main content
       IBM 홈    |  제품 & 서비스  |  고객지원 & 다운로드  |  회원가입  

IBM developerWorks > 자바
developerWorks

JSP best practices : 타임 스탬프의 힘
JSP 페이지에 타임 스탬프 만들기

Level: Introductory

Brett McLaughlin
O'Reilly and Associates
2003년 7월 1일

Column iconJSP 페이지에 타임 스탬프를 추가하는 다양한 기술을 검토한다. 또한 이런 간단한 변경을 통해 웹 사이트의 가용성을 향상시킬 수 있다.

타임 스탬프(Time stamp)는 개인 사이트나 콘텐트 위주 사이트 같은 간단한 웹 사이트에 일반적으로 사용된다. 사용자들이 페이지의 최종 업데이트 시점을 볼 수 있는 장치이다. 결과적으로 필요한 부분을 보기가 쉽다. 특히 전자상거래 사이트에서 유용하다. JSP 페이지에 타임 스탬프를 추가함으로서 사용자들에게 좀더 쉬운 접근성을 허용하고 특화된 사이트로의 길을 열어준다.

타임 스탬프 추가하기
JSP 페이지에 마지막으로 수정된 날짜나 타임 스탬프를 넣는 것은 다른 유형의 페이지에 하는 것과 다르지 않다. java.io.File 클래스는 lastModified 메소드를 제공한다. 트릭이 필요한 유일한 부분은 JSP 페이지에 대한 File 핸들을 웹 콘테이너에 전개시키는 것이다. (Listing 1).

applicationrequest 모두 모든 JSP 페이지가 액세스할 수 있는 빌트인 변수라는 것에 주목하라. application은 JSP 페이지용 javax.servlet.ServletContext 객체를 구현하는 클래스의 인스턴스를 나타낸다. 이 객체는 JSP 페이지의 서블릿 경로를 취할 수 있고 이로서 JSP 페이지용 물리적 경로로 바뀐다. 이 경로는 그 다음에 File로 바뀐다.

Listing 1. File 핸들을 JSP로 가져가기

String jspPath = application.getRealPath(request.getServletPath());
java.io.File jspFile = new java.io.File(jspPath);

이 모든 정보를 가져다가 실행시키려면 Listing 2의 코드를 사용한다:

Listing 2. Printing out a time stamp

<%
     String jspPath = application.getRealPath(request.getServletPath());
     java.io.File jspFile = new java.io.File(jspPath);
     out.println(new java.util.Date(jspFile.lastModified()));
%>

파일의 마지막 수정 날짜가 결정된 후에 이것은 데이트 객체로 바뀐다. 이것이 스크린으로 직접가는 아웃풋이다. 매우 기본적인 코드로 좋은 결과를 가져왔다.

재사용이 가능한 타임 스탬프
물론, 원하는 페이지마다 위와 같은 코드를 타임 스탬프에 추가하는 것은 고통스러운 일이다. 보다 나은 방법은 날짜와 타임 스탬프를 디스플레이하는 일반적인 JSP 페이지를 만들어서 원하는 모든 위치에 JSP 페이지를 포함시키는 것이다. 이를 위해서는 Listing 2를 timestamp.jsp로 저장하고 jsp:include를 사용하여 필요한 곳 마다 타임 스탬프를 만들어내는 것이다. Listing 3은 JSP 타임 스탬프를 포함하고 있는 간단한 풋터(footer) 페이지이다:

Listing 3. 다른 JSP 페이지에 타임 스탬프 추가하기

<!-- Begin footer section -->
     <tr>
       <td width="91" align="left" valign="top" bgcolor="#330066"> </td>
       <td align="left" valign="top"> </td>
       <td class="footer" align="left" valign="top">
           <div align="center"><br>
           &copy; 2003 <a href="mailto:webmaster@newInstance.com">Brett 
               McLaughlin</a><br>
       Last Modified: <jsp:include page="timestamp.jsp" flush="true" />
         </div></td>
           <td align="left" valign="top"> </td>
       <td width="141" align="right" valign="top" bgcolor="#330066"> </td>
     </tr>
</table>
<!-- End footer section -->

Listing 3에 포함된 파일은 포함된 타임 스탬프 파일이 아니라 부모 JSP 페이지(이 경우 footer.jsp)를 보여준다는 것을 눈치챘을 것이다. 그래서 마지막으로 변경된 날짜와 타임 스탬프는 timestamp.jsp가 아닌 footer.jsp 에서 가져오게 되었다. 타임 스탬프 파일은 실제로 정적 파일이기 때문에(변하지 않는다), 이것은 매우 중요하다. 따라서 마지막으로 변경된 쿼리는 footer.jsp 같은 자동적으로 업데이트된 페이지로 가야한다.

한 단계 더 깊이 들어가서 다양한 콘텐트 페이지들로 구성된 사이트를 생각해보자. 이들 페이지들은 각자 하나의 footer.jsp 페이지를 포함하고 있다. 여기에는 timestamp.jsp가 포함되어 있다. 마지막으로 변경된 날짜가 최상위 페이지를 찾는다면 타임 스탬프는 콘텐트가 변경될 때 변한다.

타임 스탬프 포맷
기본 날짜와 타임 스탬프 아웃풋은 비교적 매력이 덜하다. (Fri Mar 28 10:30:10 CST 2003). 다행히 아웃풋 포맷을 잘 제어할 수 있는 java.text.SimpleDateFormat 클래스를 사용할 수 있다. Listing 4는 java.text.SimpleDateFormat이 추가된 timestamp.jsp이다.

Listing 4. 타임 스탬프 포맷

<%
     String jspPath = 
       application.getRealPath(request.getServletPath());
     java.io.File jspFile = new java.io.File(jspPath);
     java.util.Date lastModified = 
       new java.util.Date(jspFile.lastModified());
     java.text.SimpleDateFormat fmt =
       new java.text.SimpleDateFormat("MMM dd, yyyy, K:mm a (zz)");
     out.println(fmt.format(lastModified));
%>

결과 아웃풋은 Mar 28, 2003, 10:30 AM (CST)이다. 사용자의 입장에서 보면 훨씬 나아진 모습이다.

WAR로 작업하기
WAR(웹 아카이브) 파일안에 웹 애플리케이션의 일부로서 JSP 페이지를 전개할 때 제한 요소가 있다. 서블릿 콘테이너들은 일반적으로 WAR 파일들을 임시 디렉토리로 확장하여 임시 디렉토리에서 콘텐트를 제공하여 WAR 파일들을 전개한다. 문제는 이러한 상황에서 JSP 페이지와 연동한 File 객체를 포함시킬 수 없다는 것이다. 오히려 임시 파일로 핸들을 만들수만 있는데 이것은 웹 콘테이너가 재시작할 때마다 다시만들어지게 된다.

번거롭지만 전개된 서버에서 WAR 파일을 직접 가져와야 한다. 수동 추출의 불편함은 비교적 적다. 그리고 일단 수행하면 타임 스탬프는 정상적으로 작동한다.

참고자료

목 차:
타임 스탬프 추가하기
재사용이 가능한 타임 스탬프
타임 스탬프 포맷
WAR로 작업하기
참고 자료
필자 소개
기사에 대한 평가
관련 dW 링크:
JSP best practices series
Dynamic Web-based data access using JSP and JDBC technologies
JSP taglibs: Better usability by design
Subscribe to the developerWorks newsletter
US 원문 읽기
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
필자소개
Photo of Brett McLaughlinBrett McLaughlin은 현재 자바 및 관련 기술을 이용하여 애플리케이션 기반구조 구현을 전문적으로 수행하고 있다. Brett은 Java Apache 프로젝트인 Turbine의 공동 창립자이다.
이 기사에 대하여 어떻게 생각하십니까?

정말 좋다 (5) 좋다 (4) 그저그렇다 (3) 수정보완이 필요하다(2) 형편없다 (1)

  회사소개  |  개인정보 보호정책  |  법률  |  문의