自定义MVC增删改查应用

本文档详细介绍了如何自定义一个MVC框架,并实现数据的增删改查功能。从配置文件的设定,如DispatcherServlet的配置,到通用BaseDao的设计,再到Dao层的具体实现,以及在遇到报错时的解决方法,如修改配置文件名称、导入正确的驱动包、调整标签路径等,最后展示了视图层studentList.jsp的设计和mvc.xml的配置。
摘要由CSDN通过智能技术生成

1.思维导图:

 

2.解决框架配置文件名及放置问题:

 2.1 中央控制器(DispatchServlet)代码:

   如果web.xml没有配置就默认自己写的文件名为准

package com.leijiajia.framework;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;

import com.leijiajia.web.GoodsAction;
/**
 * 目标:
 * 	根据自定义MVC框架的原理图完成 框架的研发
 *  
 * @author zjjt
 * 
 * 中央控制器
 *   目标:寻找子控制器
 *
 */

/*@WebServlet("*.action")*/
public class DispatchServlet extends HttpServlet {
	//专门存放子控制器的容器 
	//private Map<String, ActionSupport> actions=new HashMap<String, ActionSupport>();
	private ConfigModel configModel = null;
	//初始化子控制器容器(集合),经过初始化,actions容器内部就有了子控制器
	//init,service,destroy
	/**
	 * 需求:
	 *  在增加一个商品类的增删改查
	 * 步骤:
	 *  改动init中代码
	 * 思考:
	 *  能不能不改动代码完成这个需求
	 *   1.参考DBAcess的数据源配置文件config.prooerties
	 *    1.1 减少代码改动风险性
	 *    1.2 减少代码的编译次数(对于已经部署到服务器后)
	 * 解决方案:
	 *  改成子控制器可配置 
	 * 解决步骤:
	 *  1.必须有配置文件config.xml
	 *  2.配置文件config.xml中要包含处理业务的子控制器
	 *  3.读取到配置文件config.xml中的对应的处理浏览器请求的子控制器
	 * 编码:
	 *  ...  
	 */
	
	@Override
	public void init() throws ServletException {
		//缺陷:需要改动原有代码,伴随着很大的风险
		try {
			//配置的位置:web.xml
			String configurationLocation = this.getInitParameter("configurationLocation");
			if(configurationLocation==null || "".equals(configurationLocation)) {
				configurationLocation="/zking.xml";
			}
			configModel=ConfigModelFactory.build(configurationLocation);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
//		actions.put("/book", new BookAction());
//		actions.put("/goods", new GoodsAction());
//		actions.put("/OrderItme", new BookAction());
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//完成寻找子控制器的过程
		//浏览器:http://localhost:8080/t266_mvc/book.action?methodName=add
		//目标:BookAction.add()...
		/**
		 * 思路:
		 *  1.从浏览器URL中获取到“book”字符串
		 *  2.在子控制器容器中拿到BookAction
		 *  3.BookAction.add()
		 */
		
		/**
		 * Debug的使用效果:
		 *   1.调试代码(找错)
		 *   2.观看\观察代码的一个流程走向,每一个参数的值
		 */
		
		String uri = req.getRequestURI();
		uri = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
		//System.out.println(uri);
		//action=BookAction
		//ActionSupport action = actions.get(uri);
		ActionModel actionModel = configModel.pop(uri);
		String type = actionModel.getType();
		ActionSupport action;
		try {
			//放射实例化
			action = (ActionSupport) Class.forName(type).newInstance();
			//ActionSupport action=new BookAction();
			if(action instanceof ModelDriver) {
				ModelDriver m=(ModelDriver) action;
				Object obj = m.getModel();
				
				//有对象
				//接收所有的前端jsp传递到后台的参数
				Map<String, String[]> parameterMap = req.getParameterMap();
				//给对象赋值
				//PropertyUtils.getProperty(obj, "");
				BeanUtils.populate(obj, parameterMap);
			}
			//execute->delete
			String res = action.execute(req, resp);
			
			/**
			 * 思路:
			 * 1.方法执行宪法完毕必须有一个返回值
			 * 2.通过返回值决定是否重定向还是转发
			 * 3.通过返回值决定跳
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVC模式的实现对数据库的增删改查 部分代码: package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import common.DBConnection; import bean.Contact; public class ContactDAO { public List getAllContact() throws Exception{ Connection conn=DBConnection.getConntion(); PreparedStatement ps=conn.prepareStatement("select * from Contact"); ResultSet rs=ps.executeQuery(); List list = new ArrayList(); while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); String phone = rs.getString("phone"); String address = rs.getString("address"); Contact c = new Contact(); c.setId(id); c.setName(name); c.setPhone(phone); c.setAddress(address); list.add(c); } rs.close(); ps.close(); conn.close(); return list; } public void addContact(String name,String phone,String address) throws Exception{ String sql = "insert into contact(id,name,phone,address) values(seq_contact.nextval,?,?,?)"; Connection con = DBConnection.getConntion(); PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, name); pstmt.setString(2, phone); pstmt.setString(3, address); pstmt.executeUpdate(); } public void delContact(int id) throws Exception{ String sql = "delete from contact where id=?"; Connection con = DBConnection.getConntion(); PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, id); pstmt.executeUpdate(); } public Contact getContactById(int id) throws Exception{ String sql = "select * from Contact where id=?"; Connection con = DBConnection.getConntion(); PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, id); ResultSet rs = pstmt.executeQuery(); Contact c = null; while(rs.next()){ // int id = rs.getInt("id"); String name=rs.getString("name"); String p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值