栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自定义mvc框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自定义mvc框架

目录

1.初版的增删改查改进

 2.反射优化

3.mvc工作原理及对应打码

1.初版的增删改查改进

上述问题
        1.关于单个实体类/表操做场越多,需要新建的类也就越多,造成了项目中类的数量过于庞大

目前增删该查的方法
增加
删除 
修改
查看

实际操作

 2.反射优化
类数量过多问题的优化
增加
删除
修改
查看
回显

servlet展示

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		为了区分当前请求的目的,增删改查的目的,就从前台要调用的方法名传递到后台
		String methodName=request.getParameter("methodName");
//		methodNamek可能是add/del/edit
//		前台传递什么方法就调用当前类的对应方法
		try {
			Method m = this.getClass()//BookSerlvet
				.getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
			m.setAccessible(true);
//			调用当前类实例的methodName方法
			m.invoke(this,request,response);
		} catch (Exception  e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
//		if("add".equals(methodName)) {
			如果前台传递到后台是一个增加的请求,那么后台就调用增加的方法
//			add(request,response);
//		}
//		else if("del".equals(methodName)) {
//			del(request,response);
//		}
//		else if("edit".equals(methodName)) {
//			edit(request,response);
//		}
//		else if("list".equals(methodName)) {
//			list(request,response);
//		}
	}

	
//	方法
	
	private void list(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("在同一个orderservlet调用查看方法");
	}

	private void edit(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("在同一个orderservlet调用修改方法");
		
	}

	private void del(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("在同一个orderservlet调用删除方法");
	}

	private void add(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("在同一个orderservlet调用增加方法");

	}
	
	private void load(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("在同一个orderservlet调用回显方法");

	}

代码执行

3.mvc工作原理及对应打码
package com.hz.framework;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public interface Action {
	void execute(HttpServletRequest request, HttpServletResponse response);
	
}


--------------------------------------------------------------------------------
package com.hz.framework;

import java.lang.reflect.Method;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ActionSupport implements Action{

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		String methodName=request.getParameter("methodName");
//		methodNamek可能是add/del/edit
//		前台传递什么方法就调用当前类的对应方法
		try {
			Method m = this.getClass()//BookSerlvet
				  .getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
			m.setAccessible(true);
//			调用当前类实例的methodName方法
			m.invoke(this,request,response);
		} catch (Exception  e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
	}

}


-----------------------------------------------------------------------------------
package com.hz.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 com.hz.web.BookAction;


@WebServlet("*.action")
public class DispatcherServlet extends HttpServlet{
	private Map action=new HashMap();
	
//	程序启动时只会加载一次
	@Override
	public void init() throws ServletException {
		action.put("/book", 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/mvc/book.action?methodName=list
		String uri = req.getRequestURI();
//		要拿到/book. 接收最后一个/到最后一个点的位置
		uri=uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf("."));
		
		Action action2 = action.get(uri);
		action2.execute(req, resp);
	}
}


--------------------------------------------------------------------------------------
package com.hz.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hz.framework.Action;
import com.hz.framework.ActionSupport;

public class BookAction extends ActionSupport{
	private void list(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("在同一个servlet调用查看方法");
	}

	private void edit(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("在同一个servlet调用修改方法");
		
	}

	private void del(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("在同一个servlet调用删除方法");
	}

	private void add(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("在同一个servlet调用增加方法");

	}
	
	private void load(HttpServletRequest request, HttpServletResponse response) {
		// TODO Auto-generated method stub
		System.out.println("在同一个servlet调用回显方法");

	}
	
	
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号