visit count 3202470
RSS2.0
Artszen.org
+more Notice...
2010-01-15
JBoss User Group 오프라인 무료 교육
2009-05-26
소프트웨어진흥원 주관 POJO 기반의 OpenSource 웹 개발 프레임워크 실무 Workshop 과정 1차가 5월23일 시작되었습니다.
2009-05-13
세미나 개발 작업 진행
2009-05-13
컬럼 개발 작업 진행
2009-05-13
태그스토리 개발작업 진행
교육 안내
- 소프트웨어진흥원 2009년 맞춤형 S/W 인력양성 사업

Link Sites...
Apache Foundation
Struts
iBatis
Forrest
AppFuse
Prototype
Eclipse
TheServerSide
jBoss
jBoss jBPM
Artszen Software
인기 태그
스트럿츠2
struts2
servlet
서블릿
스트럿츠2 태그
struts2 tag
control tag
일반 태그
컨트롤 태그
generic tag
tag
FilterDispatcher
jsp
Action
struts2.0.9
액션
필터 디스패처
lifecycle
result
리절트
 
Struts2
Struts2에서 JDBC 사용하는 간단한 예제 hit 4170  

Struts2에서 JDBC를 사용하는 간단한 예제를 찾는 분이 많으셔서 이 글을 작성합니다.
실제로 JDBC를 사용하기 위하여 아키텍처를 구성할 때는 DB 커넥션 풀을 사용하고, DataSource를 관리하는 방법도 다양합니다.
여기에서 작성하는 예제는 실제로 사용하는 경우를 예를 들기에는 복잡해질 것 같아서, Dao 객체를 구성할 때 매 메소드 마다 Connection 객체를 얻는 무자비한 방법을 사용해 보았습니다. 단지 Database 사용에 대한 학습을 위한 것임을 이해해 주세요.

[샘플 설명]

사용자 정보(id, user, email)를 입력하는 폼을 출력하고, 각 정보를 입력한 후 "add" 버튼을 클릭하면 user_info 테이블에 입력한 사용자 정보를 저장하고, 저장된 데이터를 다시 읽어와서 화면에 출력하는 예제입니다.

*** 사용될 액션:
총 3개
    addUserForm.action               : 사용자 입력 화면 출력
    addUser.action                       : 사용자 정보 저장
    viewUser.action                      : 사용자 정보 조회 화면 출력

*** 사용할 액션 클래스 명:
    src/example/user/action/UserAction.java

*** UserAction에서 사용되는 액션 메소드
총 2개
    addUser()          : 사용자 정보 저장
    viewUser()        : 사용자 정보 조회

*** 모델 클래스:
    src/example/user/model/User.java

*** 서비스 클래스:
    src/example/user/service/UserService.java

*** DAO 클래스:
   src/example/user/dao/UserDao.java


[화면 구성]



{그림: 사용자 정보 입력화면}




{그림: 사용자 정보 조회화면}


[호출 관계 설명]

- addUserForm.action 호출 --->
- addUser.jsp 출력 --->
- 사용자 정보(id, name, email) 입력 후 add 버튼 클릭 --->
- addUser.action 호출 --->
- UserAction 클래스의 addUser() 메소드 호출 --->
- addUser() 메소드 내에서 userService.create() 메소드 호출 --->
- userService.create() 메소드 내에서 dao.insert() 메소드 호출 --->
- addUser() 메소드는 "success" 리절트 코드 반환 --->
- addUser.action의 리절트는 redirect-action 타입을 사용하여 id 값을 파라미터로 viewUser.action 을 호출 --->
- UserAction 클래스의 viewUser() 메소드 호출 --->
- viewUser() 메소드 내에서 userService.get() 메소드 호출 --->
- userSerivce.get() 메소드 내에서 dao.select() 메소드 호출 --->
- viewUser() 메소드는 "success" 리절트 코드 반환 --->
- viewUser.action 의 리절트인 viewUser.jsp 출력


[데이터베이스 구성]

RDBMS: mySQL
데이터베이스 이름: struts2db
데이터베이스 사용자 아이디: struts2user
데이터베이스 암호: struts2pw
테이블 이름: user_info
테이블 구성:
    id          varchar(10)
    name     varchar(50)
    email     varchar(50)

테이블 생성 쿼리:
    create table user_info (id varchar(10), name(50), email(50))


[src/example/user/model/User.java]

package example.user.model;

public class User {
    private String id;
    private String name;
    private String email;
 
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; } 
}

[src/example/user/dao/UserDao.java]

package example.user.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import example.user.model.User;

public class UserDao {
    protected DataSource ds = null;
 
    public User insert(User user) throws SQLException {
        String driver = "org.gjt.mm.mysql.Driver";
        //database name = struts2db
        String url = "jdbc:mysql://localhost:3306/struts2db";

        Connection conn = null;
        PreparedStatement pstmt = null;
  
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            //username = strutsuser, password = struts2pw
            conn = DriverManager.getConnection(url,"struts2user", "struts2pw");   
            if (conn == null) return null;
            String sql = "insert into user_info (id, name, email) values (?, ?, ?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, user.getId());
            pstmt.setString(2, user.getName());
            pstmt.setString(3, user.getEmail());
   
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }
   
            if (conn != null) {
                conn.close();
                conn = null;
           }
        }
  
        return user;
    }

    public User select(String id) throws SQLException {
        User user = null;
        String driver = "org.gjt.mm.mysql.Driver";
        //database name = struts2db
        String url = "jdbc:mysql://localhost:3306/struts2db";

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
  
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            //username = strutsuser, password = struts2pw
            conn = DriverManager.getConnection(url,"struts2user", "struts2pw");   
            if (conn == null) return null;

            String sql = "select * from user_info where id = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, id);
   
            rs = pstmt.executeQuery();
   
            if (rs.next()) {
                user = new User();
                user.setId(rs.getString("id"));
                user.setName(rs.getString("name"));
                user.setEmail(rs.getString("email"));
            }    
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (rs != null) {
                rs.close();
                rs = null;
            }
   
            if (pstmt != null) {
                pstmt.close();
                pstmt = null;
            }
   
            if (conn != null) {
                conn.close();
                conn = null;
            }
        }
  
        return user;
    }
}


[src/example/user/service/UserService.java]

package example.user.service;

import java.sql.SQLException;

import example.user.dao.UserDao;
import example.user.model.User;

public class UserService {
    private UserDao dao = new UserDao();
 
    public User create(User user) throws SQLException {
        return dao.insert(user);
    }

    public User get(String id) throws SQLException {
        return dao.select(id);
    }

    public UserDao getDao() { return dao; }
    public void setDao(UserDao dao) { this.dao = dao; }
}


[src/example/user/action/UserAction.java]

package example.user.action;

import com.opensymphony.xwork2.ActionSupport;
import example.user.model.User;
import example.user.service.UserService;

public class UserAction extends ActionSupport {
    private UserService userSerivce = new UserService();
    private User user;
    private String id;
 
    public String addUser() throws Exception {
        userSerivce.create(user);
        id = user.getId();
        return SUCCESS;
    }

    public String viewUser() throws Exception {
        user = userSerivce.get(id);  
        return SUCCESS;
    }

    public User getUser() { return user; }
    public void setUser(User user) { this.user = user; }
    public UserService getUserSerivce() { return userSerivce; }
    public void setUserSerivce(UserService userSerivce) { this.userSerivce = userSerivce; }
    public String getId() { return id; }
    public void setId(String id) { this.id = id; } 
}


[/user/addUser.jsp]

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
    <title>Struts2</title>
</head>

<body>
<s:form action="addUser" theme="simple">

Add User Example<br/><br/>

id: <s:textfield name="user.id"/><br/>
name: <s:textfield name="user.name"/><br/>
email: <s:textfield name="user.email"/><br/>
<br/>
<s:submit value="add"/>
</s:form>
</body>
</html>


[/user/viewUser.jsp]

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
    <title>Struts2</title>
</head>

<body>
View User Example<br/><br/>

id: <s:property value="user.id"/><br/>
name: <s:property value="user.name"/><br/>
email: <s:property value="user.email"/><br/>
</body>
</html>


[struts.xml]

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="default" extends="struts-default" namespace="">
        <action name="addUserForm">
            <result>/user/addUser.jsp</result>
        </action>

        <action name="addUser" class="example.user.action.UserAction" method="addUser">
            <result type="redirect-action">
                <param name="actionName">viewUser</param>
                <param name="id">${id}</param>
            </result>
        </action>

        <action name="viewUser" class="example.user.action.UserAction" method="viewUser">
            <result>/user/viewUser.jsp</result>
        </action>
    </package>
</struts>



2008-03-18 08:20:36   현철주   download struts2jdbc.zip

  Tag
struts2 jdbc sample