레이블이 DWR인 게시물을 표시합니다. 모든 게시물 표시
레이블이 DWR인 게시물을 표시합니다. 모든 게시물 표시

2008년 3월 3일 월요일

DWR 사용시 Session 값 얻기

DWR 사용중 Session 객체 얻기

Java로 웹프로그래밍 하다보면 Session값을 가끔식 필요로 할 때가 있습니다.
일반적인 경우에는 doPost나 doGet 메소드를 구현함으로써 쉽게 Session값을 얻을 수가 있습니다.

HttpSession session = request.getSession();

보통 위 같은 방식으로 session을 많이 얻어옵니다.
하지만 DWR를 사용할 경우 어떤 방식으로 session값을 얻어올가요?
결국 request 인스턴스만 가질수 있으면 session은 쉽게 얻을 수 있지 말입니다.

DWR 샘플들을 살펴보던중 WebContext 라는 클래스를 알게 되었습니다.
사실 DWR를 이용하여 JS에서 Java 메소드를 콜할시 결국 request를 보내게 됩니다.
이 request를 얻을려면 별도로 webContext라는 인스턴스를 얻어야만 하는데
WebContextFactory.get() 로 쉽게 얻을 수가 있습니다.

WebContext wctx = WebContextFactory.get();
HttpServletRequest request = wctx.getHttpServletRequest();
HttpSession session = request.getSession();

이것땜에 반나절 삽질을 했네요.ㅜㅜ

2007년 2월 15일 목요일

DWR과 Spring 연동하기

DWR은 Direct Web Remoting의 약자로서 Java web으로 하여금 쉽게 Ajax 기술을 사용할수 있게끔한다.
본 예제는 DWR과 Spring을 연동하는것을 통하여 DWR의 사용법을 알아보도록 하겠다.

1. DWR 라이브러리를 다운받어 온다.
http://getahead.ltd.uk/dwr/ 웹사이트에 접속하여서 dwr.jar파일을 다운로드 받어온다.
다운받어온 dwr.jar파일을 WEB-INF/lib폴더속에 복사하여 넣는다.

2. web.xml파일에 대한 설정을 한다.
<!-- Servlet configuration for DWR -->
 <servlet>
  <servlet-name>dwr-invoker</servlet-name>
    <display-name>DWR Servlet</display-name>
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
    <init-param>
       <param-name>debug</param-name>
       <param-value>true</param-value>
    </init-param>
 </servlet>

<servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
 </servlet-mapping>

3. dwr.xml파일을 추가한다.

<!DOCTYPE dwr PUBLIC
    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
    "
http://www.getahead.ltd.uk/dwr/dwr10.dtd"><dwr>
 <allow>
  <create creator="spring" javascript="CheckAcc">
   <param name="beanName" value="CheckAcc" />
  </create>
 </allow>
</dwr>

creator속성에서는 js를 생성할 방식을 지정해주는것인데 여기서 우리는 spring과 연동을 하기 때문에 spring으로 지정하면 된다. 만약 일반 서블릿과 연동할때에는 new 로 설정해주면 된다.
param태그의 name에는 class 아니면 beanName 올수 있는데 여기서 우리는 spring하고 연동하기 때문에 beanName을 쓰기로 한다. value는 실제 applicationContext.xml파일에서 선언된 bean 네임을 설정해주면 된다.

4. DWR bean 실체를 만든다.
아래에 샘플코드를 첨부하겠다.

public class AccSessJS {
 
 private AccSessService accSessService = null;

 public void setAccSessService(AccSessService accSessService) {
  this.accSessService = accSessService;
 }
 
 public boolean isExist(int accSessNo)
 {
  AccSess accSess = accSessService.findByAccSessId(accSessNo);
  return ( null == accSess ) ? false : true;
 }
}


5. applicationContext.xml에 bean을 선언한다.

<bean id="CheckAcc" class="com.nanumsem.nnserp.acc.dwr.AccSessJS">
  <property name="accSessService">
   <ref bean="accSessService"/>
  </property>
</bean>

6. UI용 JSP파일에 관련된 JS를 import한다.

<script type='text/javascript' src='/nnserp/dwr/interface/CheckAcc.js'></script>
<script type='text/javascript' src='/nnserp/dwr/engine.js'></script>
<script type='text/javascript' src='/nnserp/dwr/util.js'></script>

7. Client측 validation을 위하여 필요한 Javascript 코드들을 삽입한다.

function regAccCheck(){
 var accId=$("accSess.idAccsess").value;  
   CheckAcc.isExist(accId,showData);//showData콜백 함수
}  
 
function showData(data){  
 if(data)
 {  
  window.alert("이미 등록이 되여있습니다.");
    }
    else
    {  
     window.alert("아직 등록이 되여있지 않습니다.");
    }  
}