블로그 이미지
개발자의 조건은 어떤것도아닌 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
이번 프로젝트를 진행 하면서 최신버젼으로 셋팅을 해 보았는데 문제가 참 많았다.

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>


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

MVC 패턴 Model, View, Controller

2007/02/09 23:01 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

MVC 패턴 Model, View, Controller



1. Model
MVC 패턴중 MODEL 영역은 비즈니스 로직을 구현하는 부분이다.
대부분의 Application의 데이터는 데이터베이스에 의해 관리되고 Java에서는 JDBC API를 이용하여 접근하고 사용한다.
JDBC API를 이용하여 쿼리문을 날려 그 결과를 전달받는 형태의 모델이 가장 기본적이고 가장 많이 사용되고 있다.

Model이란 실질적으로 일을 처리하고 그 데이터를 가공하는 역활을 하는 영역을 뜻한다.
데이터 베이스 접근, 데이터 추가, 데이터 수정, 데이터 삭제 등 사용자가 어떠한 일을 처리하는것을 뜻한다.

2. View
뷰 영역은 개발자 보다는 디자이너와 밀접한 연관이있다. 이 부분은 프리젠테이션 로직으로써 실질적인 End-User에게 보여지는 영역이다.
이 영역은 대부분 Java AWT, SWING, JSP 등과 같이 UI와 밀접한 관련이 있는 API로 처리를 담당한다.

Java Web Applicaion에서 뷰 영역은 JSP와 JSTL을 통해 구현이 된다.

3. Controller
Controller는 전체적인 흐름을 관리하는 역활을 한다.
User의 요청이 들어오면 Controller는 이를 받아들여 사용자 요구에 맞는 비지니스로직(모델)을 실행시키며 비지니스로직의 결과에 따라 프리젠테이션 할 VIEW를 찾아 Forward 해준다.
즉 모델 영역의 데이터와 뷰 영역에서 필요로 하는 데이터 간의 차이를 조정해 주고 이것을 연결해주는 역활이 Controller의 역활이다.

이전 1 다음