J2EE之 一个完整的servlet+jsp+javabean业务流程

MVC模式,结合JDBC开发的项目流程

1. 创建业务对象(domain包的业务类)


2、创建业务对象对应的数据库表


3、把业务对象保存到数据库中

    3.1 创建得到连接池的工具类(util包)
          DataSourceUtil.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>(Department.class), params);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	@Override
	public List<Department> list() {
		String sql = "select * from department";
		try {
		  return this.queryRunner.query(sql, new  BeanListHandler<Department>(Department.class));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}



4.  写Servlet(servlet包中),接收用户的请求,调用DAO中的方法.可以用一个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--->新建一个view文件夹



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值