|
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>
|