自定义MVC

本文探讨了如何通过自定义MVC架构解决Java Web开发中Model-View-Controller的问题,包括减少代码冗余、提高灵活性。作者介绍了使用反射和设计模式实现的通用分页与自定义标签,以及如何通过调用方法名动态执行操作。

思维导图

 

 

package com.zking.lzh.web;

import java.io.IOException;
import java.lang.reflect.Method;

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

/**
 * 目标:自定义mvc的工作原理
 *  1.什么是mvc
 *   	关键:自定义mvc  框架
 *   2.它的运行原理
 *   	2.1代码演绎过程
 *   	2.2总结代码运行原理
 *   
 *   mvc出现原因:各司其职
 *   Model模型  、view视图、controller控制层
 *   
 *   
 *   
 *   不足:
 *   Model模型:
 *   	Dao层:(增删改 查)
 *   		1.建立数据库连接
 *   		2.预定义对象Preparestatement
 *   		3.执行查询
 *   		4处理结果集
 *   		通用分页解决了上面问题
 *   	view视图
 *   		1.重复的HTML分页代码
 *   		2.重复的JS代码
 *   		3.自定义page标签
 *   	controller控制层
 *   		1.重新doGet、doPost,并且goGet没有用
 *   		2.参数的封装代码冗余了
 *   			req.getParammeter("xxxx");
 *   		3.对于跳转页面的代码是重复的
 *   			req.getDispathtype("index.jsp").forward(req,resp);
 *   			resp.sendRedirect("bookList.jsp");
 *   	解决方案
 *   		自定义mvc出现了
 *   		框架:反射+设计模式,案例:通用分页+自定义page标签+自定义mvc的组合就是框架
 * @author zjjt
 *
 */
//@WebServlet("/book.action")
public class BookServlet extends HttpServlet{
@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 {
		/**
		 * 增删改查缺陷
		 * 	当需求发生改变,或者新增需求的时候,需要改的下面代码 
		 * 
		 * 解决方案
		 * 	前台传递methodName到后台,实际上就是想要调用当前类对象的methodName方法
		 * this.methodName
		 */
		String methodName = req.getParameter("methodName");
		try {
			Method m = this.getClass().getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
			m.setAccessible(true);
			m.invoke(this, req,resp);
		} catch (Exception e) {
			e.printStackTrace();
		} 
		/*if("add".equals(methodName)) {
			add(req,resp);
		}else if("edit".equals(methodName)) {
			edit(req,resp);
		}else if("delete".equals(methodName)) {
			delete(req,resp);
		}else if("list".equals(methodName)) {
			list(req,resp);
		}*/
	}
private void list(HttpServletRequest req, HttpServletResponse resp) {
	System.out.println("bookDao.list()...");
	
}
private void delete(HttpServletRequest req, HttpServletResponse resp) {
	System.out.println("bookDao.delete()...");
	
}
private void edit(HttpServletRequest req, HttpServletResponse resp) {
	System.out.println("bookDao.edit()...");	
}
private void add(HttpServletRequest req, HttpServletResponse resp) {
	System.out.println("bookDao.add()...");	
}
private void load(HttpServletRequest req, HttpServletResponse resp) {
	System.out.println("bookDao.load()...");	
}
private void ref(HttpServletRequest req, HttpServletResponse resp) {
	System.out.println("bookDao.ref()...");	
}
}

 

 

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值