티스토리 뷰

SpringMVC + ibatis // SpringConfig를 Multi // Annotation // Ajax + spring(xml/annotation) // mybatis 순으로 남은 2일동안 강의 진행

 


XML 설정을 이용한 개발 부분

 

config package

 

customer.xml

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="customer">
<select id="find" resultClass="hashmap">
    select * from customer where ssn=#value#
</select>
<select id="findCustomerBySsn" resultClass="model.CustomerVO">
    SELECT * FROM CUSTOMER WHERE ssn = #value#
</select>
</sqlMap>

 

 

member.xml

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="member">
<select id="findMemberById" resultClass="hashmap">
    SELECT * FROM MEMBER WHERE ID = #value#
</select>
</sqlMap>

 

SqlMapConfig.xml 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- 여러 sql 정의 xml 을 구분해서 사용하기 위해 
      네임 스페이스를 사용한다. 
 -->
<settings useStatementNamespaces="true"/>
    <!-- spring에서 dbcp 정보를 di하므로 필요없음. -->
  <!-- SQL 정의 XML을 링크  -->
   <sqlMap resource="config/member.xml"/>
   <sqlMap resource="config/customer.xml"/>
</sqlMapConfig>

 

 

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
30
31
32
33
34
35
package controller;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import model.CustomerService;
import model.CustomerVO;
 
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
 
public class CustomerController extends MultiActionController {
    private CustomerService customerService;
    
    public CustomerController(CustomerService customerService) {
        super();
        this.customerService = customerService;
        System.out.println("controller injection..."+customerService);
    }
 
    public ModelAndView findCustomer(HttpServletRequest request, 
            HttpServletResponse response, CustomerVO cvo) throws Exception{
        String ssn = cvo.getSsn();
        CustomerVO vo = customerService.findCustomerBySsn(ssn);
        ModelAndView mav = new ModelAndView();
        if(vo != null){
            mav.setViewName("find_ok");
            mav.addObject("info", vo);
        }else{
            mav.setViewName("find_fail");
        }
        return mav;
    }
}
 

 

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
30
31
32
33
34
35
36
package controller;
 
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import model.MemberService;
 
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
 
public class MemberController extends MultiActionController {
    private MemberService memberService;
    
    public MemberController(MemberService memberService) {
        super();
        this.memberService = memberService;
        System.out.println("controller injection..."+memberService);
    }
 
    public ModelAndView findMemberById(HttpServletRequest request, 
            HttpServletResponse response) throws Exception{
        String id = request.getParameter("id");
        Map map = memberService.findMemberById(id);
        ModelAndView mav = new ModelAndView();
        mav.setViewName("member_result");
        if(map == null){
            mav.addObject("info","찾는 회원 없음");
        }else{
            mav.addObject("info",map.toString());
        }
        return mav;
    }
}
 

 

1
2
3
4
5
6
7
8
9
package model;
 
import org.springframework.orm.ibatis.SqlMapClientTemplate;
 
public interface CustomerDao {
    public void setSqlMapClientTemplate(SqlMapClientTemplate sqlMapClientTemplate);
    public CustomerVO findCustomerBySsn(String ssn) throws Exception;
}
 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package model;
 
import org.springframework.orm.ibatis.SqlMapClientTemplate;
 
public class CustomerDaoImpl implements CustomerDao {
    private SqlMapClientTemplate sqlMapClientTemplate;
    @Override
    public void setSqlMapClientTemplate(
            SqlMapClientTemplate sqlMapClientTemplate) {
        this.sqlMapClientTemplate = sqlMapClientTemplate;
        System.out.println("dao injection..."+sqlMapClientTemplate);
    }
    @Override
    public CustomerVO findCustomerBySsn(String ssn) throws Exception {
        return (CustomerVO) sqlMapClientTemplate.queryForObject("customer.findCustomerBySsn", ssn);
    }
 
}
 

 

1
2
3
4
5
6
7
package model;
 
public interface CustomerService {
    public void setCustomerDao(CustomerDao customerDao);
    public CustomerVO findCustomerBySsn(String ssn) throws Exception;
}
 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package model;
 
public class CustomerServiceImpl implements CustomerService {
    private CustomerDao customerDao;
    @Override
    public void setCustomerDao(CustomerDao customerDao) {
        this.customerDao = customerDao;
        System.out.println("service injection..."+customerDao);
    }
 
    @Override
    public CustomerVO findCustomerBySsn(String ssn) throws Exception {
        return customerDao.findCustomerBySsn(ssn);
    }
 
}
 

 

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
30
31
package model;
 
public class CustomerVO {
    private String ssn;
    private String name;
    private String address;
    public String getSsn() {
        return ssn;
    }
    public void setSsn(String ssn) {
        this.ssn = ssn;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "CustomerVO [ssn=" + ssn + ", name=" + name + ", address="
                + address + "]";
    }
}
 

 

1
2
3
4
5
6
7
8
9
10
11
package model;
 
import java.util.Map;
 
import org.springframework.orm.ibatis.SqlMapClientTemplate;
 
public interface MemberDao {
    public void setSqlMapClientTemplate(SqlMapClientTemplate sqlMapClientTemplate);
    public Map findMemberById(String id) throws Exception;
}
 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package model;
 
import java.util.Map;
 
import org.springframework.orm.ibatis.SqlMapClientTemplate;
 
public class MemberDaoImpl implements MemberDao {
    private SqlMapClientTemplate sqlMapClientTemplate;
    @Override
    public void setSqlMapClientTemplate(
            SqlMapClientTemplate sqlMapClientTemplate) {
        this.sqlMapClientTemplate = sqlMapClientTemplate;
    }
 
    @Override
    public Map findMemberById(String id) throws Exception {
        // TODO Auto-generated method stub
        return (Map) sqlMapClientTemplate.queryForObject("member.findMemberById", id);
    }
 
}
 

 

1
2
3
4
5
6
7
8
9
package model;
 
import java.util.Map;
 
public interface MemberService {
    public void setMemberDao(MemberDao memberDao) throws Exception;
    public Map findMemberById(String id) throws Exception;
}
 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package model;
 
import java.util.Map;
 
public class MemberServiceImpl implements MemberService {
    private MemberDao memberDao;
    @Override
    public void setMemberDao(MemberDao memberDao) throws Exception {
        this.memberDao = memberDao;
        System.out.println("di..."+memberDao);
    }
 
    @Override
    public Map findMemberById(String id) throws Exception {
        return memberDao.findMemberById(id);
    }
 
}
 

 

 

WEB-INF 아래

member.xml

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
30
<?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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"
>
<!-- Member 관련 설정 MemberDaoImpl 정의시 sqlMapClientTemplate 주입
                                    MemberServiceImpl 주입시 MemberDaoImpl bean 주입
                                    MemberController 정의시 생성자에서 memberServiceImpl 주입
                                    setter 즉 rpoperty로 methodNameResolver를 주입
                                    주의) bean name="/member.do"
    -->
    <bean id="memberDao" class="model.MemberDaoImpl">
        <property name="sqlMapClientTemplate" ref="sqlMapClientTemplate"></property>
    </bean>
    <bean id="memberService" class="model.MemberServiceImpl">
        <property name="memberDao" ref="memberDao"></property>
    </bean>
    <bean name="/member.do" class="controller.MemberController">
        <constructor-arg>
            <ref bean="memberService"/>
        </constructor-arg>
        <property name="methodNameResolver" ref="methodNameResolver"></property>
    </bean>
</beans>
 

 

mvc.xml

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"
>
 
    <!-- HandlerMapping : 클라이언트 요청에 대응하는 컨트롤러 매핑 -->
    <bean id="handlerMapping"
        class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>
    <!-- ViewResolver : 컨트롤러 수행 후 view 를 찾는 방식에 대한 정의 ModelAndView -> ok 로 셋팅하면 
        /ok.jsp 를 찾는다. -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
<!-- MultiActionController에서 주입받아 사용한다.
    customer.do?command=find로 요청할 경우
    Controller의 find() method가 대응되어 실행하기 위해 설정한다.
 -->
    <bean id="methodNameResolver"
        class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
        <property name="paramName">
            <value>command</value>
        </property>
    </bean>
    <!-- dataSource -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>oracle.jdbc.driver.OracleDriver</value>
        </property>
        <property name="url">
            <value>jdbc:oracle:thin:@127.0.0.1:1521:xe</value>
        </property>
        <property name="username">
            <value>spring</value>
        </property>
        <property name="password">
            <value>oracle</value>
        </property>
        <property name="maxActive">
            <value>30</value>
        </property>
    </bean>
    <!-- ibatis SqlMapClient -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <!-- ibatis 설정파일을 한 곳에 위치시킨다. -->
        <property name="configLocation">
            <value>classpath:config/SqlMapConfig.xml</value>
        </property>
    </bean>
    <!-- ibatis와 연동하기 위한 Spring에서 제공하는 템플릿 오브젝트: 이후 spring aop transaction 등을 
        위해 사용 -->
    <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>
    <!-- 1. Dao 2. Service 3. Controller -->
    <bean id="customerDao" class="model.CustomerDaoImpl">
        <property name="sqlMapClientTemplate" ref="sqlMapClientTemplate"></property>
    </bean>
    <bean id="customerService" class="model.CustomerServiceImpl">
        <property name="customerDao" ref="customerDao"></property>
    </bean>
    <bean name="/customer.do" class="controller.CustomerController">
        <constructor-arg>
            <ref bean="customerService"/>
        </constructor-arg>
        <property name="methodNameResolver" ref="methodNameResolver"></property>
    </bean>
</beans>

 

web.xml

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>springmvc1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
      <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            WEB-INF/mvc.xml
            WEB-INF/member.xml
        </param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- .do로 요청되는 모든 클라이언트의 요청은 spring DispatcherSerlvet이 처리한다.
          별개의 spring config xml에 대한 설정이 없는 경우
          [서블릿이름]-servlet.xml로 찾게 된다.
   -->
   
   <!-- 모든 요청에 대한 인코딩 처리를 Spring이 제공하는 필터에서 처리 -->
   <filter>
       <filter-name>encodeFilter</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>encodeFilter</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

 

 

 


Annotation

 

config package

member.xml 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="member">    
    <insert id="registerMember" parameterClass="kosta.vo.MemberVO">
        insert into member values(#id#,#password#,#name#,#address#)
    </insert>
    <select id="login" parameterClass="kosta.vo.MemberVO" resultClass="kosta.vo.MemberVO">
        select id,password,name,address from member where id=#id# and password=#password#
    </select>
    <select id="findMember" resultClass="kosta.vo.MemberVO">
        SELECT * FROM MEMBER WHERE ID=#value#
    </select>
</sqlMap>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package kosta.aop.annot;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
 
@Aspect
public class LoggingSimple {
    private Log log=LogFactory.getLog(getClass());
    @Around("execution(public * kosta.service.*ServiceImpl.find*(..))")
    public Object checkLogging(ProceedingJoinPoint point) throws Throwable {
        String className=point.getTarget().getClass().getName();
        String methodName=point.getSignature().getName();
        Object params[]=point.getArgs();                    
        Object retValue =point.proceed();    
        if(params.length>0)
            log.info(className+" "+methodName+" "+params[0]);        
        else 
            log.debug("aop test");
        return retValue;
    }
}

 

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package kosta.control;
 
import java.sql.SQLException;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
 
import kosta.service.MemberService;
import kosta.vo.MemberVO;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
 
@Controller
public class MemberController {
    // memberServiceImpl 객체를 주입받는다. 
    @Resource(name = "memberServiceImpl")
    private MemberService memberService;
 
    @RequestMapping("/register.do")
    public ModelAndView register(HttpSession session, MemberVO vo) {
        
        System.out.println("register:" + vo );
        String message = "";
        
            try {
                memberService.registerMember(vo);
                message = vo.getName() + " register ok!";
            } catch (SQLException e) {
                message = "register fail..";
            }        
        return new ModelAndView("reg_result", "message", message);
    }
 
    @RequestMapping("/login.do")
    public ModelAndView login(HttpSession session, MemberVO vo) {
        System.out.println("login:" + vo);
        String message = "login fail..";
        try {
            MemberVO rvo = memberService.login(vo);
            if (rvo != null) {
                message = rvo.getName() + " login ok!";
                session.setAttribute("rvo", rvo);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return new ModelAndView("login_result", "message", message);
    }    
    
    @RequestMapping("/find.do")
    public ModelAndView findMember(@RequestParam("id") String id) throws SQLException{
        String message="find fail";
        MemberVO mv=memberService.findMember(id);
        if(mv!=null){
            message = "find ok~"+mv.toString();
        }
        return new ModelAndView("find_result","message", message);
    }
}

 

1
2
3
4
5
6
7
8
9
10
11
12
package kosta.dao;
 
import java.sql.SQLException;
 
import kosta.vo.MemberVO;
 
public interface MemberDao {
    public void registerMember(MemberVO vo) throws SQLException;
    public MemberVO login(MemberVO vo) throws SQLException;
    public MemberVO findMember(String id) throws SQLException;
}
 

 

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
30
31
package kosta.dao;
 
import java.sql.SQLException;
 
import javax.annotation.Resource;
 
import kosta.vo.MemberVO;
 
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Repository;
// 데이터 액세스 로직을 처리하는 클래스를 정의하는 사용 
// 생성되는 bean 이름은 memberDaoImpl 
@Repository
public class MemberDaoImpl implements MemberDao{
    //sqlMapClientTemplate 라는 bean id를 가진 객체(spring config xml)를
    // 아래 변수에 주입 
    @Resource(name="sqlMapClientTemplate")
    private SqlMapClientTemplate sqlMapClient;
    
    public void registerMember(MemberVO vo) throws SQLException {
        sqlMapClient.insert("member.registerMember", vo);
    }
    public MemberVO login(MemberVO vo) throws SQLException {
        return (MemberVO)sqlMapClient.queryForObject("member.login", vo);
    }
    @Override
    public MemberVO findMember(String id) throws SQLException {
        return (MemberVO) sqlMapClient.queryForObject("member.findMember",id);
    }
    
}

 

1
2
3
4
5
6
7
8
9
10
11
12
package kosta.service;
 
import java.sql.SQLException;
 
import kosta.vo.MemberVO;
 
public interface MemberService {
    public void registerMember(MemberVO vo) throws SQLException ;
    public MemberVO login(MemberVO vo) throws SQLException;
    public MemberVO findMember(String id) throws SQLException;
}
 

 

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
package kosta.service;
 
import java.sql.SQLException;
 
import javax.annotation.Resource;
 
import kosta.dao.MemberDao;
import kosta.vo.MemberVO;
 
import org.springframework.stereotype.Service;
// 비즈니스 로직을 처리하는 클래스를 정의할 때 사용 
@Service
public class MemberServiceImpl implements MemberService{
    // memberDaoImpl 객체를 주입받는다. 
    @Resource(name="memberDaoImpl")
    private MemberDao memberDao;
    public void registerMember(MemberVO vo) throws SQLException {
        memberDao.registerMember(vo);
    }
    public MemberVO login(MemberVO vo) throws SQLException {
        return memberDao.login(vo);
    }
    @Override
    public MemberVO findMember(String id) throws SQLException {
        return memberDao.findMember(id);
    }
    
}
 

 

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package kosta.vo;
 
public class MemberVO {
    private String id;
    private String password;
    private String name;
    private String address;
    public MemberVO() {
        super();
    }
    public MemberVO(String id, String password, String name, String address) {
        super();
        this.id = id;
        this.password = password;
        this.name = name;
        this.address = address;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "MemberVO [address=" + address + ", id=" + id + ", name=" + name
                + ", password=" + password + "]";
    }
}
 

 

WEB-INF 아래

 

mvc-db.xml

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
30
31
32
33
34
35
36
37
38
39
<?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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.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
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
        >
    <bean id="dbcp" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>oracle.jdbc.driver.OracleDriver</value>
        </property>
        <property name="url">
            <value>jdbc:oracle:thin:@127.0.0.1:1521:xe</value>
        </property>
        <property name="username">
            <value>spring</value>
        </property>
        <property name="password">
            <value>oracle</value>
        </property>
    </bean>
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation">
            <value>WEB-INF/SqlMapConfig.xml</value>
        </property>
        <property name="dataSource">
            <ref bean="dbcp" />
        </property>
    </bean>
<!-- ibatis와 연동하기 위한 Spring에서 제공하는  템플릿 오브젝트: 
이후 spring aop transaction 등을 위해 사용 -->
<bean id="sqlMapClientTemplate"
class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient" ref="sqlMapClient"/>
</bean>
</beans>

 

mvc-member.xml

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
<?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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.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
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
        >
    
    <context:component-scan base-package="kosta" />
    
    <!-- viewResolver: 컨트롤러가 view를 선택하는 방식 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    
    <!-- aop annotation 처리-->  
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    <bean id="logging" class="kosta.aop.annot.LoggingSimple"></bean>
    
</beans>

 

SqlMapConfig.xml

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
 
<sqlMapConfig>
<settings useStatementNamespaces="true"/>
    <sqlMap resource="config/member.xml"/>
</sqlMapConfig>

 

web.xml

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
30
31
32
33
34
35
36
37
38
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>springmvc</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>multipleConfig</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
                /WEB-INF/mvc-*.xml                
      </param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>multipleConfig</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>encodingFilter</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>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

 

 


Annotation 간단한 설명

@Component - 일반적인 용도의 컴포넌트를 표현

@Component - 스프링에 의해 자동 탐지됨.
public class BoardService{
@Autowired
private BoardDao boardDao;
.....

}
<context:componet-scan base-package="com.board" />
여러 패키지일 경우 컴마(,)로 팩키지를 구분

@Repository - 영속성 계층의 DAO컴포넌트

@Repository
public class BoardDaoImpl implements BoardDao{
.....
}

@Service - 서비스 계층의 서비스 컴포넌트

@Service
public class BoardService{
@Autowried
private BoardDao boardDao;
}

@Controller - 프리젠테이션 레이어의 컨트롤러 컴포넌트 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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 30 31
글 보관함