블로그 이미지
개발자의 조건은 어떤것도아닌 3일은 기본으로 날샐수있는 체력과 3일을 안씻어도 찝찝합을 못느끼는 것과 라면을 먹어도 탈없는 위입니다.
DefineJAVA

공지사항

최근에 받은 트랙백

글 보관함

calendar

      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 29      
크리에이티브 커먼즈 라이선스
Creative Commons License

기본적으로 HttpSessionListener를 구현(Implements)하여 세션이 생성 되는 시점과 세션이 사라지는 시점을 가지고 올 수 있다.

세션을 생성 되는 시점에 DB나 특정 Static 변수에 세션 정보를 저장 하고 세션이 종료될 때 그 세션 정보를 지워 줌으로써

해당 세션의 중복 로그인을 막을 수 있으며 현재 접속중이 접속자 정보를 가지고 올 수 있다.

package com.moainfo.http.session;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MoaSessionListener implements HttpSessionListener
{
 public void sessionCreated(HttpSessionEvent se)
 {
  HttpSession session = se.getSession();
  System.out.println("Create session : " + session.getId());
 }
 public void sessionDestroyed(HttpSessionEvent se)
 {
  HttpSession session = se.getSession();
  System.out.println("Close session : " + session.getId());
  
 }
}

저작자 표시 비영리 변경 금지

세션 강제 종료(강제 로그 아웃)

2011/05/05 13:46 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

Servlet 버젼이 올라 감으로 HttpSession에서 HttpSessionContext을 가져오는 메소드인 getSessionContext를 사용 못하게 되었다.
실제 사용을 하면 객체을 반환을 하기는 하지만 객체 안에 세션은 비워져 있다.

문서를 뒤져 보니 보안 관계상 사용을 못한다고 어쩌고 적혀 있기는 하는데.....그래도 관리자가 강제 로그아웃 시키거나 세션을 지워줘야 할 경우가 있을 것 같아서 고민끝에 편법을 하나 생각 해 냈다.(Jeus에서는 된다는 말도 있음)

HttpSessionContext 사용이 가능 하다면 HttpSessionContext .getSession(아이디)를 사용하여 세션 객체를 반환받고 HttpSession.invalidate() 메소드를 호출 하면된다.

HttpSessionContext 사용이 불가능 하다면 아래 소스와 같이 jsessionId값을 뒤쪽에 붙여 보내에 해당 세션으로 연결 시켜서 로그 아웃을 실행 하면 된다.


call.jsp

String jsessionId = "288B29804635D51357A52F6CCF25617B";
BufferedReader in = null;
String address = "http://me:8080/cms/logout.jsp;jsessionid="+ jsessionId;
try
{
 URL url = new URL(address);
 in = new BufferedReader(new InputStreamReader(url.openStream()));
 String line = in.readLine();
 in.close();
} catch (Exception e) {
 System.out.println("-.-;;");
}
in = null;

logout.jsp
System.out.println(session.getId());
 session.invalidate();

이 편법은 Session Hijacking이라는 다른 사람의 세션을 훔치는 방법을 응용한 방법이다.

약간의 문제가 있을 수도 있지만 우선은 이렇게 처리했다.

jsessionId값을 모르면 아무 소용이 없기 때문에 HttpSessionListener를 구현하여 세션이 생성되고 세션을 종료 되는 시점을 체크 하여 특정 저장 공간에 세션아이디 값과 아이피등 여러 정보를 저장 해 놓고 사용 하면된다.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
이번 프로젝트를 진행 하면서 최신버젼으로 셋팅을 해 보았는데 문제가 참 많았다.

iBatis에서 MyBatis로 바뀌면서 xml dtd도 바뀌고 실행 메소드도 바뀌고 참 머리가 아프다.

거기에 ehcache 사용으로 인해서 MyBatis와 Logging 문제로 하루종일 셋팅하고 참 진짜 너무 어렵다.

각 설정했던 상황은 다음과 같다.

/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <display-name>MOA IT PROJECT</display-name>
 <filter>
  <filter-name>encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>encoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 
 <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>codelabor-spring-mvc-template.root</param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.xml</param-value>
    </context-param>
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>10000</param-value>
    </context-param>   
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>

 <servlet>
  <servlet-name>cms</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>cms</servlet-name>
  <url-pattern>*.cms</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>


/WEB-INF/applicationContext.xml


 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:util="http://www.springframework.org/schema/util"
 xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
 <!-- 데이터소스 생성 -->
 <bean id="dsCMS" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" value="{URL}" />
  <property name="username" value="{ID}" />
  <property name="password" value="{PW}" />
  <property name="maxActive" value="10" />
  <property name="maxIdle" value="3" />
  <property name="maxWait" value="10000" />
  <property name="defaultAutoCommit" value="false" />
  <property name="validationQuery" value="select 1 from dual" />
 </bean>
  
 <!-- MyBatis Session  -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="true">
  <property name="configLocation" value="/WEB-INF/config/mybatis-config.xml" />
  <property name="mapperLocations" value="/WEB-INF/config/mapper/*.xml" />
  <property name="dataSource" ref="dsCMS" />
  <property name="transactionFactory">
   <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
  </property>
 </bean>
 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactory" />
  </bean>

 <!-- 트랜젝션 메니져 -->
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dsCMS" />
 </bean>
 <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
  <property name="transactionManager" ref="transactionManager" />
 </bean>
 
 <!-- Tiles 2 -->
 <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
  <property name="definitions">
   <list>
    <value>/WEB-INF/tiles/tiles-def.xml</value>
   </list>
  </property>
 </bean>
 
 <!-- EHCache -->
 <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" scope="singleton">
  <property name="configLocation" value="/WEB-INF/ehcache.xml" />
 </bean>
 <bean id="cmsCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
  <property name="cacheManager" ref="cacheManager" />
 </bean>
 
 <!-- DAO SESSTING -->
 <bean id="testDAO" class="TestDAO">
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
 </bean>
</beans>
 



/WEB-INF/cms-servlet.xml


 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:p="http://www.springframework.org/schema/p"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
  http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
 
 <bean id="handlerMapping"
  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="order" value="1" />
  <property name="alwaysUseFullPath" value="true" />
  <property name="mappings">
   <props>
    <prop key="/test.cms">testController</prop>
    <prop key="/moa.cms">testController</prop>
   </props>
 </property>
 </bean>
 
 <!-- TESET Controller -->
 <bean id="testController" class="TestController" p:methodNameResolver-ref="parameterMethodNameResolver">
  <property name="testDAO" ref="testDAO"></property>
 </bean>
 
 <!-- 파라미터별 리졸뷰  -->
 <bean id="parameterMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
  <property name="paramName" value="command" />
  <property name="defaultMethodName" value="list"></property>
 </bean>
 
 <!--  URL Mapper -->
 <bean id="handlerMapping1" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="alwaysUseFullPath" value="yes" />
 </bean>
 
 <!-- Resolvers -->
 <bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
  <property name="order" value="1"/>
 </bean>
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
  <property name="order" value="2"/>
 </bean>

 
</beans>



/WEB-INF/config/mybatis-config.xml
 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <settings>
  <setting name="cacheEnabled" value="true" />
  <setting name="useGeneratedKeys" value="true" />
  <setting name="defaultExecutorType" value="REUSE" />
 </settings>
 <typeAliases>
  <typeAlias alias="hashMap" type="java.util.HashMap" />
  <typeAlias alias="map" type="java.util.Map" />
 </typeAliases>
</configuration>


/WEB-INF/config/mapper/user.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="user">
 
 <cache type="org.mybatis.caches.ehcache.EhcacheCache" />
 <cache type="org.mybatis.caches.ehcache.LoggingEhcache" />
 
 <resultMap type="hashMap" id="userHashMap">
  <result property="contents" column="contents" jdbcType="CLOB" javaType="java.lang.String"  />
 </resultMap>
 
 <select id="selectTest" useCache="true" parameterType="hashMap" resultMap="userHashMap">
  <![CDATA[
  SELECT A.BOARDNO,  A.SUBJECT, A.WRITER, A.PASSWORD, A.HIT_CNT, A.MEMO_CNT, A.FILE_CNT, A.SUBMENU_YN, A.NOTICE_YN, A.DELETE_YN, A.REGISTY_DT,
       A.MODIFY_DT, A.BOARDID, A.WRITERIP, A.THUMBNAIL, A.FILES, A.DEPTNAME, A.TELEPHONE, A.EMAIL, A.SECURITY_YN, A.BOARDCATEGORYID
  FROM TB_BOARD A
 ]]>
  </select>
</mapper>


/WEB-INF/tiles/tiles-defs.xml


 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC  "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>
 <definition name="indexLayout" template="/WEB-INF/jsp/layout/index/layout.jsp">
  <put-attribute name="title">레이아웃페이지</put-attribute>
  <put-attribute name="header" value="/WEB-INF/jsp/layout/index/header.jsp" />
  <put-attribute name="menu" value="/WEB-INF/jsp/layout/index/menu.jsp" />
  <put-attribute name="body" value="/WEB-INF/jsp/layout/index/body.jsp" />
  <put-attribute name="footer" value="/WEB-INF/jsp/layout/index/footer.jsp" />
 </definition>
</tiles-definitions>



/WEB-INF/ehcache.xml
 <?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="ehcache.xsd">
 <diskStore path="java.io.tmpdir" />
 <cache name="com.whatever.SOMECACHE" maxElementsInMemory="2000"
  eternal="false" timeToLiveSeconds="86400" overflowToDisk="false"
  memoryStoreEvictionPolicy="LRU" />
</ehcache>


/WEB-INF/log4j.xml
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="debug" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] (%13F:%L) %3x - %m%n" />
        </layout>
    </appender>
   
    <appender name="info" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] (%13F:%L) %3x - %m%n" />
        </layout>
    </appender>
   
    <appender name="log-file" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="test-daily.log"/>
        <param name="Append" value="true"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] (%13F:%L) %3x - %m%n" />
        </layout>
    </appender>
   
    <category name="java.sql.Connection">
  <priority value="debug" />
 </category>
 <category name="java.sql.PreparedStatement">
  <priority value="debug" />
 </category>
 <category name="java.sql.ResultSet">
  <priority value="debug" />
 </category>
    <category name="java.sql.Statement">
  <priority value="debug" />
 </category>
 <category name="org.apache.ibatis">
  <priority value="debug" />
 </category>
 <category name="org.springframework.web.servlet.DispatcherServlet">
  <priority value="error" />
 </category>
    <root>
        <level value="debug"/>
        <appender-ref ref="debug"/>
    </root>
</log4j:configuration>


저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
DAO를 풀어보면 Database Access Object로써 DB에 접근하여 무언가를 행하는 클레스입니다.

VO는 Variable Object(Value Object)로 DB 혹은 어떠한 물체 틀(형상화)을 잡고 이 틀을 잡기 위한 변수들을 모아둔 하나의 클레스트 입니다.

회원 DAO와 회원 VO의 구조를 보자면 다음과 같음.

UserDAO.java

더보기


UserVO.java

더보기


VO 부분은 회원 1명을 표현할때 필요한 여러 변수를 가지고 있으며 DAO는 그 회원들의 정보를 저장 불러오기 수정 등을 할수 있는 행위가 기술됨.

DAO에서 중요한 부분은 잘 생각해 보면 이 DAO는 몇번을 실행하더라도 내용이 바뀌지가 않음. DAO가 실행될때 마다 바뀌는건 VO고 이를 봤을 때 싱글톤 패턴을 사용하면 메모리를 조금 더 적게 사용할 수 있으며(매 호출시 인스턴스를 만들지 않기 때문) static영역에 미리 만들어진 인스턴스가 들어가 있기 때문에 그 주소를 참조해서 객체를 불러오기 때문에 객체를 생성하는것에 비해 속도가 빠름.
저작자 표시 비영리 변경 금지

제 10회 한국자바개발자 컨퍼런스

2009/02/25 13:39 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License
제 10회 한국자바개발자 컨퍼런스

struts에서 Foward 사용하기

2008/01/29 14:11 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

이번에는 Action (Foward)에 대해 배우겠습니다.
이것은 별도의 Class를 걸치지 않고 바로 view 페이지로 이동할 때 쓰입니다.
이번에 우리는 Hello Struts! 문장이 출력되는 JSP 페이지와 연결 하여 요청이 들어오면 Struts를 통해서 해당jsp 파일이 보여지도록 만들것입니다.
별다른 비지니스로직이 처리되는것이 아닌 바로 프리젠테이션로직으로 이동하는 것입니다.
순서는 다음과 같습니다.

1. jsp 파일 생성
2. struts-config.xml에 action 등록
3. 실행

아주 간단합니다. 특별한 비지니스 로직을 통하지 않으므로 Class를 만들 필요도 없구요.

1. Eclipse에서 jsp파일을 한개 만듭니다.
파일명은 helloStruts.jsp로 하겠습니다.
편의를 위해 디렉토리 한개를 만들겠습니다.

사용자 삽입 이미지

디렉토리와 파일명은 /jsp/study01/helloStruts.jsp 이와 같이 하겠습니다.
사용자 삽입 이미지

파일이 만들어 생성 되었으면 내용을 편한대로 입력하시고 저장하시면 됩니다.
사용자 삽입 이미지

2. struts-config.xml파일을 열어서 action을 등록 합니다.

사용자 삽입 이미지

<action-mappings /> 에 다음과 같이 등록 해 줍니다.
<action path="/hello" forward="/helloStruts.jsp" />

<action-mappings>
     <action path="/helloStruts" forward="/ helloStruts.jsp" />
</action-mappings>

3. 실행
이걸로 Foward 가능한 action 등록은 끝났습니다. 이제 각자 서버에 맞게 배포 후 실행 하면 다음과 같은 화면을 볼 수 있을 것 입니다.

사용자 삽입 이미지


Struts에서 Foward는 다음과 같은 순서로 이루어 집니다.
1. 요청이 들어오면 우선 URL 패턴을 통해 이것이 Struts를 이용하여 실행이 될것인지 판단합니다.
2. 스트럿츠를 통해 실행이 되어야 하는 패턴일 경우 struts-config의 action-mapping 부분에 등록되어 있는 여러 액션중 path가 맞는 것을 찾아 해당 액션이 가르키는 foward의 내용을 보여 줍니다.
(action의 type이 지정되어 있다면 해당 클레스의 excute 메소드를 실행시킵니다. )
3. foward에 해당되는 응답을 줍니다.

사용자 삽입 이미지


그림에서 파란색으로 칠해 있는 부분이 Struts에 관련된 부분입니다.
url 패턴 검사는 struts 사용을 위해 Servlet으로 등록할 때 *.do로 오는 것을 struts로 처리한다고 정의 했을 것입니다.
그러므로 helloStruts.do로 호출하게 된다면 위의 순서에 따라 helloStruts.jsp의 내용을 뿌려주게 됩니다.

글을 쓰다가 보니 또 뒤죽 박죽 되버렸네요~
다음엔 조금더 생각 있이 써야 겠네요!
내을은 class를 한개 만들어 비지니스 로직을 실행 가능 하도록 만들도록 하겠습니다.
그럼 ' '

크리에이티브 커먼즈 라이선스
Creative Commons License

JDK 5.0 + Tomcat 이클립스 개발환경에서 Struts (1.3.8) 설치 하기

엄청 오랜만에 글을 쓰게 되었네요~
예전부터 계획했던 스트럿츠와 관련된 내용입니다.
한달동안 훈련소를 갔다가 오고 이것저것 하다 보니 시간이 많이 지나버렸네요!
오랜만에 Struts 홈페이지를 보니 1.3.8로 업그레이드가 되었더군요~
이전에 마지막에 써봤던 버젼이 1.2.9 였는데... 말이죠~
우선 기반은 1.3.8 기반으로 설명 하겠습니다.

우선 JDK와 Tomcat에 깔여 있고 툴은 이클립스 기반으로 하겠습니다.

설치 순서는 다음과 같습니다.

1. Struts 다운로드
2. 필요한 jar 파일 프로젝트의 WEB-INF 밑에 LIB 폴더에 복사(라이브러리 등록)
3. WEB.XML 파일 작성
4. Struts 설정파일(기본: struts-config.xml) 작성

자~ 대략적인 순서는 위에 갔습니다. 저렇게 보니 간단하죠?
머 그냥 해봐도 간단하기는 합니다.
그럼 시작하겠습니다.

1. Struts 다운로드
http://struts.apache.org/download.cgi#struts138

사용자 삽입 이미지

위 주소에서 알맞은 Struts 버젼을 다운 받습니다.
필자는 Full 버젼을 받도록 하겠습니다.
사용자 삽입 이미지

Full 버젼에는 밑에 있는 모든 내용이 포함되어 있습니다.
Libray + Source + Example + Documentation
사용자 삽입 이미지

Documentation 내용에 설치 하는 내용도 포함되어 있습니다.
다 다운 받으셨으면 우선 적당한 곳에 압축을 풀어서 내용을 확인 해 봅니다.

2. 필요한 jar 파일 등록
이제부터는 이클립스에서 프로젝트를 생성하고 그 프로젝트에 라이브러리 등록 하겠습니다.
우선 이클립스를 키시고 프로젝트를 한개 생성합니다.

사용자 삽입 이미지

저는 MyEclipse 6.0.1 버젼에서 동작 시키도록 하겠습니다.
그렇게 크게 차이는 없으며 이클립스를 사용하시던 분이라면 쉽게 따라 올 수 잇다고 생각합니다.
사용자 삽입 이미지

struts 이름의 웹 프로젝트를 만듭니다.

프로젝트가 생성이 되었으며 내용을 보면 기본적이 라이브러리들이 등록되어 있으며 프로젝트의 최 상위 디렉토리가 되는 WebRoot라는 디렉토리가 있으면 그 밑에 몇개의 폴더와 폴더가 있는 것이 보일 것입니다.

사용자 삽입 이미지

이제 라이브러리(jar) 파일을 복사 시키겠습니다.
아까 압축을 푼 곳을 보면 lib 폴더안에 여러 jar 파일들이 있을 것입니다.
commons 라이브러리와 core 라이브러리 타일즈 프레임워크, EL 등 여러가지 있을 것입니다.
사용자 삽입 이미지

우선 여기 있는 jar 파일을 전부 복사 하겠습니다. 원래는 필요한 것만 복사하셔서 사용하여도 되지만 여기서 하나하나 전부 설명을 할 수 없고 설치에 대한 설명을 위한 부분이기 때문에 모두 다 설치 하겠습니다.

전체를 프로젝트의 WebRoot\WEB-INF\LIB 디렉토리에 복사를 합니다.
해당 디렉토리에 복사를 하면 자동으로 Referenced Libraies에 등록이 될것입니다.

사용자 삽입 이미지

이클립스를 버젼과 설정에 따라 등록이 안될 수도 있습니다. 등록이 안될경우 프로젝트의 속성에 들어가셔서 직접 등록을 해 주시면 됩니다.

등록이 완료 되었으면 다음으로 넘어가도록 하겠습니다.

3. WEB-INF 밑에 web.xml 설정
Struts는 Servlet입니다. Servlet 등록을 위하여 web.xml파일을 열어서 편집을 하여야 합니다.

사용자 삽입 이미지

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 
   <!-- Action Servlet Configuration -->
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>application</param-name>
            <param-value>
                org.apache.struts.webapp.el.exercise.ApplicationResources</param-value>
        </init-param>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>2</param-value>
        </init-param>
        <init-param>
            <param-name>detail</param-name>
            <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>


    <!-- Action Servlet Mapping -->
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
   
</web-app>

web.xml

필자가 추가한 내용을 <Servlet>과 <servlet-mapping> 부분입니다. Struts를 사용하기 전에 Servlet에 대하여 모르시는 분은 Servlet부터 공부를 하고 오시는 것이 더 효율적으로 공부를 하실 수 있을 것 같습니다.

<Servlet>부분을 살펴보면 이것저것 설정 정보가 있다는것을 볼 수 있습니다. 서블릿의 이름과 파리미터를 보시면 대강 이해를 하실수 있을 것입니다. struts-config 파일의 정보라든지 debug 정보 출력 정도라는지...
<Servlet-mapping>부분을 보면 요청이 어떻게 들어왔을 때 Struts로 처리를 할 것인지 적혀 있는 부분입니다.
xxx.do 로 호출 될 경우에만 Struts로 처리 한다는 이야기 입니다.

4. Struts-Config 파일 설정
web.xml 파일 설정이 끝나으면 이제 struts-config 파일을 만들어야 합니다.

사용자 삽입 이미지

설정 정보 파일은 web.xml에서 지정한 위치와 파일이름으로 생성해 주시면 됩니다.
struts-config.xml파일을 생성하시고 내용을 다음과 같이 입력 하시면 Struts 설치는 끝이 납니다.

사용자 삽입 이미지

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
    <form-beans />
    <global-forwards />
    <action-mappings />
</struts-config>

struts-config.xml
Struts 설치는 여기까지 이며~ 이 다음에 Struts 설치 한것을 테스트 해 보도록 하겠습니다.


 

크리에이티브 커먼즈 라이선스
Creative Commons License

MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기
For weblogic 8 #2

http://www.definejava.net/ @ ALT

MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #1에서 Xdoclet을 이용하여 배포에 필요한 xml과 class 파일을 생성하였습니다.
이제 실제로 Weblogic Server에 Application을 배포하여 이것이 잘 돌아가는지 확인 해 보겠습니다.
우선 MyEclipse에 Weblogic 서버 설정이 되어있어야 합니다.
설정 하는 방법은 우선 따로 정리하지 않고 나중에 다시 강좌를 한개 더 쓰겠습니다.
설정이 되어있다는 가장하에 진행하도록 하겠습니다.

  • Server정보에 WebLogic 8 이 있는지 확인하고 마우스 오른쪽 버튼을 누르고 Manage Deployment를 선택합니다.
    Server Deployments 폼이 나타나면 add를 클릭한 뒤 Project에서 HelloEJB를 선택 한 뒤 Finish를 누릅니다.

사용자 삽입 이미지

  • Deploy가 완료 되면 OK 버튼을 누르고 Weblogic 8 왼쪽에 + 버튼을 눌러 helloEJB Application이 등록되었는지 확인합니다.

사용자 삽입 이미지

  • Deploy된 helloEJB 밑에 helloEJBEJB 프로젝트와 helloEJBWEB 프로젝트가 있음을 알 수 있습니다.
  • Weblogic 관리자 화면에도 배포가 잘 되었는지 확인 해 봅니다.

사용자 삽입 이미지


이제 JSP 또는 JAVA 파일을 만들어서 방금 만든 EJB를 사용 해 보겠습니다.
Web Project를 미리 만들었기 떄문에 JSP에서 EJB를 확인 해 보겠습니다.

helloEJBWeb 프로젝트에서 helloEJB01.jsp 파일과 helloEJB02.jsp 파일을 만듭니다.
01파일은 로컬에서 EJB를 사용할 때 그리고 02는 원격지에서 EJB를 사용할 때의 예제 입니다.

helloEJB01.jsp와 helloEJB02.jsp에 다음과 같이 입력합니다.
helloEJB01.jsp

helloEJB01.jsp 시작


helloEJB02.jsp

helloEJB02.jsp 시작


이제 브라우져를 확인 하겠습니다. debug 모드로 서버를 시작하셨다면 따로 deploy를 다시 안해 주셔도 자동으로 jsp파일을 deploy 할 것입니다.

브라우져 주소창에 http://localhost:7001/helloEJBWeb/helloEJB01.jsphttp://localhost:7001/helloEJBWeb/helloEJB02.jsp 입력 하시고 Hello World가 뜨면 성공한 것 입니다.


크리에이티브 커먼즈 라이선스
Creative Commons License

MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기
For weblogic 8 #1


http://www.definejava.net/ @ ALT

이번에는 마이이클립스에서 Xdoclet을 이용하여 EJB 무상태 세션 빈을 만들어서 웹로직 8에 배포하는 과정을 적어 보았습니다.
  • 우선 프로젝트를 생성하겠습니다. 새 프로젝트 중 Enterprise Application Project를 선택합니다.
    EJB 프로젝트를 따로만들거나 WEB 프로젝트를 따로 만들어서 상관 없습니다.

사용자 삽입 이미지

  • Project Name에 알맞은 이름을 주시고 J2EE 버젼을 1.3으로 체크합니다. 웹로직 8에서는 1.3을 지원하는거 같더군요. 1.4 버젼으로 컴파일 했을 경우 오류가 떳었습니다
  • 밑에 Creation tasks는 WEB 프로젝트와 EJB 프로젝트를 사용할지 물어보는 탭 입니다. 두개다 체크를 하시고 next를 누릅니다.
사용자 삽입 이미지

  • 다음화면에서 WEB 프로젝트 생성을 선택하고 알맞은 WEB 프로젝트 이름을 주시고 next를 누릅니다.

사용자 삽입 이미지

  • 다음화면에서 EJB 프로젝트 생성을 선택하고 알맞은 EJB 프로젝트 이름을 주시고 finish를 누릅니다.
사용자 삽입 이미지

  • Package Exploer를 보시면 세개의 프로젝트가 생성이 되었습니다. helloEJB는 Application으로 이 밑에 여러 가지 EJB모듈과  WEB Application을 둘수 있습니다.
    helloEJBEJB 프로젝트에서는 실제적인 EJB 모듈을 생성할 것이며 helloEJBWeb에서는 이 모듈을 JNDI에 Look Up 하여 실제로 사용하여 보겠습니다.
사용자 삽입 이미지

  • helloEJBEJB의 src에서 마우스 오른쪽 버튼을 누르셔서 new에 Session Bean을 선택하여 세션빈 하나 생성해 줍니다.
사용자 삽입 이미지

  • 생성 후 열린 파일의 마지막 부분의 replaceWithRealBusinessMethod()를 getHelloWorld로 변경하고 위에 문서화 주석 부분을 변경합니다.
사용자 삽입 이미지

사용자 삽입 이미지

  • 이것으로 세션빈이 만들어 졌습니다. 이제 Project에서 Xdoclet 설정을 하고 해야합니다. helloEJBEJB 프로젝트의 속성을 들어가서 MyEclipse의 Xdoclet을 선택합니다.

사용자 삽입 이미지

  • Xdoclet에서 Add Standard 버튼을 눌러 Standard EJB를 선택합니다.
    ejbdoclet에서 오른쪽 버튼을 눌러 Add를 눌러 weblogic을 추가해줍니다.

사용자 삽입 이미지

  • 추가가 완료되면 weblogic을 선택하고 오른쪽에서 destDir 속성을 src/META-INF로 넣어 둡니다. 다음으로 OK 버튼을 누릅니다.
사용자 삽입 이미지

  • Xdoclet 설정이 완료되면 프로젝트에서 오른쪽 버튼을 누르고 MyEclipse 메뉴에서 Run Xdoclet을 클릭 합니다.
사용자 삽입 이미지

  • 다음과 같이 홈, 원격 인터페이스와 배포시 필요한 xml 파일들이 자동으로 생성됩니다.
사용자 삽입 이미지


다음에 MyEclipse에서 Xdoclet을 이용하여 sesstion bean 만들기 For weblogic 8 #2로 실제로 웹로직에 Application을 배포를 하고 테스트를 해보겠습니다.

Jakarta Commons Lang 1. 살펴보기

2007/05/15 16:05 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

Jakarta Commons Lang 1. 살펴보기


1. Jakarta Commons Lang Package
Commons Lang 라이브러리는  자바 표준 JDK의 java.lang 패키지에 있는 기능들을 확장 또는 사용이 편하게 만들어 놓은 패키지입니다.
즉java.lang 패키지의 기능을 보다 편리하게 사용하기 위한 패키지입니다.

최상위 패키지에는 여러가지 유틸 클레스를 포함하고 있으며 서브클레스에는 여러 종류의 클레스와 예외 클레스 등을 포함하고 있습니다.

2. Download
http://jakarta.apache.org/site/downloads/downloads_commons-lang.cgi
(현재 2.3 최신버젼)

3. 패키지 구조

패키지

org.apache.commons.lang
사용하기 편한 정적 메소드와, java.lang을 비롯한 핵심 클레스들을 추가로 제공합니다.

org.apache.comm1ons.lang.builder
equals(Object), toString(), hashCode(), and compareTo(Object) 메소드를 만드는 것을 지원합니다.

org.apache.commons.lang.enum
org.apache.commons.lang.enums로 변경되어 3.0 버젼부터는 없어 질것입니다.

org.apache.commons.lang.enums
c언어 스타일을 자바에서 사용 가능하도록 지원합니다.

org.apache.commons.lang.exception
예외처리 클레스를 제공합니다.

org.apache.commons.lang.math
java.math를 확장한 여러가지 수학통계학 메소드들을 지원합니다.

org.apache.commons.lang.mutable
변수에 대한 포장클레스를 지원합니다.

org.apache.commons.lang.text
java.text 패키지를 확장하여 text 능숙히 다룰수 있도록 지원합니다.

org.apache.commons.lang.time
시간과 날짜에 관련된 클레스들을 제공합니다.

이전 1 2 3 다음