- 로그인 예제

 

- 파일 업로드, 다운로드 예제

 

파일 업로드 관련 라이브러리

\spring-framework-3.0.2.RELEASE-dependencies\org.apache.commons\com.springsource.org.apache.commons.io\1.4.0폴더에서

 

com.springsource.org.apache.commons.fileupload-1.2.0.jar 복사 후 lib에 추가.

 

 

[ 소스경로 ]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1) web.xml

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>spring06_members</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <!-- 인코딩필터 설정하기 -->
  <filter>
      <filter-name>characterEncoding</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>characterEncoding</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <!-- /// applicationContext.xml을 읽어와 빈으로 등록하는 리스너 설정 /// -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener> 
 
  <!-- //////////////////// DispatcherServlet설정 //////////////////// -->
 <servlet>
      <servlet-name>mvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>mvc</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- /////////////////////////////////////////////////////////////// -->
 
</web-app>

 

(2) 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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- //// 전역적인 자원들이 등록 (Dao,Service,...) ////// -->
   
    <!-- 1. DataSource 설정(url,username,password,..) -->
    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"
            destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/>
    </bean>
    <!-- 2. SqlSessionFactory설정(dataSource,Mapper파일설정) -->   
    <bean id="sqlSessionFactory"
                        class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:test/mybatis/mybatis-config.xml"/>
    </bean>

    <!-- 3. SqlSessionTemplate설정(SqlSessionFactory주입) -->
    <bean id="sqlSessionTemplate"
            class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" index="0"/>   
    </bean>
   
    <!-- 파일 업로드 dao, service설정 -->

    <bean id="fileinfoDao" class="test.dao.FileinfoDao">
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"></property>
    </bean>
    <!-- service설정 -->
    <bean id="fileinfoService" class="test.service.FileinfoService">
        <property name="dao" ref="fileinfoDao"/>
    </bean>

    <!-- 로그인 dao, service 설정 -->

    <bean id="loginDao" class="test.dao.LoginDao">
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"></property>
    </bean>
    <!-- service설정 -->
    <bean id="loginService" class="test.service.LoginService">
        <property name="dao" ref="loginDao"/>
    </bean>

</beans>

 

 

(3) mvc-servlet.xml

- multipartResolver : 파일 업로드 관련

- 다운로드 창 설정

- Resolver 에 우선순위를 부여. 우선 순위가 높은 순서로 찾아간다.

 

<?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"
    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.1.xsd">

    <!-- @autowired 만 적용할려면 -->

    <context:annotation-config/>

 

    <bean class="test.controller.FileuploadController"/>
    <bean class="test.controller.FileListController"/>
    <bean class="test.controller.FileDownloadController"/>
    <bean class="test.controller.LoginController"/>
    <bean class="test.controller.FileDeleteController"/>
   
    <!--///////// 파일업로드 관련 시작 //////////////-->
    <!-- id속성이 반드시 multipartResolver 이어야 함. !! -->

    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 최대업로드 크기 설정(바이트단위) -->
        <property name="maxUploadSize" value="5242880"/>
    </bean>

    <!--///////// 파일업로드 관련 끝 //////////////-->
   
   
    <!-- 다운로드 뷰 생성(커스텀뷰) -->

    <bean id="filedownloadView" class="test.view.FiledownloadView"/>

 

    <!--///////// 뷰리절버등록 ///////////-->
    <!-- 뷰이름으로 뷰를 찾아가는 뷰리절버 등록 -->

    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="0"/><!-- 리절버중에서 실행순서. 0순위 -->
    </bean>

 

   <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"></property>
        <property name="order" value="1"/><!-- 리절버중에서 실행순서. 1순위 -->
    </bean>   
</beans>

 

(4) login.jsp

- id, password 체크

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>login.jsp</title>
</head>
<body>
<form action="login.do" method="post">
    아이디<input type="text" name="id"/><form:errors path="command.id"/><br/>
    비밀번호<input type="password" name="pwd"/><form:errors path="command.pwd"/><br/>
    <input type="submit" value="로그인"/>
</form>
</body>
</html>

 

 

 

(5)

(6)

(7)

(8)

(9)

(10)

(11)

(12)

(13)

(14)

(15)

(16)

(17)

(18)

(19)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #12(게시판 annotation사용)  (0) 2013.01.27
SPRING3.0 #11(게시판)  (0) 2013.01.27
SPRING3.0 #11(annotation)  (0) 2013.01.27
SPRING3.0 #10( MVC )  (0) 2013.01.27
SPRING3.0 #09( MVC )  (0) 2013.01.27
SPRING3.0 #11(게시판)의 내용을 annotation를 사용해서 해본다.

 

변경되는 부분만

 

[[ applicatonContext.xml ]]

- namespace에서 beans, context, mvc를 선택해서 사용한다. 

 

- <context:component-scan base-package="test"> : test패키지 하위 모두 적용한다.

 

- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  </context:component-scan>

  ; 그중에서 제외필터를 주면 해당 부분은 제외된다. 여기서는 Controller부분은 mvc-servlet.xml에서 처리하기 때문에 제외시켰다.

 

- <mvc:annotation-driven/> : mvc기반에서 annotation사용시 필수

 

- <bean id="propertiesConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="Location" value="/WEB-INF/database.properties"/>
</bean>

  ; database.properties파일에서 db정보를 읽어와 사용한다.

 

<?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"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        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.1.xsd">
    <!-- //// 전역적인 자원들이 등록 (Dao,Service,...) ////// -->
    
        <!-- test하위패키지  -->

        <context:component-scan base-package="test">

     

        <!--  controller는 생성되지 않도록 제외하는 설정.
        controller는 mvc-servelt.xml에서 하기때문에 -->

       <context:exclude-filter type="annotation"
            expression="org.springframework.stereotype.Controller"/>
       </context:component-scan>

   

    <!-- mvc기반에서 annotation사용시 필. -->

    <mvc:annotation-driven/>

 

     <bean id="propertiesConfig"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="Location" value="/WEB-INF/database.properties"/>
    </bean>

 

    <!-- 1. DataSource 설정(url,username,password,..) -->
    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
    <!--

         <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/> -->


        <!-- database.properties파일을읽어와서 셋팅하기. -->

        <property name="driverClassName" value="${driver}"/>

        <property name="url" value="${url}"/>
        <property name="username" value="${user}"/>

        <property name="password" value="${password}"/>

  </bean>


    <!-- 2. SqlSessionFactory설정(dataSource,Mapper파일설정) -->
    <bean id="sqlSessionFactory"
                        class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:test/mybatis/mybatis-config.xml"/>
    </bean>

 

    <!-- 3. SqlSessionTemplate설정(SqlSessionFactory주입) -->
    <bean id="sqlSessionTemplate"
            class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" index="0"/>   
    </bean>
   
</beans>

 

 

[[ database.properties]]

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
user=scott
password=tiger

 

 

[[ mvc-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"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        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.1.xsd">

   

    <context:component-scan base-package="test">
        <context:include-filter type="annotation"
            expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

 

    <mvc:annotation-driven/>

 

    <!-- /////////// MVC관련 Bean객체 등록(컨트롤러,뷰리절버,..) //////// -->
    <!-- controller는 annotation설정으로 필요없음. -->
   
    <!--///////// 뷰리절버등록 //////////////
        /WEB-INF/views/insert.jsp
    -->
    <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"></property>
    </bean>   
</beans>

 

* setter메소드는 필요없다.

 

[[ BoardDao.java ]]

package test.dao;

import java.util.HashMap;
import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import test.vo.BoardVo;
@Repository
public class BoardDao {
    @Autowired private SqlSessionTemplate sqlSessionTemplate;

        
    //페이지에 대한 글목록 반환
    public List<BoardVo> getList(HashMap<String, String> map){
        return (List<BoardVo>)sqlSessionTemplate.selectList("getList",map);
    }
    //글번호에 해당하는 글정보 반환
    public BoardVo getInfo(int num){
        return (BoardVo)sqlSessionTemplate.selectOne("getInfo",num);
    }
    //전체 글에 대한 갯수 반환
    public int getCount(HashMap<String, String> map){
        return (Integer)sqlSessionTemplate.selectOne("getCount", map);
    }
    //조회수 증가
    public int addHit(int num){
        return sqlSessionTemplate.update("addHit",num);
    }
    //이전글 정보 반환
    public BoardVo getPrev(int num){
        return (BoardVo)sqlSessionTemplate.selectOne("getPrev", num);
    }
    //다음글 정보 반환
    public BoardVo getNext(int num){
        return (BoardVo)sqlSessionTemplate.selectOne("getNext", num);
    }
    //입력
    public int insert(BoardVo vo){
        return sqlSessionTemplate.insert("insert", vo);
    }
}

 

 

[[ BoardService.java  ]]

package test.service;

import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import test.dao.BoardDao;
import test.vo.BoardVo;
@Service
public class BoardService {
    @Autowired private BoardDao dao;

 

    // 페이지에 대한 글목록 반환
    public List<BoardVo> getList(HashMap<String, String> map) {
        return dao.getList(map);
    }

    // 상세글보기
    public HashMap<String, BoardVo> getInfo(int num) {
        HashMap<String, BoardVo> map = new HashMap<>();
        map.put("vo", dao.getInfo(num));    //현재글에 대한 정보
        map.put("prev", dao.getPrev(num));    //이전글에 대한 정보
        map.put("next", dao.getNext(num));    //다음글에 대한 정보
       
        dao.addHit(num);//조회수 증가
        return map;
    }

    // 전체 글에 대한 갯수 반환
    public int getCount(HashMap<String, String> map) {
        return dao.getCount(map);
    }

    // 조회수 증가
    public int addHit(int num) {
        return dao.addHit(num);
    }

    // 이전글 정보 반환
    public BoardVo getPrev(int num) {
        return dao.getPrev(num);
    }

    // 다음글 정보 반환
    public BoardVo getNext(int num) {
        return dao.getNext(num);
    }

    // 입력
    public int insert(BoardVo vo) {
        return dao.insert(vo);
    }
}

 

 

[[ BoardListController.java ]]

package test.controller;

import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
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;

import test.page.PageUtil;
import test.service.BoardService;
import test.vo.BoardVo;

@Controller
public class BoardListController {
    @Autowired private BoardService boardService;    


    @RequestMapping("/list.do")
    public ModelAndView list(
            @RequestParam(value="title",required=false) String title,
            @RequestParam(value="writer",required=false) String writer,
            @RequestParam(value="content",required=false) String content,
            @RequestParam(value="keyword",required=false) String keyword,
            @RequestParam(value="pageNum",defaultValue="1") int pageNum){
       
        HashMap<String, String> map = new HashMap<>();
       
        map.put("title", title);
        map.put("writer", writer);
        map.put("content", content);
        map.put("keyword", keyword);
       
        int totalRowCount = boardService.getCount(map);

        PageUtil pu = new PageUtil(pageNum, totalRowCount, 10, 10);
       
        map.put("startNum", String.valueOf(pu.getStartRow()));
        map.put("endNum", String.valueOf(pu.getEndRow()));
       
        List<BoardVo> list = boardService.getList(map);
        ModelAndView mv = new ModelAndView("boardList");
        mv.addObject("list",list);
        mv.addObject("startPageNum", pu.getStartPageNum());
        mv.addObject("endPageNum",pu.getEndPageNum());
        mv.addObject("totalPageCount",pu.getTotalPageCount());
        mv.addObject("pageNum",pageNum);
       
        //검색조건도 넘긴다. 다시 2page 조회할때 검색조건을 넘기기 위해.
        mv.addObject("title",title);
        mv.addObject("writer",writer);
        mv.addObject("content",content);
        mv.addObject("keyword",keyword);
       
        return mv;
    }
}

 

[[ BoardDetailController.java ]]

package test.controller;

import java.util.HashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import test.service.BoardService;
import test.vo.BoardVo;

@Controller
public class BoardDetailController {
    @Autowired private BoardService boardService;


 

    @RequestMapping("/getInfo.do")
    public String detail(@RequestParam("num") int num, Model model){
        HashMap<String,BoardVo> map=boardService.getInfo(num);
       
        // model객체에 값을 담으면 뷰페이지에서 출력가능(유효함)
        model.addAttribute("vo", map.get("vo"));
        model.addAttribute("prev", map.get("prev"));
        model.addAttribute("next", map.get("next"));
       
        // String 으로 반환되는 것은 뷰이름을 의미.
        return "detail";
    }
}

 

'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #13 (파일 업로드, fileupload/filedownload)  (0) 2013.01.27
SPRING3.0 #11(게시판)  (0) 2013.01.27
SPRING3.0 #11(annotation)  (0) 2013.01.27
SPRING3.0 #10( MVC )  (0) 2013.01.27
SPRING3.0 #09( MVC )  (0) 2013.01.27
게시판 만들기

 

 기능>

- 조회 : 페이지 처리, 검색 기능

 

- 수정 

 

소스구조>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

테이블 구조

DROP TABLE board;

 

CREATE TABLE BOARD (
 NUM NUMBER(9) PRIMARY KEY,
 WRITER VARCHAR2(100),--글쓴이
 TITLE VARCHAR2(300),--제목
 CONTENT CLOB, -- 내용
 HIT NUMBER(3), --조회수
 REGDATE DATE --등록일시
);

 

DROP SEQUENCE BOARD_SEQ;

 

CREATE SEQUENCE BOARD_SEQ;

 

 

(1) web.xml

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>spring06_members</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <!-- 인코딩필터 설정하기 -->
  <filter>
      <filter-name>characterEncoding</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>characterEncoding</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <!-- /// applicationContext.xml을 읽어와 빈으로 등록하는 리스너 설정 /// -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>  
  <!-- //////////////////// DispatcherServlet설정 //////////////////// -->
 <servlet>
      <servlet-name>mvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>mvc</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- /////////////////////////////////////////////////////////////// -->
 
</web-app>

 

 

(2) 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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- //// 전역적인 자원들이 등록 (Dao,Service,...) ////// -->
   
    <!-- 1. DataSource 설정(url,username,password,..) -->
    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"
            destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/>
    </bean>
    <!-- 2. SqlSessionFactory설정(dataSource,Mapper파일설정) -->   
    <bean id="sqlSessionFactory"
                        class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:test/mybatis/mybatis-config.xml"/>
    </bean>

    <!-- 3. SqlSessionTemplate설정(SqlSessionFactory주입) -->
    <bean id="sqlSessionTemplate"
            class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" index="0"/>   
    </bean>
   
    <bean id="boardDao" class="test.dao.BoardDao">
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>       
    </bean>
    <bean id="boardService" class="test.service.BoardService">
        <property name="dao" ref="boardDao"></property>
    </bean>
</beans>

 

(3) mvc-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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- /////////// MVC관련 Bean객체 등록(컨트롤러,뷰리절버,..) //////// -->
    <!-- //////////// 컨트롤러 등록 /////////////////-->
    <bean class="test.controller.BoardListController">
        <property name="boardService" ref="boardService"/>
    </bean>
    <bean class="test.controller.BoardDetailController">
        <property name="boardService" ref="boardService"/>
    </bean>
   
    <!--///////// 뷰리절버등록 //////////////
        /WEB-INF/views/insert.jsp
    -->
    <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"></property>
    </bean>   
</beans>

 

(4) main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <ul>
        <li><a href="list.do">글목록</a></li>
    </ul>
</body>
</html>

 

(5) boardList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
    function setCheckBox(){
        if(eval('${not empty title}')){
            document.getElementsByName("title")[0].checked=true;
        }
        if(eval('${not empty content}')){
            document.getElementsByName("content")[0].checked=true;
        }
        if(eval('${not empty writer}')){
            document.getElementsByName("writer")[0].checked=true;
        }
    }
</script>
<body onload="setCheckBox()">
    <h2>게시판</h2>
    <table border="1" cellpadding="0" cellspacing="0" width="600px">
        <tr>
            <th>글번호</th><th>작성자</th><th>제목</th><th>등록일</th>
        </tr>
        <c:forEach var="vo" items="${ list }">
            <tr>
                <td>${ vo.num }</td>
                <td>${ vo.writer }</td>
                <td><a href="getInfo.do?num=${ vo.num }">${ vo.title }</a></td>
                <td>${ vo.regdate }</td>
            </tr>
        </c:forEach>
    </table>
    <div>
        <!-- 검색조건 받은것을 변수에 담아서 처리. -->
        <c:set var="pms" value="&writer=${ writer }&title=${ title }&content=${ content }&keyword=${ keyword }"/>
        <c:forEach var="i" begin="${ startPageNum }" end="${ endPageNum }">
            <c:if test="${ pageNum== i }">
                <span style="color:red"><a href="list.do?pageNum=${ i }${ pms }">[${ i }]</a></span>
            </c:if>
            <c:if test="${ pageNum!= i }">
                <span><a href="list.do?pageNum=${ i }${ pms }">[${ i }]</a></span>
            </c:if>
        </c:forEach>
    </div>
    <div>
        <form method="post" action="list.do">
            <input type="checkbox" name="title" value="title"/>제목
            <input type="checkbox" name="writer" value="writer"/>작성자
            <input type="checkbox" name="content" value="content"/>내용
            <input type="text" name="keyword" value="${ keyword }"/>
            <input type="submit" value="검색"/>
        </form>
    </div>
    <div>
    <a href="list.do">전체 글 보기</a>
    </div>
</body>
</html>

 

 

(6) detail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" width="600">
    <tr>
        <td>글번호</td>
        <td>${ vo.num }</td>
    </tr>
    <tr>
        <td>글제목</td>
        <td>${ vo.title }</td>
    </tr>
    <tr>
        <td>조회수</td>
        <td>${ vo.hit }</td>
    </tr>
    <tr>
        <td>작성자</td>
        <td>${ vo.writer }</td>
    </tr>
    <tr>
        <td>내용</td>
        <td><textarea cols="60" rows="5" disabled>${ vo.content }</textarea></td>
    </tr>
    <tr>
        <td>이전글</td>
        <td><a href="getInfo.do?num=${ prev.num }">${ prev.title }</a></td>
    </tr>
    <tr>
        <td>다음글</td>
        <td><a href="getInfo.do?num=${ next.num }">${ next.title }</a></td>
    </tr>
</table>
</body>
</html>

 

 

(7) 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>
    <typeAliases>
        <typeAlias alias="board" type="test.vo.BoardVo"/>
    </typeAliases>

    <!--//////////// SQL구문이 들어있는 SQL Mapper파일 포함 /////////////////-->
    <mappers>
        <mapper resource="test/mybatis/BoardMapper.xml" />
    </mappers>
</configuration>

 

 

 

(8) BoardMapper.xml

- resultMap 사용법

- where 만들기 ( 조회조건을 동적으로 )

- CDATA 사용 : 내용을 문자열로 간주함.

<?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="test.mybatis.BoardMapper">
    <!-- select로 추출된 컬럼과 자바객체의 필드(멤버변수)와 매핑을 설정.
        예) clob 타입 을 string 타입으로 매핑.
        select로 뽑아온 컬럼명과 멤버변수의 이름이 다른 경우 매핑
     -->

     <resultMap type="test.vo.BoardVo" id="boardmap">
        <result column="num" property="num" />
        <result column="writer" property="writer" />
        <result column="title" property="title" />
        <!-- CLOB형을 String타입과 매핑 -->
        <result column="content" property="content" jdbcType="CLOB" javaType="string" />
        <result column="hit" property="hit" />
        <result column="regdate" property="regdate" />
    </resultMap>

 

    <insert id="insert" parameterType="board">
        insert into board
        values
        ( board_seq.nextval, #{writer}, #{title}, #{content}, #{hit}, sysdate )
    </insert>


    <!-- 전체 글의 갯수 구하기 -->

    <select id="getCount" resultType="int" parameterType="hashmap">
        select NVL(count(1),0) from board

        <where>
            <if test="title!=null and title!=''">
                title like '%'||#{keyword}||'%'
            </if>
            <if test="writer!=null and writer!=''">
                or writer like '%'||#{keyword}||'%'
            </if>
            <if test="content!=null and content!=''">
                or content like '%'||#{keyword}||'%'
            </if>
        </where>

    </select>

 

    <!-- 상세 글보기  -->
    <select id="getInfo" parameterType="int" resultMap="boardmap">
        select * from board
         where num=#{value}
    </select>
    <!-- 조회수 증가 -->
    <update id="addHit" parameterType="int">
        update board
           set hit= hit + 1
         where num=#{value}
    </update>
    <!-- 현재 페이지에 해당하는 글목록 얻어오기 -->
    <select id="getList" parameterType="hashmap" resultMap="boardmap">
        SELECT *
          FROM (
                 SELECT A.*, ROWNUM  RNUM
                   FROM (
                          SELECT * FROM BOARD

                          <where>
                            <if test="title!=null and title!=''">
                                title like '%'||#{keyword}||'%'
                            </if>
                            <if test="writer!=null and writer!=''">
                                or writer like '%'||#{keyword}||'%'
                            </if>
                            <if test="content!=null and content!=''">
                                or content like '%'||#{keyword}||'%'
                            </if>
                        </where>

                        ORDER BY NUM DESC
                        ) A
               )

    <![CDATA[
         WHERE RNUM >= #{startNum}
           AND RNUM <= #{endNum}
         ]]>

   </select>
   
    <!-- 이전글보기
        이전 : 최신글
        다음 : 과거글
    -->
    <select id="getPrev" parameterType="int" resultType="board">
        <![CDATA[
        SELECT *
          FROM (
                 SELECT * FROM BOARD
                  WHERE NUM > #{value} 
                  ORDER BY NUM ASC
               )
         WHERE ROWNUM = 1
         ]]>
    </select>
    <!-- 다음글 -->
    <select id="getNext" parameterType="int" resultType="board">
        <![CDATA[
        SELECT *
          FROM (
                 SELECT * FROM BOARD
                  WHERE NUM < #{value} 
                  ORDER BY NUM DESC
               )
         WHERE ROWNUM = 1
         ]]>
    </select>
</mapper>

 

(9) BoardVo.java

package test.vo;

import java.sql.Timestamp;

public class BoardVo {
    private int num;
    private String writer;
    private String title;
    private String content;
    private int hit;
    private Timestamp regdate;
    public BoardVo(){}
    public BoardVo(int num, String writer, String title, String content,
            int hit, Timestamp regdate) {
        super();
        this.num = num;
        this.writer = writer;
        this.title = title;
        this.content = content;
        this.hit = hit;
        this.regdate = regdate;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public String getWriter() {
        return writer;
    }
    public void setWriter(String writer) {
        this.writer = writer;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public int getHit() {
        return hit;
    }
    public void setHit(int hit) {
        this.hit = hit;
    }
    public Timestamp getRegdate() {
        return regdate;
    }
    public void setRegdate(Timestamp regdate) {
        this.regdate = regdate;
    }   
}

 

(10) BoardDao.java

package test.dao;

import java.util.HashMap;
import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;

import test.vo.BoardVo;

public class BoardDao {
    private SqlSessionTemplate sqlSessionTemplate;

    //spring통해 받아 와야 하기 때문에
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }
   
    //페이지에 대한 글목록 반환
    public List<BoardVo> getList(HashMap<String, String> map){
        return (List<BoardVo>)sqlSessionTemplate.selectList("getList",map);
    }
    //글번호에 해당하는 글정보 반환
    public BoardVo getInfo(int num){
        return (BoardVo)sqlSessionTemplate.selectOne("getInfo",num);
    }
    //전체 글에 대한 갯수 반환
    public int getCount(HashMap<String, String> map){
        return (Integer)sqlSessionTemplate.selectOne("getCount", map);
    }
    //조회수 증가
    public int addHit(int num){
        return sqlSessionTemplate.update("addHit",num);
    }
    //이전글 정보 반환
    public BoardVo getPrev(int num){
        return (BoardVo)sqlSessionTemplate.selectOne("getPrev", num);
    }
    //다음글 정보 반환
    public BoardVo getNext(int num){
        return (BoardVo)sqlSessionTemplate.selectOne("getNext", num);
    }
    //입력
    public int insert(BoardVo vo){
        return sqlSessionTemplate.insert("insert", vo);
    }
}

 

(11) PageUtil.java

; 페이지 처리를 위해 class를 만든다.

; 전체 페이지, 시작,끝 페이지 번호 등 관련 정보를 가져온다.

package test.page;

public class PageUtil {
    private int pageNum;        //현재 페이지 번호
    private int startRow;        //시작행번호
    private int endRow;            //끝 행번호
    private int totalPageCount;    //전체페이지갯수
    private int startPageNum;    //시작페이지번호
    private int endPageNum;        //끝페이지번호
    private int rowBlockCount;    //보여줄 글의 행갯수
    private int pageBlockCount;    //한페이지에 보여줄 페이지 갯수
    private int totalRowCount;    //전체글의 갯수
    public PageUtil() {
        // TODO Auto-generated constructor stub
    }
   
    /**
     *
     * @param pageNum 현재페이지번호
     * @param totalRowCount    전체글의 갯수
     * @param rowBlockCount    한페이지에 보여줄 글의 갯수
     * @param pageBlockCount    한페이지에 보여줄 페이지의 갯수
     */
    public PageUtil(int pageNum,
                    int totalRowCount,
                    int rowBlockCount,
                    int pageBlockCount        ){
        this.pageNum = pageNum;
        this.totalRowCount = totalRowCount;
        this.rowBlockCount = rowBlockCount;
        this.pageBlockCount = pageBlockCount;
        //시작행번호 구하기
        startRow = (pageNum - 1)*rowBlockCount + 1;
        //끝행번호 구하기
        endRow = startRow + rowBlockCount - 1;
        //전체 페이지 갯수 구하기
        totalPageCount=(int)Math.ceil(totalRowCount/(double)rowBlockCount);
        //시작페이지번호 구하기
        startPageNum = (pageNum-1)/pageBlockCount*pageBlockCount + 1;
        //끝페이지번호 구하기
        endPageNum = startPageNum + pageBlockCount - 1;
        if( totalPageCount < endPageNum ){
            endPageNum = totalPageCount;
        }
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }

    public int getStartRow() {
        return startRow;
    }

    public void setStartRow(int startRow) {
        this.startRow = startRow;
    }

    public int getEndRow() {
        return endRow;
    }

    public void setEndRow(int endRow) {
        this.endRow = endRow;
    }

    public int getTotalPageCount() {
        return totalPageCount;
    }

    public void setTotalPageCount(int totalPageCount) {
        this.totalPageCount = totalPageCount;
    }

    public int getStartPageNum() {
        return startPageNum;
    }

    public void setStartPageNum(int startPageNum) {
        this.startPageNum = startPageNum;
    }

    public int getEndPageNum() {
        return endPageNum;
    }

    public void setEndPageNum(int endPageNum) {
        this.endPageNum = endPageNum;
    }

    public int getRowBlockCount() {
        return rowBlockCount;
    }

    public void setRowBlockCount(int rowBlockCount) {
        this.rowBlockCount = rowBlockCount;
    }

    public int getPageBlockCount() {
        return pageBlockCount;
    }

    public void setPageBlockCount(int pageBlockCount) {
        this.pageBlockCount = pageBlockCount;
    }

    public int getTotalRowCount() {
        return totalRowCount;
    }

    public void setTotalRowCount(int totalRowCount) {
        this.totalRowCount = totalRowCount;
    }
}

 

(12) BoardService.java

package test.service;

import java.util.HashMap;
import java.util.List;

import test.dao.BoardDao;
import test.vo.BoardVo;

public class BoardService {
    private BoardDao dao;

    public void setDao(BoardDao dao) {
        this.dao = dao;
    }

    // 페이지에 대한 글목록 반환
    public List<BoardVo> getList(HashMap<String, String> map) {
        return dao.getList(map);
    }

    // 상세글보기
    public HashMap<String, BoardVo> getInfo(int num) {
        HashMap<String, BoardVo> map = new HashMap<>();
        map.put("vo", dao.getInfo(num));    //현재글에 대한 정보
        map.put("prev", dao.getPrev(num));    //이전글에 대한 정보
        map.put("next", dao.getNext(num));    //다음글에 대한 정보
       
        dao.addHit(num);//조회수 증가
        return map;
    }

    // 전체 글에 대한 갯수 반환
    public int getCount(HashMap<String, String> map) {
        return dao.getCount(map);
    }

    // 조회수 증가
    public int addHit(int num) {
        return dao.addHit(num);
    }

    // 이전글 정보 반환
    public BoardVo getPrev(int num) {
        return dao.getPrev(num);
    }

    // 다음글 정보 반환
    public BoardVo getNext(int num) {
        return dao.getNext(num);
    }

    // 입력
    public int insert(BoardVo vo) {
        return dao.insert(vo);
    }
}

 

 

(13) BoardListController.java

- 파라미터를 받을 때 값이 없으면 NullpointException이 발생한다. 그럴경우

@RequestParam(value="title",required=false) ...

          required=false를 사용해서 필수가 아니라는 것을 명시한다.

 

- 파라미터 값이 없을 경우 기본값을 지정할수 있다.

        @RequestParam(value="pageNum",defaultValue="1") int pageNum){

- view 정보를 

    ModelAndView mv = new ModelAndView("boardList"); 파라미터로 넘기면 따로 지정하지 않아도 된다.

(   boardList.jsp페이지로..)

 

- 페이지 처리에서 검색조건을 받을 경우 넘길때  받은 조건내용를 보내야 한다. 다음 페이지에서도 검색조건으로 보여야 하기 때문에 .

 

package test.controller;

import java.util.HashMap;
import java.util.List;

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;

import test.page.PageUtil;
import test.service.BoardService;
import test.vo.BoardVo;

@Controller
public class BoardListController {
    private BoardService boardService;
    public void setBoardService(BoardService boardService) {
        this.boardService = boardService;
    }
   
    @RequestMapping("/list.do")
    public ModelAndView list(
            @RequestParam(value="title",required=false) String title,
            @RequestParam(value="writer",required=false) String writer,
            @RequestParam(value="content",required=false) String content,
            @RequestParam(value="keyword",required=false) String keyword,
            @RequestParam(value="pageNum",defaultValue="1") int pageNum){
        
        HashMap<String, String> map = new HashMap<>();
       
        map.put("title", title);
        map.put("writer", writer);
        map.put("content", content);
        map.put("keyword", keyword);
       
        int totalRowCount = boardService.getCount(map);

        PageUtil pu = new PageUtil(pageNum, totalRowCount, 10, 10);
       
        map.put("startNum", String.valueOf(pu.getStartRow()));
        map.put("endNum", String.valueOf(pu.getEndRow()));
       
        System.out.println("startNum:" + pu.getStartRow());
        System.out.println("endNum:" + pu.getEndRow());
       
        List<BoardVo> list = boardService.getList(map);
        ModelAndView mv = new ModelAndView("boardList");
        mv.addObject("list",list);
        mv.addObject("startPageNum", pu.getStartPageNum());
        mv.addObject("endPageNum",pu.getEndPageNum());
        mv.addObject("totalPageCount",pu.getTotalPageCount());
        mv.addObject("pageNum",pageNum);
       
        //검색조건도 넘긴다. 다시 2page 조회할때 검색조건을 넘기기 위해.
        mv.addObject("title",title);
        mv.addObject("writer",writer);
        mv.addObject("content",content);
        mv.addObject("keyword",keyword);
       
        return mv;
    }
}

 

 

(14) BoardDetailController.java

- ModelAndView를 생성 해서 addObject로 넘기지 않고

  public String detail(@RequestParam("num") int num, Model model){
     파라미터에 Model 추가해서 사용해도 된다.

 넘길때는 addAttribute

 

- 파라미터에 받을 객체를 사용하면 받을 수 있다. HttpSession, ...

package test.controller;

import java.util.HashMap;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import test.service.BoardService;
import test.vo.BoardVo;

@Controller
public class BoardDetailController {
    private BoardService boardService;
    public void setBoardService(BoardService boardService) {
        this.boardService = boardService;
    }
    @RequestMapping("/getInfo.do")
    public String detail(@RequestParam("num") int num, Model model){
        HashMap<String,BoardVo> map=boardService.getInfo(num);
       
        // model객체에 값을 담으면 뷰페이지에서 출력가능(유효함)
        model.addAttribute("vo", map.get("vo"));
        model.addAttribute("prev", map.get("prev"));
        model.addAttribute("next", map.get("next"));
        
        // String 으로 반환되는 것은 뷰이름을 의미.
        return "detail";
    }
}

'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #13 (파일 업로드, fileupload/filedownload)  (0) 2013.01.27
SPRING3.0 #12(게시판 annotation사용)  (0) 2013.01.27
SPRING3.0 #11(annotation)  (0) 2013.01.27
SPRING3.0 #10( MVC )  (0) 2013.01.27
SPRING3.0 #09( MVC )  (0) 2013.01.27
이전 spring3.0#10에서 했던 mvc예제를 annotation를 사용하는 방법으로 바꿔서 해본다.

소스구조는 #10과 동일하다. 

 

소스구조>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[[ web.xml ]]

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>spring06_members</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <!-- 인코딩필터 설정하기 -->
  <filter>
      <filter-name>characterEncoding</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>characterEncoding</filter-name>
      <url-pattern>/-</url-pattern>
  </filter-mapping>
 
  <!-- /// applicationContext.xml을 읽어와 빈으로 등록하는 리스너 설정 /// -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>  
  
  <!-- //////////////////// DispatcherServlet설정 //////////////////// -->
 <servlet>
      <servlet-name>mvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>mvc</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- /////////////////////////////////////////////////////////////// -->
  </web-app>

 

 

[[ applicatonContext.xml ]]

; annotation사용으로 변경됨.

이전>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- //// 전역적인 자원들이 등록 (Dao,Service,...) ////// -->    
    <!-- 1. DataSource 설정(url,username,password,..) -->
    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"
            destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/>
    </bean>
    <!-- 2. SqlSessionFactory설정(dataSource,Mapper파일설정) -->   
    <bean id="sqlSessionFactory"
                        class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:test/mybatis/-.xml"/>
    </bean>

    <!-- 3. SqlSessionTemplate설정(SqlSessionFactory주입) -->
    <bean id="sqlSessionTemplate"
            class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" index="0"/>   
    </bean>    
    <!-- 4. Dao생성(SqlSessionTemplate주입) -->
    <bean id="membersDao" class="test.dao.MembersDao">
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
    </bean>

</beans>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Namespace에서 context선택.

 

 

<?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"
 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.1.xsd">
 <!-- //// 전역적인 자원들이 등록 (Dao,Service,...)
  MVC관련없는 Bean객체 정의
  namespace의 context 선택해야 함.
 ////// -->

<context:component-scan base-package="test.dao"/>

 

<!-- 1. DataSource 설정(url,username,password,..) -->
 <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"
   destroy-method="close">
  <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
  <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
  <property name="username" value="scott"/>
  <property name="password" value="tiger"/>
 </bean>
 <!-- 2. SqlSessionFactory설정(dataSource,Mapper파일설정) --> 
 <bean id="sqlSessionFactory"
      class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="mapperLocations" value="classpath:test/mybatis/*.xml"/>
 </bean>

 <!-- 3. SqlSessionTemplate설정(SqlSessionFactory주입) -->
 <bean id="sqlSessionTemplate"
   class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactory" index="0"/> 
 </bean>

 

<!-- dao 주입이 없어짐. -->

 

</beans>

 

 

 

[[ mvc-servlet.xml ]]

; annotation사용으로 변경됨.

이전

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- /////////// MVC관련 Bean객체 등록(컨트롤러,뷰리절버,..) //////// -->
    <!-- //////////// 컨트롤러 등록 /////////////////-->
    <bean class="test.controller.InsertController">
        <property name="membersDao" ref="membersDao"/>
    </bean>   
    <bean class="test.controller.ListController">
        <property name="membersDao" ref="membersDao"/>
    </bean>   
    <bean class="test.controller.DeleteController">
        <property name="dao" ref="membersDao"/>
    </bean>
    <bean class="test.controller.UpdateController">
        <property name="dao" ref="membersDao"/>
    </bean>
    <!--///////// 뷰리절버등록 //////////////
        /WEB-INF/views/insert.jsp

    -->
    <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"></property>
    </bean>   
</beans>

<?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"
 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.1.xsd">

 <!-- /////////// MVC관련 Bean객체 등록(컨트롤러,뷰리절버,..) //////// -->
 <!-- //////////// 컨트롤러 등록 /////////////////-->

 <context:component-scan base-package="test.controller"></context:component-scan>

 <!--///////// 뷰리절버등록 //////////////
  /WEB-INF/views/insert.jsp
 -->
 <bean
 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/views/"/>
  <property name="suffix" value=".jsp"></property>
 </bean>
</beans>

; 컨트롤러 등록이 생략됨.

 

 

 

(1) main.jsp

; 동일.

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 <ul>
  <li><a href="insert.do">회원가입</a></li>
  <li><a href="list.do">회원목록</a></li>
 </ul>
</body>
</html>

 

(2) insert.jsp

; 동일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>회원가입</h2>
<form action="insert.do" method="post">
    아이디<input type="text" name="id" /><br/>
    비밀번호<input type="password" name="pwd" /><br/>
    이메일<input type="text" name="email"/><br/>
    전화번호<input type="text" name="phone"/><br/>
    <input type="submit" value="전송" />
</form>
</body>
</html>

 

(3) InsertController.java

; @Autowired설정: setter 메소드를 사용안해도 된다.

; @RequestMapping(value="/...do",method=RequestMethod.GET) Get방식 전송

                                                             RequestMethod.POST) POST방식 전송

    .do 이름을 동일하게 사용할수 있다.  (get,post 방식으로 구분하여)

package test.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import test.dao.MembersDao;
import test.vo.MembersVo;

 

@Controller
public class InsertController {
    @Autowired private MembersDao membersDao;
   
    /*@RequestMapping("/insertForm.do")*/
    @RequestMapping(value="/insert.do",method=RequestMethod.GET)
    public String insertForm(){
        //String타입이 반환되는것은 뷰이름을 의미함.
        return "insert";
    }
   
    @RequestMapping("/insert.do")
    public String insert(MembersVo vo){
        //db에 vo저장하기
        int n = membersDao.insert(vo);
        if(n>0){
            //뷰페이지로 이동 ==> 리다이렉트방식으로 페이지 이동하기
            return "redirect:/main.jsp";
        }else{
            return "redirect:/error.jsp";
        }
    }
}

 


(4) DeleteController.java

; @Autowired설정.

package test.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
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;

import test.dao.MembersDao;
import test.vo.MembersVo;

@Controller
public class DeleteController {
    @Autowired private MembersDao dao;
   
    @RequestMapping("/delete.do")
    public ModelAndView delete(String id){
        System.out.println("id:" + id);
        dao.delete(id);

        //DB에서 회원정보 얻어오기
        List<MembersVo> list = dao.getList();
        //결과값(모델)과 뷰이름을 담을 객체 생성
        ModelAndView mv = new ModelAndView("memlist");
        //모델에 결과값 담기
        mv.addObject("list", list);
        return mv;
    }
}

 


(5) UpdateController.java

; @Autowired설정.

package test.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import test.dao.MembersDao;
import test.vo.MembersVo;

@Controller
public class UpdateController {
    @Autowired private MembersDao dao;
   
    @RequestMapping(value="/update.do",method=RequestMethod.GET)
    public ModelAndView updateForm(String id){
        //DB에서 회원정보 얻어오기
        MembersVo vo = dao.getInfo(id);
        //결과값(모델)과 뷰이름을 담을 객체 생성
        ModelAndView mv = new ModelAndView("update");
        //모델에 결과값 담기
        mv.addObject("vo", vo);
        return mv;
    }    
    @RequestMapping("/update.do")
    public String update(MembersVo vo){
        int n = dao.update(vo);
        System.out.println("id:" + vo.getId());
        if ( n>0){
            System.out.println("성공");
            return "redirect:/list.do";
        }else{
            System.out.println("실패");
            return "redirect:/error.jsp";
        }
    }
}

 

 

 

(6) ListController.java

; @Autowired설정.

package test.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import test.dao.MembersDao;
import test.vo.MembersVo;

@Controller
public class ListController {
    @Autowired private MembersDao membersDao;
   
    @RequestMapping("/list.do")
    public ModelAndView list(){
        //DB에서 회원정보 얻어오기
        List<MembersVo> list = membersDao.getList();
        //결과값(모델)과 뷰이름을 담을 객체 생성
        ModelAndView mv = new ModelAndView("memlist");
        //모델에 결과값 담기
        mv.addObject("list", list);
        return mv;
    }
}

 

 

(7) MembersDao.java

; @Autowired를 사용하면 setter 메소드가 필요없다.

; @Repository 사용.

package test.dao;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import test.vo.MembersVo;
//@Controller,@Service,@Component
@Repository
public class MembersDao {
   
    @Autowired private SqlSessionTemplate sqlSessionTemplate;

 

    public List<MembersVo> getList(){
        return (List<MembersVo>)sqlSessionTemplate.selectList("getList");
    }
    public int insert(MembersVo vo){
        return sqlSessionTemplate.insert("insert", vo);
    }
    public int delete(String id){
        return sqlSessionTemplate.delete("delete", id);
    }
    public int update(MembersVo vo){
        return sqlSessionTemplate.update("update", vo);
    }
    public MembersVo getInfo(String id){
        return (MembersVo)sqlSessionTemplate.selectOne("getInfo", id);
    }
}

 


(8) MembersVo.java

;기존과 동일

package test.vo;

import java.sql.Timestamp;

public class MembersVo {
    private String id;
    private String pwd;
    private String email;
    private String phone;
    private Timestamp regdate;
   
    public MembersVo(){}
   
    public MembersVo(String id, String pwd, String email, String phone, Timestamp regdate) {
        super();
        this.id = id;
        this.pwd = pwd;
        this.email = email;
        this.phone = phone;
        this.regdate = regdate;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public Timestamp getRegdate() {
        return regdate;
    }
    public void setRegdate(Timestamp regdate) {
        this.regdate = regdate;
    }
}

 


(9) MembersMapper.java

;기존과 동일

<?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="orm.mybatis.MembersMapper">
    <insert id="insert" parameterType="test.vo.MembersVo">
        insert into Members values ( #{ id }, #{ pwd }, #{ email }, #{ phone }, sysdate )
    </insert>
    <select id="getList" resultType="test.vo.MembersVo">
        select * from members
    </select>
    <delete id="delete" parameterType="String">
        delete from members where id=#{value}
    </delete>
    <select id="getInfo" resultType="test.vo.MembersVo" parameterType="String">
        select * from members where id=#{value}
    </select>
    <update id="update" parameterType="test.vo.MembersVo">
        update members set pwd=#{pwd},email=#{email},phone=#{phone} where id=#{id}
    </update>
</mapper>

 

(10) memlist.jsp

;기존과 동일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0" width="500px">
    <tr height="40px">
        <th>아이디</th>
        <th>비밀번호</th>
        <th>이메일</th>
        <th>전화번호</th>
        <th>X</th>
        <th>M</th>
    </tr>
    <c:forEach var="list" items="${ list }">
        <tr>
            <td>${ list.id }</td>
            <td>${ list.pwd }</td>
            <td>${ list.email }</td>
            <td>${ list.phone }</td>
            <td><a href="delete.do?id=${list.id}">삭제</a></td>
            <td><a href="update.do?id=${list.id}">수정</a></td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

 

 

(11) update.jsp

;기존과 동일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>회원수정</h2>
<form action="update.do" method="post">
    아이디<input type="text" name="id" value="${ vo.id }" disabled/>
    <input type="hidden" name="id"  value="${ vo.id }"/>
    <br/>
    비밀번호<input type="password" name="pwd" value="${ vo.pwd }"  /><br/>
    이메일<input type="text" name="email" value="${ vo.email }" /><br/>
    전화번호<input type="text" name="phone" value="${ vo.phone }" /><br/>
    <input type="submit" value="전송" />
</form>
</body>
</html>

 

결과 화면>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #12(게시판 annotation사용)  (0) 2013.01.27
SPRING3.0 #11(게시판)  (0) 2013.01.27
SPRING3.0 #10( MVC )  (0) 2013.01.27
SPRING3.0 #09( MVC )  (0) 2013.01.27
SPRING3.0 #08( Mybatis )  (0) 2013.01.27
MVC 예제 > 간단한 회원가입, 회원목록 보기

 

- MEMBERS 테이블 INSERT, DELETE, UPDATE, SELECT

 

 

<소스구조>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[[ web.xml ]]

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>spring06_members</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <!-- 인코딩필터 설정하기 -->
  <filter>
      <filter-name>characterEncoding</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>characterEncoding</filter-name>
      <url-pattern>/-</url-pattern>
  </filter-mapping>
 
  <!-- /// applicationContext.xml을 읽어와 빈으로 등록하는 리스너 설정 /// -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
    
  <!-- //////////////////// DispatcherServlet설정 //////////////////// -->
 <servlet>
      <servlet-name>mvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>mvc</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- /////////////////////////////////////////////////////////////// -->
 
</web-app>

 

 

[[ applicatonContext.xml ]]

; 전역변수와 비슷한 개념으로 공통부분을 미리 선언해 놓음.
; db설정 등 ..

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- //// 전역적인 자원들이 등록 (Dao,Service,...) ////// -->
   
    <!-- 1. DataSource 설정(url,username,password,..) -->
    <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource"
            destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/>
    </bean>
    <!-- 2. SqlSessionFactory설정(dataSource,Mapper파일설정) -->   
    <bean id="sqlSessionFactory"
                        class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:test/mybatis/-.xml"/>
    </bean>

    <!-- 3. SqlSessionTemplate설정(SqlSessionFactory주입) -->
    <bean id="sqlSessionTemplate"
            class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" index="0"/>   
    </bean>
   
    <!-- 4. Dao생성(SqlSessionTemplate주입) -->
    <bean id="membersDao" class="test.dao.MembersDao">
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
    </bean>

</beans>

 

 

[[ mvc-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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- /////////// MVC관련 Bean객체 등록(컨트롤러,뷰리절버,..) //////// -->
    <!-- //////////// 컨트롤러 등록 /////////////////-->
    <bean class="test.controller.InsertController">
        <property name="membersDao" ref="membersDao"/>
    </bean>   
    <bean class="test.controller.ListController">
        <property name="membersDao" ref="membersDao"/>
    </bean>   
    <bean class="test.controller.DeleteController">
        <property name="dao" ref="membersDao"/>
    </bean>
    <bean class="test.controller.UpdateController">
        <property name="dao" ref="membersDao"/>
    </bean>
    <!--///////// 뷰리절버등록 //////////////
        /WEB-INF/views/insert.jsp
    -->
    <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"></property>
    </bean>   
</beans>

 

(1) main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 <ul>
  <!-- <li><a href="insertForm.do">회원가입</a></li> -->
  <li><a href="insert.do">회원가입</a></li>
  <li><a href="list.do">회원목록</a></li>
 </ul>
</body>
</html>

 

(2) insert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>회원가입</h2>
<form action="insert.do" method="post">
    아이디<input type="text" name="id" /><br/>
    비밀번호<input type="password" name="pwd" /><br/>
    이메일<input type="text" name="email"/><br/>
    전화번호<input type="text" name="phone"/><br/>
    <input type="submit" value="전송" />
</form>
</body>
</html>

 

 

(3) InsertController.java

; 기본은 post방식
; main.jsp에서 <a>태그로 넘어온 것은 GET방식, 저장할때 insert.jsp에서 넘어온 것은 POST방식
; RequestMapping에 insert.do 동일한 이름으로 받아도 method를 지정하여 받으면 상관없음.
; String 타입으로 return . 리턴된 값이 뷰페이지가됨.
   mvc-servlet.xml에 등록한 Resolver 설정에 따라 경로가 지정됨.

 

package test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import test.dao.MembersDao;
import test.vo.MembersVo;

 

@Controller
public class InsertController {
    private MembersDao membersDao;
    public void setMembersDao(MembersDao membersDao) {
        this.membersDao = membersDao;
    }
   
    //@RequestMapping("/insertForm.do")
    @RequestMapping(value="/insert.do",method=RequestMethod.GET)
    public String insertForm(){
        //String타입이 반환되는것은 뷰이름을 의미함.
        return "insert";
    }
   
    @RequestMapping("/insert.do")
    public String insert(MembersVo vo){
        //db에 vo저장하기
        int n = membersDao.insert(vo);
        if(n>0){
            //뷰페이지로 이동 ==> 리다이렉트방식으로 페이지 이동하기
            return "redirect:/main.jsp";
        }else{
            return "redirect:/error.jsp";
        }
    }
}

 

 

(4) DeleteController.java
;  삭제 후 목록페이지로 이동하기 위해조회 로직 수행
; 또는 UpdateController.java처럼 list.do를 return해도 됨.

 

package test.controller;

import java.util.List;

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;

import test.dao.MembersDao;
import test.vo.MembersVo;

@Controller
public class DeleteController {
    private MembersDao dao;
    public void setDao(MembersDao dao) {
        this.dao = dao;
    }
   
    @RequestMapping("/delete.do")
    public ModelAndView delete(String id){
        System.out.println("id:" + id);
        dao.delete(id);

        //DB에서 회원정보 얻어오기
        List<MembersVo> list = dao.getList();
        //결과값(모델)과 뷰이름을 담을 객체 생성
        ModelAndView mv = new ModelAndView("memlist");
        //모델에 결과값 담기
        mv.addObject("list", list);
        return mv;
    }
}

 

 

(5) UpdateController.java

package test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import test.dao.MembersDao;
import test.vo.MembersVo;

@Controller
public class UpdateController {
    private MembersDao dao;
    public void setDao(MembersDao dao) {
        this.dao = dao;
    }
   
    @RequestMapping(value="/update.do",method=RequestMethod.GET)
    public ModelAndView updateForm(String id){
        //DB에서 회원정보 얻어오기
        MembersVo vo = dao.getInfo(id);
        //결과값(모델)과 뷰이름을 담을 객체 생성
        ModelAndView mv = new ModelAndView("update");
        //모델에 결과값 담기
        mv.addObject("vo", vo);
        return mv;
    }
   
    @RequestMapping("/update.do")
    public String update(MembersVo vo){
        int n = dao.update(vo);
        System.out.println("id:" + vo.getId());
        if ( n>0){
            System.out.println("성공");
            return "redirect:/list.do";
        }else{
            System.out.println("실패");
            return "redirect:/error.jsp";
        }
    }
}

 

 

(6) ListController.java

package test.controller;

import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import test.dao.MembersDao;
import test.vo.MembersVo;

@Controller
public class ListController {
    private MembersDao membersDao;
    public void setMembersDao(MembersDao membersDao) {
        this.membersDao = membersDao;
    }
   
    @RequestMapping("/list.do")
    public ModelAndView list(){
        //DB에서 회원정보 얻어오기
        List<MembersVo> list = membersDao.getList();
        //결과값(모델)과 뷰이름을 담을 객체 생성
        ModelAndView mv = new ModelAndView("memlist");
        //모델에 결과값 담기
        mv.addObject("list", list);
        return mv;
    }
}

 

 

(7) MembersDao.java

package test.dao;

import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import test.vo.MembersVo;

public class MembersDao {
    private SqlSessionTemplate sqlSessionTemplate;
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }
    public List<MembersVo> getList(){
        return (List<MembersVo>)sqlSessionTemplate.selectList("getList");
    }
    public int insert(MembersVo vo){
        return sqlSessionTemplate.insert("insert", vo);
    }
    public int delete(String id){
        return sqlSessionTemplate.delete("delete", id);
    }
    public int update(MembersVo vo){
        return sqlSessionTemplate.update("update", vo);
    }
    public MembersVo getInfo(String id){
        return (MembersVo)sqlSessionTemplate.selectOne("getInfo", id);
    }
}

 

 

(8) MembersVo.java

package test.vo;

import java.sql.Timestamp;

public class MembersVo {
    private String id;
    private String pwd;
    private String email;
    private String phone;
    private Timestamp regdate;
   
    public MembersVo(){}
   
    public MembersVo(String id, String pwd, String email, String phone, Timestamp regdate) {
        super();
        this.id = id;
        this.pwd = pwd;
        this.email = email;
        this.phone = phone;
        this.regdate = regdate;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Timestamp getRegdate() {
        return regdate;
    }

    public void setRegdate(Timestamp regdate) {
        this.regdate = regdate;
    }
}

 

 

(9) MembersMapper.java

<?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="orm.mybatis.MembersMapper">
    <insert id="insert" parameterType="test.vo.MembersVo">
        insert into Members values ( #{ id }, #{ pwd }, #{ email }, #{ phone }, sysdate )
    </insert>
    <select id="getList" resultType="test.vo.MembersVo">
        select * from members
    </select>
    <delete id="delete" parameterType="String">
        delete from members where id=#{value}
    </delete>
    <select id="getInfo" resultType="test.vo.MembersVo" parameterType="String">
        select * from members where id=#{value}
    </select>
    <update id="update" parameterType="test.vo.MembersVo">
        update members set pwd=#{pwd},email=#{email},phone=#{phone} where id=#{id}
    </update>
</mapper>

 

'WEB > Spring3.0' 카테고리의 다른 글

SPRING3.0 #11(게시판)  (0) 2013.01.27
SPRING3.0 #11(annotation)  (0) 2013.01.27
SPRING3.0 #09( MVC )  (0) 2013.01.27
SPRING3.0 #08( Mybatis )  (0) 2013.01.27
SPRING3.0 #07( jdbc )  (0) 2013.01.27

+ Recent posts