달력

22025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

   <property name="mappingDirectoryLocations">
     <value>/WEB-INF/hbm</value>
    </property>

 

스프링 + 하이버네이트 사용시에 하이버네이트 설정을 스프링에서 하게 되는데

API 를 보니...

 

public void setMappingDirectoryLocations(Resource[] mappingDirectoryLocations)
Set locations of directories that contain Hibernate mapping resources, like "WEB-INF/mappings".

Can be used to add to mappings from a Hibernate XML config file, or to specify all mappings locally.

See Also:
Configuration.addDirectory(java.io.File)

요런 넘이 있었넹...

몰랐다는 -.-;;

Posted by tornado
|
[방문히트이벤트] 5100 히트를 잡아라!
나이트님이 당첨되었습니다.

'이것저것 > 낙서장' 카테고리의 다른 글

[삽질] 컴터 껐다 키니까 되냐 ㅡㅡ  (0) 2005.03.04
5200 히트 이벤트!!!  (5) 2005.03.02
막판에 정말 대찬 삽질  (0) 2005.02.18
5000 히트 이벤트!!!  (3) 2005.02.18
머리아픔 ㅡㅡ  (0) 2005.02.14
Posted by tornado
|
비록 인터넷 익스플로러에서만 동작하긴 하지만 브라우저의 "인쇄 미리 보
기"와 "페이지 설정" 메뉴를 프로그래밍적으로 실행시킬 수 있는 방법이 있
다. 우선 아래 버튼을 클릭한 후 어떤 결과가 나오는지 확인해 보기 바란다.
(인터넷 익스플로러 4 이상에서 동작한다.)


위 예제와 같은 결과를 얻으려면 브라우저 컨트롤에 접근할 수 있어야 한다.
이제 실제 소스 코드를 보면서 분석해 보도록 하자.

<script language="javascript">
function ieExecWB( intOLEcmd, intOLEparam )
{
// 웹 브라우저 컨트롤 생성
var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0
CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';

// 웹 페이지에 객체 삽입
document.body.insertAdjacentHTML('beforeEnd', WebBrowser);

// if intOLEparam이 정의되어 있지 않으면 디폴트 값 설정
if ( ( ! intOLEparam ) || ( intOLEparam < -1 )  || (intOLEparam > 1 ) )
        intOLEparam = 1;

// ExexWB 메쏘드 실행
WebBrowser1.ExecWB( intOLEcmd, intOLEparam );

// 객체 해제
WebBrowser1.outerHTML = "";
}

</script>

<input type=button value="인쇄 미리 보기" onclick="window.ieExecWB(7)"> 
<input type=button value="페이지 설정" onclick="window.ieExecWB(8)"> 
<input type=button value="인쇄하기(대화상자 표시)"
onclick="window.ieExecWB(6)"> 
<input type=button value="인쇄 바로 하기" onclick="window.ieExecWB(6, -
1)">


위의 소스 코드에서 웹 브라우저 컨트롤에 접근하기 위해 <object> 태그를 사
용하였다. 이 때 웹 브라우저 컨트롤의 고유 클래스 ID인 "8856F961-340A-
11D0-A96B-00C04FD705A2"를 사용하였다. ActiveX 프로그래밍을 해본 사람이라
면 이게 무엇을 의미하는지 쉽게 알 수 있겠지만 잘 모르는 사람도 이 기능을
사용하는데는 큰 문제가 없다. 다만 궁금한 사람들은 레지스트리의
HKEY_CURRENT_USER의 CLSID 부분에서 {8856F961-340A-11D0-A96B-00C04FD705A2}
을 찾아보기 바란다. 이렇게 레지스트리에 등록되어 있는 고유 ID를 <object>
태그를 통해 접근함으로써 해당 컨트롤의 기능을 이용할 수 있는 것이다.

웹 브라우저 컨트롤은 ExecWB란 메쏘드를 가지고 있다. 이 메쏘드를 통하여 브
라우저 메뉴를 접근할 수가 있다. ExecWb 메쏘드의 파라미터로 intOLEcmd와
intOLEparam을 사용하는데 intOLEcmd가 7이면 인쇄 미리 보기, 8이면 페이지
설정, 6이면 인쇄하기이다. 인쇄하기 경우 intOLEparam이 -1이면 대화 상자 없
이 바로 인쇄를 한다. 여기서 ExecWB 메쏘드는 WebBrowser1을 통해 접근하였는
데 이는 <object> 태그 안에서 웹 브라우저 컨트롤에 대한 이름으로
WebBrowser1을 사용했기 때문이다. 이 이름은 사용자가 임의로 지정해 주면 된
다.

만일 인쇄하기와 관련된 전형적인 방법을 알고 싶은 사람은 다음 글을 참조 하
기 바란다.

모든 브라우저에서 인쇄 대화 상자 띄우는 방법
이 외에도 브라우저의 메뉴를 실행시킬 수 있는 방법으로 execCommand 메쏘드
가 있는데 이와 관련된 글을 읽고 싶다면 다음 글을 참조하기 바란다.
Posted by tornado
|

하이버네이트 보던 도중.. 이런 에러 발생..

정확한 에러는

net.sf.hibernate.LazyInitializationException: Failed to lazily initialize a collection - no session or session was closed
 at net.sf.hibernate.collection.PersistentCollection.initialize(PersistentCollection.java:209)
 at net.sf.hibernate.collection.PersistentCollection.read(PersistentCollection.java:71)
 at net.sf.hibernate.collection.Set.size(Set.java:106)

.

.

.

 

머 대충 이런 메세지다.

 

이 에러가 발생하는 원인은.. mapping 설정 중에 lazy="true" 부분이 있다.

하이버네이트 설명중에 lazy="true" 일 경우.. 객체를 뒤늦게 초기화 한다(?) 라고 하는데..

이게 쿼리는 이미 만들어져있지만 실제 데이터를 꺼내와서 객체에 담는 작업을 나중에 한다는 말인지.. 잘 모르겠다 ㅡ,.ㅡ 

 

예상이지만 하이버네이트의 PersistenceCollection 의 동작방식이 열쇠를 쥐고 있을 것 같다.

 

지금 연습삼아 만들어보는 게시판의 클래스와 Mapping 정보를 보면 이렇다.

   /**
    * @hibernate.set
    *  table="board_file"
    *  lazy="true"
    *  inverse="false"
    *  order-by="idx"
    *  cascade="all"
    *
    * @hibernate.collection-key
    *  column = "parent"
    * @hibernate.collection-one-to-many
    *  class = "com.javarush.board.dto.AttatchFile"
    */
    public Set getAttatchFile() {
        return articleFile;
    }

    public void setAttatchFile(Set attatchFile) {
        this.attatchFile= attatchFile;
    }

 

hbm.xml 파일로 번역되면 아래와 같이 된다.

 

        <set
            name="attatchFile"
            table="board_file"
            lazy="true"
            inverse="false"
            cascade="all"
            sort="unsorted"
            order-by="idx"
        >

              <key
                  column="parent"
              >
              </key>

              <one-to-many
                  class="com.javarush.board.dto.AttatchFile"
              />

        </set>

 

하나의 게시물을 읽어올때... 게시물 고유번호에 대한 자식들(Upload) 을 같이 가져와야 하는데..

이 매핑 정보를 통해 별도의 쿼리 없이 Upload 정보를 담고있는 객체들이 Set 에 입력되어서

게시물 Bean 에 담겨서 반납된다..

 

문제는... lazy="true" 일때.. 하이버네이트 세션이 닫혀있으면.. 객체정보를 가져오지 못한댄다 ㅡㅡ

 

그래서... 세션이 닫히기 전에 객체를 초기화 시켜줘야 했다.

초기화 방법은 간단..

 

Session ss = factory.openSession();

bean = mgr.read(new Integer(게시물고유번호));

 

// Set 의 size() 를 호출하여 객체를 초기화(객체로딩???)시킨다.

bean.getAttatchFile().size(); <-- 요기서 명시적으로 객체를 로딩하는것 같다.

 

ss.close();

 

Iterator iter = bean.getAttatchFile().iterate();

 

while(iter.hasNext()){

  Object = iter.next();

}

 

이렇게 해서 세션이 닫히기 전에 객체들을 가져왔다.

 

만약 위에 코드가 아래처럼 되어있으면 영락없이 LazyInitializationException 가 던져진다

Session ss = factory.openSession();

bean = mgr.read(new Integer(게시물고유번호));

ss.close();

// 세션이 닫힌 상태기 때문에 아래쪽으로는 LazyInitializationException  가 발생한다 ;;

Iterator iter = bean.getAttatchFile().iterate();

 

while(iter.hasNext()){

  Object = iter.next();

}

 

Posted by tornado
|

xdoclet 을 사용하고 있다...

또 각각의 세부설정들을 merge 디렉토리에 넣어놓구 사용한다.

스트럿 액션 서블릿은 servlets.xml 에 지정되어있다.

 

web.xml 은 각 액션... DTO 들을 읽어들여서 xdoclet 이 자동으로 생성한다.

 

그런데.. 액션 서블릿에 init-param 을 하나 넣고 싶어졌다.

source 디렉토리를 보니까... web.xml 이 있네 ..

얼씨구나 하고.. 그곳에 넣었다 ..

 

그리고 build......

 

당근 잘 되리라고 생각했던것이.. 계속 null point 떠서 에러 발생 ㅡㅡ

왜 안되지?? 왜 안되지?? 8시에 저녁먹고 2시간 30분동안 xdoclet 에서 web.xml 을

자동으로 조립한다는 생각은 안하고...

source 폴더에 있는 web.xml 만 하염없이 고치고 있었네 ㅜㅜ

 

이거 알게된것도... 하이버네이트 매핑파일 고치다가 알았네 ㅡㅡ

 

 

염병헐 ㅡㅡ

 

왕짜증 ㅡㅡ

 

시간 아까워 ㅡㅡ

두시간반이면.... 렙업했겠다 ㅡㅡ

 

'이것저것 > 낙서장' 카테고리의 다른 글

5200 히트 이벤트!!!  (5) 2005.03.02
5100 히트 이벤트!!!  (2) 2005.02.24
5000 히트 이벤트!!!  (3) 2005.02.18
머리아픔 ㅡㅡ  (0) 2005.02.14
4900 히트 이벤트!!!  (0) 2005.02.14
Posted by tornado
|
[방문히트이벤트] 5000 히트를 잡아라! (이웃한정)
박종복님이 당첨되었습니다.

'이것저것 > 낙서장' 카테고리의 다른 글

5100 히트 이벤트!!!  (2) 2005.02.24
막판에 정말 대찬 삽질  (0) 2005.02.18
머리아픔 ㅡㅡ  (0) 2005.02.14
4900 히트 이벤트!!!  (0) 2005.02.14
JSP 로 xml 파일 만들때.... 제발... 쫌.. !!!!  (0) 2005.02.12
Posted by tornado
|

훔... 하이버네이트만 쓸때는

Query q = sess.creaeQuery("from CustomBean as xxx order by xx asc");

q.setFirstResult(0);

q.setFetchSize(20);

list = query.list();

 

sess.close();

 

이렇게 하면 꼭 mysql 에서 limit 을 쓴것처럼 가져오는데..

 

Spring + Hibernate 를 쓰니까... 이게 좀 애매해 짐..

그래서 HibernateDaoSupport 를 상속한 DAOImpl 클래스 안에다가..

무식하게 시리..

return getHibernateTemplate().find(

    "from XXXBean as xxx order by xxx.desc limit ?,?"

    , new Object[]{ new Integer(first), new Integer(fetchSize) } ) ;

 

이렇게 했는데.. 일단 돌아가기는 원활히 돌아가는데..

기분이 영~~ 찝찝하네...

재미있는건... 코딩이 더 힘들것 같았던 struts + spring + hivernate 가

일단 기본 설정파일이 완성된 후에는 코딩량이 줄었다는 것임 ;;

 

pstmt.setString(1, xxx);

pstmt.setString(2, yyy);

.

.

.

.

pstmt.executeUpdate();

 

이런짓거리 안해두 되니 무지 편리 ㅎㅎㅎ

Posted by tornado
|
Posted by tornado
|

자꾸 까먹어서 안되겠음.. 적어놔야지...

 

 

[mysqld]
basedir=D:/mysql
default-character-set=euc_kr

 

 

 

euc-kr 이 아니고..  euc_kr 이다!!!!

 

4.1.x 버전대는  euckr 이다!!!

 

JDBC 에서의 URL 뒤의 쿼리는

 

 ?useUnicode=true&amp;characterEncoding=euc-kr

 

이거다!!!!

 

 

Posted by tornado
|

 /**
  * @hibernate.property
  * @hibernate.column name="contents" sql-type="text" not-null="true"
  */
 public String getContents() {
     return contents;
 }

 public void setContents(String contents) {
     this.contents = contents;
 }

 

음.. 매녈에 없어서 메일링에서 보구 찾았음

 

 

Posted by tornado
|

springframework.org 보다가 배낌

 

 

  <bean id="propertyConfigure"

      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <list>
        <value>WEB-INF/jdbc.properties</value>
      </list>
    </property> 
  </bean>

 

  <bean id="dataSource"
     class = "org.apache.commons.dbcp.BasicDataSource">   
   <property name="driverClassName" ><value>${jdbc.driver}</value></property>
   <property name="url"><value>${jdbc.url}</value></property>
   <property name="username"><value>${jdbc.user}</value></property>
   <property name="password"><value>${jdbc.password}</value></property>
  </bean>
 

ㅋ.. 편리하군... 설정으로 끝나다뉘~~

Posted by tornado
|

Spring, Hibernate, Velocity 를 한꺼번에 시작했더니... 머리 아푸넹 ㅜㅜ

 

Struts 는 지금 사용하고 있으니까.... 그냥그냥 다루겠는데...

 

다른것들은 헷갈리는 부분들이 점점 많아지네 ㅡㅡ;

 

음주가무야.. 점만 기둘려라.. 개념 잡히면 내 찐하게 놀아주마 ㅎㅎㅎ

 

'이것저것 > 낙서장' 카테고리의 다른 글

막판에 정말 대찬 삽질  (0) 2005.02.18
5000 히트 이벤트!!!  (3) 2005.02.18
4900 히트 이벤트!!!  (0) 2005.02.14
JSP 로 xml 파일 만들때.... 제발... 쫌.. !!!!  (0) 2005.02.12
4800 히트 이벤트!!!  (2) 2005.02.11
Posted by tornado
|
[방문히트이벤트] 4900 히트를 잡아라!
studio11님이 당첨되었습니다.

'이것저것 > 낙서장' 카테고리의 다른 글

5000 히트 이벤트!!!  (3) 2005.02.18
머리아픔 ㅡㅡ  (0) 2005.02.14
JSP 로 xml 파일 만들때.... 제발... 쫌.. !!!!  (0) 2005.02.12
4800 히트 이벤트!!!  (2) 2005.02.11
어제 말탔다.. 으흐흐흐  (2) 2005.02.11
Posted by tornado
|

Spring 시작..


http://www.springframework.org/download.html

에 가서 다운로드 받는다.

압축 풀고.. dist 디렉토리에 가보면 jar 파일, dtd, tld 등등이 보인다.

이 파일들을 사용할 수 있게 클래스 패스에 걸던, Eclipse 에서

해당 프로젝트에 등록하던지 한다.

=====================================
package test;

public interface Hello{

 public void sayHello();

}

=====================================
package test;

public class HelloImpl implements Hello{

 public String name;

 public HelloImpl(){
  System.out.println("Default Constructure called..");
 }

 public void sayHello(){ 
  System.out.println("Hello~~~ " + name);
 }

 public void setName(String name){
  this.name = name;
 }
}


=====================================


위의 파일을 Spring 설정 파일에 등록해야 사용할 수가 있다.

hello.xml 파일로 아래 내용 저장..

=====================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="hello"
 class="test.HelloImpl">
    <property name="name">
      <value>tornado</value>
    </property>
  </bean>
</beans>
=====================================


이제 이 파일을 테스트 해볼 클래스를 만든다.

=====================================
package test;

import org.springframework.context.*;
import org.springframework.context.support.*;

public class HelloTest{

 public static void main(String[] args) throws Exception{

  ApplicationContext ac =
   new FileSystemXmlApplicationContext("d:/source/spring/test/hello.xml");
  
  Hello hello = (Hello) ac.getBean("hello");

  hello.sayHello();

 }

}
=====================================

시작해보면.... HelloImpl 클래스의 생성자가 호출되는것을 볼 수 있고.

sayHello() 를 통해 메세지가 출력되는 것을 볼수 있당..

property 엘리먼트를 이용해서 특정 메소드에 변수를 전달 할 수도 있다.

 

내친김에 DataSource 를 등록해볼까나???

jndi 도 가능하고, DBCP 도 가능하다.

Application 이니.. DBCP 의 BasicDataSource 를 등록해 보자..

hello.xml 파일에 bean 을 등록...

(물론 DBCP 를 위한 commons-pool, commons-dbcp, commons-collection,
mysql driver 등은 준비해야쥐)

  <bean id="dataSource"
   class = "org.apache.commons.dbcp.BasicDataSource">
   
   <property name="driverClassName" >
     <value>org.gjt.mm.mysql.Driver</value>
   </property>
   <property name="url">
     <value>jdbc:mysql://localhost:3306/test</value>
   </property>
   <property name="username">
     <value>root</value>
   </property>
   <property name="password">
     <value>1111</value>
   </property>
  </bean>

위에 부분을 등록한다.


HelloTest 클래스의 main 메서드에 아래만 등록해 보면 된다.

절라 간단..


DataSource ds = (DataSource)ac.getBean("dataSource");

if(ds == null) System.out.println("null");
else System.out.println("Ok");

Connection conn = ds.getConnection();

PreparedStatement pstmt = conn.prepareStatement("select now()");

ResultSet rs = pstmt.executeQuery();

if(rs.next()){
   
    System.out.println(rs.getString(1));
}

conn.close();

 

시작은 했는데...... 개념이 헷갈리넹 ㅜㅜ

설정은 또 왜이리 많은겨  -.-;;

 

음주가무 해야 하는데 쩝~

 

Posted by tornado
|

http://forum.springframework.org/index.php

 

Spring Framework Forum IndexSpring Framework
Spring Framework Support Forums
 

 

스프링 사용하다가 막히면 바로 찾게 되는 곳.

싱싱하고 현장에서 검증된 유용한 정보가 올라온다...

Posted by tornado
|

벨로시티에서 제공하는 툴들은 여러 종류가 있다.

GenericTools
VelocityView
VelocityStruts

이 있는데... 간단하게 GenericTools 에 있는 DateTool 을 사용해봤다.

http://jakarta.apache.org/velocity/tools/generic/

요기 GenericTools 를 볼 수 있당.

사용법은 무지 간단..

먼저 Tool 을 사용하기 위해..  toolbox.xml 을 WEB-INF/ 디렉토리에 생성하고,
VelocityViewServlet 에 해당 툴을 등록시켜주면 된다.

=============================================
<?xml version="1.0" encoding="UTF-8"?>

<toolbox>

  <tool>
    <key>date</key>
 <scope>application</scope>
 <class>org.apache.velocity.tools.generic.DateTool</class>
  </tool>

</toolbox>
=============================================

web.xml 에서 VelocityViewServlet 에 init-param 으로 toolbox.xml 을 지정해 주어야 한다.

=============================================

<init-param>
  <param-name>org.apache.velocity.toolbox</param-name>
  <param-value>/WEB-INF/toolbox.xml</param-value>
</init-param>

=============================================

이렇게 적어주고... 해당 컨텍스트 리로딩..

마지막으로 test.vm 파일에 아래와 같이 적어준당..

=============================================

<BR><HR><BR>
$date.getDate()

<BR>
$date.format('yyyy-MM-dd aaa H:m:s', $date)

<BR>
$date.short || $date.medium || $date.long

<BR>
$date.get('yyyy-M-d H:m:s a')

=============================================

http://localhost:8080/velocity/test.do 

오옷... 날짜 나와따~~

이런식으로 제공되는 Tool들을 지정해서 쓰면 된당..


 

Posted by tornado
|

디렉토리만 뽑아와야 하는 상황..

java.io 패키지에 보면 FileFilter 와 FilenameFilter 인터페이스가 있다.

 

두개의 차이점은 정의된 메소드인데..

FileFilter 에는 accept(File pathname) 이 있고.

FilenameFilter 에는 accept(File dir, String name) 이 있다.

 

만약 *.exe 파일만 고르고 싶다고 하면 FilenameFilter 를 쓰면 되고...

디렉토리만 골라서 보고 싶을때는 FileFilter 인터페이스를 구현해 주면 된다.

 

   File[] fileNames = f.listFiles(new FileFilter(){
    public boolean accept(File pathname){     
     return pathname.isDirectory();
    }
   });

 

이런식이 되겠지..

 

만약 확장자로 걸러내고 싶다면...

File[] fileNames = f.listFiles(new FilenameFilter(){
  public boolean accept(File dir, String name){

    return name.endsWith(".exe");

  }

});

 

IO 를 특정부분만 쓰다보니.. 이런데서 잠깐씩 헤매고 있네 ㅡㅡ

'JAVA > JSE' 카테고리의 다른 글

[펌] JVM GC와 메모리 튜닝  (0) 2005.05.18
[펌] 손쉬운 정적 분석 툴로 버그 잡기  (0) 2005.05.11
[nio] Channels 클래스  (0) 2005.01.17
[펌] Sorting Algorithm  (0) 2005.01.15
[link] 자바 검색 봇~  (0) 2005.01.11
Posted by tornado
|

아니.. 왜

<%@ page contentType="" %>

<%@ page import="...." %>

<%

 

%>

 

<?xml version="1.0" ?>

 

왜 page 디렉티브를 <?xml 앞에다 쓰냐고 ㅡㅡ

파싱할때 짱나잖아 ㅡㅡ 공백있으면 에러나는거 뻔히 알면서 ㅡㅡ

어차피 서버측에서 다 번역되서 나가는데.. ;;

 

제발...

<?xml version="1.0" encoding="UTF-8" ?>

<%@ page contentType="text/xml; charset=xxxx" %>

 

이렇게 해달라고.. ㅡㅡ;;

 

에디터 좌표 0, 0 에다 딱 붙이~!

 

'이것저것 > 낙서장' 카테고리의 다른 글

머리아픔 ㅡㅡ  (0) 2005.02.14
4900 히트 이벤트!!!  (0) 2005.02.14
4800 히트 이벤트!!!  (2) 2005.02.11
어제 말탔다.. 으흐흐흐  (2) 2005.02.11
즐설~~~  (0) 2005.02.04
Posted by tornado
|

벨로시티에 스트러츠도 함 붙여볼까??

필요한 jar 파일을 lib 에 복사하자..

struts.jar 는 필수이고

struts 구동에 필요한 commons-digester, commons-beanutils, validator 등등을 복사한다.


WEB-INF 디렉토리에 struts-config.xml 파일을 생성한다.

=====================================================================

<?xml version="1.0" encoding="EUC-KR"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
 
 <data-sources />
 
 <form-beans />   
 
 <global-exceptions />   
   
 <global-forwards />     
   
 <action-mappings>
  
 </action-mappings> 
           
 <controller />   

</struts-config>


=====================================================================

암것도 없다 ㅡㅡ;;


web.xml 에 ActionServlet 을 등록한다.


<servlet>
  <servlet-name>action</servlet-name>
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
  <init-param>
 <param-name>config</param-name>
 <param-value>/WEB-INF/struts-config.xml</param-value>
  </init-param>

  <init-param>
    <param-name>locale</param-name>
 <param-value>true</param-value>
  </init-param>

  <load-on-startup>2</load-on-startup>
</servlet>

 

<servlet-mapping>
  <servlet-name>action</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>


머 위치는 적당히 알아서 넣는다.

톰캣 다시 시작... (로그에 보면... struts.jar, commons-xxx 등등이 로딩된게 보일게다..)


간단한 Action 을 만든다...

===============================================================
package test;

import javax.servlet.*;
import javax.servlet.http.*;

import java.io.*;

import org.apache.struts.action.*;

public class TestAction extends Action{
 
 public ActionForward execute(
  ActionMapping mapping ,
  ActionForm form ,
  HttpServletRequest req ,
  HttpServletResponse res)
  throws IOException , ServletException
 {
  
  String target = "success";


  return mapping.findForward(target);
 }

}

 

===============================================================

간단하게 하는거라...
ant 안쓰고 그냥 지저분하게 컴파일함..
예전에 ant 모를때는 ejb 컴파일을 .bat 파일로 만들어서
컴파일 했다는 ㅡㅡ;

D:\tomcat_ex\webapps\velocity\WEB-INF\classes\test>javac -classpath %CLASSPATH%;d:\tomcat_ex\common\lib\servlet.jar;..\..\lib\struts.jar *.java


컴파일 되었으면... struts-config.xml 에 action 등록..

==============================================================


<action-mappings>

  <action
 path = "/test"
 type = "test.TestAction"
 scope = "request">

 <forward name="success" path="/test.vm" />

  </action>
 
</action-mappings> 


==============================================================

http://localhost:8080/manager/html/reload?path=/velocity 

해당 컨텍스트 리로드 하고..

http://localhost:8080/velocity/test.do 를 요청...


오옷... test.vm 으로 포워딩 대따...

 


request 에 객체 를 담아볼까낭~~~


TestAction 클래스를 수정한당...

================================================================

package test;

import javax.servlet.*;
import javax.servlet.http.*;

import java.io.*;
import java.util.*;

import org.apache.struts.action.*;

public class TestAction extends Action{
 
 public ActionForward execute(
  ActionMapping mapping ,
  ActionForm form ,
  HttpServletRequest req ,
  HttpServletResponse res)
  throws IOException , ServletException
 {
  
  String target = "success";
  
  List _list = new ArrayList();

  for(int i = 0; i < 10; i++){
   _list.add(new String("Number : " + ( i + 1) ) );
  }

  req.setAttribute("TEST_LIST", _list);

  return mapping.findForward(target);
 }

}

================================================================

컴파일 하고... Manager 에서 리로딩 하던지.. 톰캣 재시작 하던지..


test.vm 에 아래 코드 추가..

#foreach( $t in $TEST_LIST)

<B>$t</B></br>


#end


http://localhost:8080/velocity/test.do <-- 요청한다..


오옷... 찐하게 뭐가 나와따~~~~

 

Tool 좀 더 보구 가지고 놀아야쥐...

 

'JAVA > Framework' 카테고리의 다른 글

첨으로 Spring 해바따..  (0) 2005.02.14
[펌] Spring Framework Forum  (0) 2005.02.14
벨로시티 GenericTool 중에.. DateTool  (0) 2005.02.12
[울트라 초 간단] Velocity 시작 ㅡㅡ  (0) 2005.02.12
헷갈리 ㅡㅡ;;  (0) 2005.02.12
Posted by tornado
|

먼저 톰캣을 설치(4.1.31 zip 버젼..)

설치하고 conf 디렉토리에서 tomcat-users.xml 파일에 admin, manager 정보 입력.

  <user username="manager" password="123456" roles="manager"/>
  <user username="admin" password="123456" roles="admin"/>

velocity-1.4 다운로드하고 압축 풀고...
velocitytool 도 다운로드 하고 압축 풀고...

톰캣에 velocity 컨텍스트 를 만든다.

webapps/velocity
webapps/velocity/WEB-INF
webapps/velocity/WEB-INF/classes
webapps/velocity/WEB-INF/lib

이렇게 만들고 lib 디렉토리에
velocity-1.4.jar
velocity-tools-view-1.1.jar   <-- velocityTool 에 있음

일단 이렇게 두개의 파일을 복사... (나머지는 차근차근 알아가자..)

 

WEB-INF 디렉토리에 web.xml 파일을 만들고.. VelocityViewServlet 을 등록한다.

전체 xml 파일은 아래와 같음.
=================================================================
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

 <!-- Define Velocity template compiler -->
 <servlet>
   <servlet-name>velocity</servlet-name>
   <servlet-class>
  org.apache.velocity.tools.view.servlet.VelocityViewServlet
   </servlet-class>
<!--
   <init-param>
  <param-name>org.apache.velocity.toolbox</param-name>
  <param-value>/WEB-INF/toolbox.xml</param-value>
  </init-param>

   <init-param>
  <param-name>org.apache.velocity.properties</param-name>
  <param-value>/WEB-INF/velocity.properties</param-value>
  </init-param>
-->
  <load-on-startup>10</load-on-startup>

 </servlet>


 <servlet-mapping>
   <servlet-name>velocity</servlet-name>
   <url-pattern>*.vm</url-pattern>
 </servlet-mapping>

</web-app>

=================================================================


toolbox 와 velocity.property 는 아직 설정하지 않았당..
없으면 지가 알아서 Default 프라퍼티를 설정하는듯 하다..

하여간에 서블릿 매핑에서 vm 확장자로 들어오는 요청은
VelocityViewServlet 으로 요청이 가게 되고.. 그곳에서 번역되어서
결과물이 출력된다.


일단 톰캣을 시작하고... logs 디렉토리에서 localhost_log 중 최신 파일을
보면 아래처럼 벨로시티가 잘 시작되었고 어짜고 저짜고.. 나옴..


2005-02-12 11:16:45  Velocity   [info] VelocityViewServlet: No custom properties found. Using default Velocity configuration.
2005-02-12 11:16:45  Velocity   [info] **************************************************************
2005-02-12 11:16:45  Velocity   [info] Starting Jakarta Velocity v1.4


이렇게 나오면.. 간단한 벨로시티 테스트 파일을 만든다...

 

=================================================================
## test.vm
#set ($name = "tornado" )

Hello $name !!

=================================================================

 

브라우저에서 http://localhost:8080/velocity/test.vm 으로 요청...

오옷.... $name 변수에 대입된 값이 출력돼써~~!!!

log 파일을 보니 아래와 같이 로그가 남았다..


2005-02-12 11:18:35  Velocity   [info] ResourceManager : found /test.vm with loader org.apache.velocity.tools.view.servlet.WebappLoader


다같이 벨로시티에 빠져 볼까요~~ 빠져 봅시다~~

근데 게임기능 되나요??

 


 

Posted by tornado
|