98..Etc/JSTL2009. 6. 8. 14:43
반응형

http://flexdocs.kr/ 의 3D 방명록을 기반으로 게시판을 작성해 봤다.
php로 되어있는 게시판 소스를 보고 jstl로 바꿔보면 어떨가 해서 시작했는데
귀차니즘의 압박으로 인해 웹으로 운영되고 있는 현재 게시판 기능 중
조회기능만을 AIR로 구현하는데 만족.

작업하면서 얻게된 몇가지 팁을 공유해 보자.

첫째. JSTL, CLOB
jstl로 clob데이터 처리가 되지 않는다-_-;;; 결국 꽁수를 써야 하는데,
나는 오라클디벨로퍼 페이지에 게시된 내용을 참고했다.


<c:set value="${rs.rows[0].content}" var="content" scope="request"/>
<%
oracle.sql.CLOB clob=(oracle.sql.CLOB)request.getAttribute("content");
StringBuffer clobString = new StringBuffer();      
int y;          
char ac[] = new char[4096];          
java.io.Reader reader = clob.getCharacterStream();          
while ((y = reader.read(ac, 0, 4096)) != -1) {
 String buff = new String(ac,0,y);
 clobString.append(buff);
}
request.setAttribute("content1", clobString.toString());
%>
<contents><![CDATA[${content1}]]></contents>

1. clob을 request에 박아두고
2. jsp에서 clob코드를 이용하여 스트링생성
3. 생성된 스트링을 request에 새팅
4. el에서 request를 읽어옴

일련의 과정을 통해서 알게된 점은

1. 지저분 하지만 jstl과 jsp 간에 데이터 통신은 request객체를 사용한다.
2. html 데이터를 xml로 표현할때는 <!CDATA[]]>를 사용한다.
3. clob은 쓰기 어렵다 -_-

둘째, trace()를 적극 활용하자.
서버에서 던져준 xml을 클라이언트가 어떻게 처리하고 있는지 몰라서 상당히 애 먹었다.
변수에 trace 먹여서 디버그로 돌리면 그냥 죽죽 나오는데,
이걸몰라서 프로그래밍 상당히 곤란
xml 파싱을 trace를 통해 겨우 해결했다.


var xmlArticle:XMLList = e.result.articles.article;
    view_idx.text = xmlArticle.@idx;
    view_hname.text = xmlArticle.hname;
    view_contents.htmlText = xmlArticle.contents;
   
    var xmlComments:XMLList = xmlArticle.comments.comment;
    acdp.removeAll();
       
    for(i=0; i < xmlComments.length(); i++)
    {
     var xmlComment:XML = xmlComments[i];
     //trace(xmlComment);
     acdp.addItem({
      comments : xmlComment.contents
     });        
    } 
   

xml, xmllist 객체 두개가 아직도 헷갈린다.
이해하려 노력하지 말고 그냥 맘편히 trace에서 나오는거 보고 적당히 처리하자-_-


세째, reference
jstl은 처음 써봤는데 역시 j2ee튜토리얼이 가장 큰 도움이 됐다.
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html

AIR도 처음인데 flex/air 한글화 문서를 참조했다.
http://flexdocs.kr/

NEXT.
spring, hibernate로 확장 -_-;;


reader.zip

Posted by 1010
98..Etc/JSTL2009. 2. 26. 18:27
반응형
org.apache.jasper.JasperException: This absolute uri (http://java.sun.com/jsp/jstl/core)
cannot be resolved in either web.xml or the jar files deployed with this application


JSTL 을 제대로 연결하지 못하는거 같아 여러 방면으로 찾아보았다.
소스 상에는 문제가 없는데 문제가 생기는건 jar 문제 같았다.
jstl.jar 를 해석하는 standard-1.0.6 을 뜯어서 보니 META-INF 안에 .tld 파일의 URL이
jsp 가 빠진 주소이다 . 하지만 사이트에서는
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 다음과 같이 쓰기 때문에
맞지 않았던것이다.
사용자 삽입 이미지
그래서 아래 주소로 가서 jstl.jar 와 standard.jar 를 새로 받아 넣었더니 제대로 되는 것이다.
http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
1.1.2 .zip 파일을 받는다.

다음의 주소는 JSTL  지침서 이다. 시간날때 참조하자.
http://java.sun.com/developer/technicalArticles/javaserverpages/faster/
Posted by 1010
98..Etc/JSTL2009. 2. 26. 18:07
반응형

간혹 Jeus에서도 잘 돌던 JSP가 Tomcat에서 500번 에러가 나는 경우가 있는데

대부분의 경우 JSTL을 사용하는 경우이다.

대략 다음과 같은 형태다.



메시지를 자세히 보면 이런 내용이 나온다.

According to TLD or attribute directive in tag file, attribute value does not accept any expressions

요컨데 expression language를 사용할 수 없다는 것


이 내용으로 구글링을 해보면 이런 내용이 나온다.
참고: http://forum.java.sun.com/thread.jspa?threadID=683007&messageID=9423383


내용인 즉 expression을 사용하려면 JSTL 1.1을 써야한다는 내용이 많다.
Struts 1.3.8에 포함된 JSTL은 1.0.2 였기 때문에
일부러 J2EE SDK가 포함된 Sun AppServer를 다운 받아 appserv-jstl.jar 로 교체를 해봤다.
그래도 마찬가지 현상..
 
대략 글을 더 살펴보니 이런 솔루션이 나온다.
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 를 쓰지말고
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> 를 쓰라는 것
결과는 잘 나온다.


그런데 Jeus에서도 나오는게 Tomcat에서 저렇게 해야만 한다는게 못내 섭섭하다.
그래서 더 내용을 살펴보니
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 요걸로 하면 다 된단다.


결과는 다음과 같다.

잘 나온다. 
결국 다른 패치 없이 Tomcat 5 이상에서 Struts 1.3.8 만가지고 JSTL 사용 이상 없다.
다행다행 >ㅁ<
Posted by 1010