J 2 EEの1つの完全なservlet+jsp+javabean業務プロセス


MVCモードは、JDBCが開発したプロジェクトの流れに合わせて
1.ビジネス・オブジェクトの作成(domainパッケージのビジネス・クラス)
2、業務オブジェクトに対応するデータベース表を作成する
3、業務対象をデータベースに保存する
3.1接続プールを得るツールクラス(utilパッケージ)Data SourceUtilを作成する.java
package cn.itcast.cd.util;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DataSourceUtil {
	private static DataSource dataSource; //             ,            .         
	//dbcp   ,             ,           ...
	static{  
		try {
			Properties  properties = new Properties(); //         
			properties.load(DataSourceUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"));
			dataSource = BasicDataSourceFactory.createDataSource(properties);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 *          
	 * @return
	 */
	public static DataSource getDataSource() {
		return dataSource;
	}
}

注:jdbc.propertiesプロファイルはresourceパッケージに格納されます.
駆動jarをlibに入れる
3.2 DAOを書く(操作方法、例えば添削改ざん、クラス名は一般的にI+業務対象名+DAO)、
これはただのインタフェースであり、実現する必要があることに注意してください.DAOインタフェース実装のネーミングは、ビジネスオブジェクト名+DAOImplを使用します.
注意:データベースをDBUtilツールクラスで操作するには、DButilが必要です.JArファイル
DAOImplの例
package cn.itcast.cd.dao.impl;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.itcast.cd.dao.IDepartmentDAO;
import cn.itcast.cd.domain.Department;
import cn.itcast.cd.util.DataSourceUtil;

public class DepartmentDAOImpl implements IDepartmentDAO {
	private QueryRunner  queryRunner;
	
	public DepartmentDAOImpl() {
		//  queryRunner                ,      queryRunner         connection   
		this.queryRunner = new QueryRunner(DataSourceUtil.getDataSource());
	}

	@Override
	public void save(Department department) {
		String sql = "insert into department values(null,?)";
		Object[] params  = new Object[]{department.getName()};
		update(sql, params);
	}

	@Override
	public void remove(Long id) {
		String sql = "delete from department where id  = ?";
		Object[] params = {id};
		update(sql, params);
	}

	@Override
	public void update(Long id, Department department) {
		String sql = "update department set name = ? where id = ?";
		Object[] params = {department.getName(),id};
		update(sql, params);
	}
	
	
	
	public void update(String sql,Object...params){
		try {
			this.queryRunner.update(sql, params);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	

	@Override
	public Department get(Long id) {
		String sql = "select * from department where id = ?";
		Object[] params = {id};
		try {
			return   this.queryRunner.query(sql, new BeanHandler(Department.class), params);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	@Override
	public List list() {
		String sql = "select * from department";
		try {
		  return this.queryRunner.query(sql, new  BeanListHandler(Department.class));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}

4.サーブレット(servletパッケージ)を書き込み、ユーザの要求を受信し、DAOのメソッドを呼び出す.ユーザーの異なるリクエストを1つのservletで受信し、異なるメソッドを呼び出し、異なるページにジャンプすることができます.cmd=xxxで制御
例:
public class DepartmentServlet extends HttpServlet {
	private IDepartmentDAO departmentDAO;	
	
	@Override
	public void init() throws ServletException {
		departmentDAO = new DepartmentDAOImpl();	
	}
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			request.setCharacterEncoding("UTF-8");   //    
		String cmd = request.getParameter("cmd");
		if(StringUtils.isNotBlank(cmd)){
			 try {
				Method method = this.getClass().getMethod(cmd, HttpServletRequest.class,HttpServletResponse.class);
				 method.invoke(this, request,response);
			} catch (Exception e) {
				add(request, response);
				e.printStackTrace();
			}
		}else{
			add(request, response);
		}
	}
	public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		.......
	}
	public void save()    {............}
	public void list()    {............}
	public void remove()  {............}

ここでmethodオブジェクトは、本プログラムにおけるcmdの名前に一致するメソッド名を取得する
并用invokeはこの方法を実行し、関連するDAO操作を呼び出し、データベースの操作を対応するjspに表示する.
5、JSPを書いて表示して、JSPの中のパラメータはservletによって転送して、JSPディレクトリはWebContent----->WEB-INF->>に位置して1つのviewフォルダを新築します