─━ IT ━─

특정 폴더 안에 저장된 문서를 웹 페이지에 공개하다

DKel 2021. 8. 16. 00:53
반응형
먼저 인터넷 상에서 공유하고 싶은 정보는 평상시 텍스트 정보뿐만이 아닙니다.Microsoft Office로 작성한 오피스 문서라던가, 화상, PDF(Portable Document Format) 등 리치한 컨텐츠를 Web상에 공개/공유하고 싶다고 하는 케이스도 많이 있습니다.그런 경우에 지금까지 있었던 것이라면 어떤 식으로 하고 있었을까요?특정 폴더에 문서를 저장한 후 각각의 문서에 링크를 붙인 인덱스 페이지를 작성했을 수도 있습니다.혹은 손쉽게 웹 서버가 디폴트로 생성하는 인덱스 페이지를 그대로 이용하고 있는 분들도 계실 수 있습니다.하지만 전자는 문서를 올릴 때마다 HTML을 본인이 수정해야 하기 때문에 번거롭고 후자는 허세라는 의미에서 어려운 점이 있습니다.그래서 이 글에서는 문서를 특정 폴더에 업로드하기만 하면 자동으로 인덱스 페이지를 생성해 주는 폴더 시스템을 소개합니다.출력 레이아웃은 템플릿에서 지정할 수 있기 때문에 사이트 디자인에 따라 간단하게 외형을 커스터마이즈 할 수 있는 것이 특징입니다.필요한 환경 본고로 소개하는 폴더 시스템은, JSP2.0&서블릿 2.4 환경에서 동작하는 커스텀 태그입니다.이용하는데 있어서는, 이하의 소프트웨어가 최저한 필요하게 됩니다.이것들 소프트웨어의 인스톨 방법에 대해서는, 저자 사이트 「서버 사이드 기술의 학습사」에서 「서버 사이드 환경 구축 설정」을 참조해 주세요.J2SE 5 . 0 _ 02
JSP&서블릿 컨테이너(Tomcat 5.5.7에서 확인 완료) 샘플 코드는.war 형식으로 제공하고 있습니다.기사 상부 링크에서 다운로드 할 수 있는 ′CZ_FolderPublish.war′ 를 ′%CATALINA_HOME%/webapps′ 폴더 하에 배치하고 컨테이너를 재부팅하면 자동으로 전개됩니다.또 샘플 폴더′/CZ_FolderPublish′배 밑에는 커스텀 태그를 실제로 시험하기 위한 ′sample.jsp′이 포함되어 있기 때문에, 이하의 URL에서 실행하고, 코드가 정상으로 동작하고 있음을 확인하세요.http://local host:8080/CZ_FolderPublish/sample.jsp 파일 구조 앞서 언급한 것처럼, 본 글에서 소개하는 폴더 시스템은 JSP2.0 & 서블릿 2.4 환경에서 동작하는 커스텀 태그입니다.우선은 다운로드 파일내의 파일 구조를 나타내 둡니다(적자 파일은 다른 응용 프로그램에서 이용하는 경우에 필요한 파일임을 나타냅니다). 요소의 이용 방법 커스텀 태그 요소에서 이용 가능한 속성은 아래와 같습니다.또, 각각의 본체 템플릿에서는, 이하의 페이지 속성을 이용 가능합니다.페이지 속성은 ${속성이름} 형태로 참조하실 수 있습니다.이상을 바탕으로 구체적인 JSP페이지의 기술 예를 보도록 하겠습니다.「 sample . jsp 」
< % @ page contentType = ′ text / html ; charset = Windows - 31J ′ % >
< % @ taglib prefix = ′ cz ′
uri = ′ http://www.wings.msn.to/CodeZineTagLibs-1.0 ′ % >
< cz : FolderPublish path = ′ / data ′ >
< jsp : attribute name = ′ header ′ >
< table bordercolor = ′ # 000000 ′ cellspacing = ′ 1 ′
bordercolordark = ′ # ffffff ′ cellpadding = ′ 1 ′
bordercolorlight = ′ # 000000 ′ border = ′ 1 ′ >
< tr >
파일명 사이즈 최종 갱신일
< / tr >
< / jsp : attribute >
< jsp : attribute name = ′ body ′ >
< tr >
< td > $ { name } < / a > < / td >
< td > $ { length } Byte < / td >
< td > $ { lastModified } < / td >
< / tr >
< / jsp : attribute >
< jsp : attribute name = ′ footer ′ >
< / table >
< / jsp : attribute >
포인트가 되는 것은, 이하의 2점입니다.@taglib 디렉티브에서 태그 라이브러리를 등록하다
fragment는요소로 기술하는 커스텀 태그의 이용 방법에 대해서는, 관련 기사의 「외부의 RSS 피드를 자사이트에서 공개한다」에서도 소개하고 있기 때문에, 자세한 것은 이쪽을 참조해 주세요.태그 핸들러 클래스 Folder Publish Tag의 이용 방법 요소의 사용 방법을 이해한 바 요소의 거동을 정의하는 태그 핸들러 클래스 Folder Publish Tag의 내용을 살펴보도록 하겠습니다.태그 핸들러 클래스의 기본적인 골격에 대해서는, 관련 기사의 「외부의 RSS 피드를 자사이트에서 공개한다」에서도 소개하고 있으므로, 자세한 것은 이쪽을 참조해 주세요.또 태그 핸들러 클래스를 이용하는 경우에는 디플로이먼트 디스크 리프터(web.xml), 태그 라이브러리 디스크 리프터(my Tag.tld)에 적절한 설정을 해 둘 필요가 있습니다.본고에서는 생략합니다만, 자세한 것은 다운로드 파일에 포함되는 해당의 파일을 참조해 주세요.「 FolderPublishTag . java 」 ( 抜粋 )
public void doTag ( ) throws JspException , IOException {
PageContext pageContext = ( PageContext ) this . getJspContext ( ) ;
ServletContext application = pageContext . getServletContext ( ) ;
HttpServletRequest request
= ( HttpServletRequest ) pageContext . getRequest ( ) ;
File folder = new File ( application . getRealPath ( this . path )) ;
File [ ] files = folder . listFiles ( ) ;
header . invoke ( null ) ;
for ( int i = 0 ; i < files . length ; i++ ) {
if ( ! files [ i ] . isDirectory ( )) {
pageContext . setAttribute ( ′ name ′ , files [ i ] . getName ( )) ;
pageContext . setAttribute ( ′ path ′ ,
request . getContextPath ( ) + this . path
+ ′ / ′ + files [ i ] . getName ( )) ;
pageContext . setAttribute ( ′ length ′ , new Long ( files [ i ] . length ( ))) ;
pageContext . setAttribute ( ′ lastModified ′ ,
new Date ( files [ i ] . lastModified ( ))) ;
body . invoke ( null ) ;
}
}
footer . invoke ( null ) ;
} File#listFiles 메서드는 현재 File 객체 아래에 배치되는 서브폴더, 파일을 File 객체 배열로 반환합니다.본샘플에서는 서브폴더에는 대응하지 않는 것으로 하기 때문에 오브젝트 배열 files로부터 꺼낸 파일 요소가 폴더가 아닌(is Directory 메서드가 false인) 경우에만 출력 처리를 실시합니다.여기에서는, 파일명, 패스, 파일 사이즈, 최종 갱신일을 각각 페이지 속성으로서 세트 한 다음, 본체 템플릿(body fragment)을 실행하고 있다고 하는 것입니다.물론 본체 템플릿에서 모든 페이지 속성을 인용할 필요는 없습니다. 정리 이상 JSP & 서블릿 어플리케이션에서 이용 가능한 요소들을 소개해 보았습니다.본고에서는 우선 기본적인 파일 시스템의 읽기에 대해 소개했습니다만, 「일본어 파일명에의 대응(본고에서는 미대응)」 「서브폴더에의 대응」 등, 개선해야 할 부분은, 각자 대응해 보십시오.
반응형