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

自定义MVC(1)

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

自定义MVC(1)

目录
  • 一、MVC简介
  • 二、自定义MVC工作原理图
  • 三、自定义MVC后台代码实现

一、MVC简介

Model View Controller 简称 MVC,由模型(Model),视图(View),控制器(Controller)的组成,是一种软件设计思想。

作用:MVC不能提升程序执行效率,但是会提升开发效率,提高代码的重用

二、自定义MVC工作原理图

三、自定义MVC后台代码实现

注意:
(1)不能跨层调用;
(2)只能由上往下进行调用;View -> Controller -> Model

DispatcherServlet .java( 中央控制器 )

package com.cxy.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.cxy.servlet.BookAction;



@WebServlet("*.action")
public class DispatcherServlet extends HttpServlet{

	private Map actions = new HashMap();
	
	
	//程序启动时值加载一次
	@Override
		public void init() throws ServletException {
		actions.put("/book", new BookAction());
		actions.put("/order", 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://location:8080/mvc/book.action?me....
		String uri = req.getRequestURI();//路径
//		要拿到/book,就是最后一个/到最会一个.的位置
		uri = uri.substring(uri.lastIndexOf("/"),
				uri.lastIndexOf("."));
		
		Action action = actions.get(uri);
		action.execute(req, resp);
	
	}
	
	
}

Action.java(子控制器,接口)

package com.cxy.framework;

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


public interface Action {

	//封装继承多态
	 void execute(HttpServletRequest req, HttpServletResponse resp);
	
}

ActionSupport .java(implements Action)

package com.cxy.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 req, HttpServletResponse resp) {
		String methodName = req.getParameter("methodName");
		//methodName可能是add/del/...
		//前台传递什么方法,就调用当前类对应的方法
		try {
			Method m = this.getClass()//相当于BookServlet
				.getDeclaredMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
			m.setAccessible(true);
			//调用当前类实例的methodName方法  传什么就掉什么方法
			m.invoke(this, req,resp);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

BookAction .java

package com.cxy.servlet;

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

import com.cxy.framework.ActionSupport;

public class BookAction extends ActionSupport {

	private void lod(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("在同一个servlet中调用  回显");	
	}

	private void select(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("在同一个servlet中调用  增加");
	}

	private void update(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("在同一个servlet中调用  修改");	
	}

	private void del(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("在同一个servlet中调用  删除");	
	}

	private void add(HttpServletRequest req, HttpServletResponse resp) {
		System.out.println("在同一个servlet中调用  查看 ");
		
	}

}

demo1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


	增删还查
	增加
	删除
	修改
	查看
	回显


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

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

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