必威体育Betway必威体育官网
当前位置:首页 > IT技术

【mvc模式】

时间:2019-08-19 00:42:09来源:IT技术作者:seo实验室小编阅读:89次「手机版」
 

mvc模式

目录

  • 前言
    • mvc的概念
    • 传统mvc的使用
    • mvc的优化
      • 中央控制器
      • 子控制器接口
      • 子控制器
      • jsp的调用
    • 结果
    • 总结

前言

mvc模式是做项目中一般采用的设计模式

所以需要去详细的去探究mvc的原理和思路。

mvc的概念

MVC全名是Model View controller

模型(model)视图(view)控制器(controller) 的缩写,

它是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码

实际图:

在这里插入图片描述

结构:

V (view)
jsp/iOS/Android(一般由jsp,ios,android文件组成)
C (controller)
servlet/action(一般由servlet,action文件组成)
M (model)
实体域模型(名词)
过程域模型(动词)

传统mvc的使用

也就是你要实现什么方法的时候就提交到写好了的servlet里面

dao层:也就是数据访问层。

servlet层:也就是逻辑处理层。

jsp文件:也就是ui层

在这里插入图片描述

可是那样的话,servlet会越来越多;web.xml配置也越来越多,

这就十分麻烦了,

在这里插入图片描述

而且在每一个servlet里面都可能有很多重复的代码块

在这里插入图片描述

我们今天就要对其进行一个优化。


mvc的优化

首先,我们的优化思路是这样的。

用一个servlet来代替之前所有的servlet.

思路:

中央控制器(DispatcherServlet)
用来获取发送请求的路径名,并截取。然后交给其他子控制器
子控制器接口(Action)
用来定义方法。
子控制器(&&Action):
列如:addAction 用来进行逻辑处理。

可以看图:

在这里插入图片描述

在这里插入图片描述

先是结构:一个web,一个framework就行

中央控制器

public class DispatcherServlet extends HttpServlet{
	
	
	private Map<String, action> actionMap = new HashMap<>();//用来存储子控制器的位置
	
	public void init() {
		actionMap.put("add", new addServlet());//增加的子控制器
		actionMap.put("del", new delServlet());
		actionMap.put("select", new selectServlet());
		actionMap.put("update", new updateServlet());
	}
	
	
	@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 {
		init();//使得map里有值
		String requestURI = req.getRequestURI(); //获取请求的路径
		System.out.println("截取前:"+requestURI);
		String url = requestURI.substring(requestURI.lastindexof("/")+1, requestURI.lastIndexOf("."));//截取
		System.out.println("截取后:"+url);
		
		action action = actionMap.get(url); //获取map里面的对应关系
		action.execute(req, resp);//调用方法
		
	}
	
}

如果运行的话就是这样;

在这里插入图片描述

子控制器接口

public interface action {
	void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException;
}

子控制器

用两个来进行举例:

public class addServlet implements action{//乘法

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String num1 = req.getparameter("num1");
		String num2 = req.getParameter("num2");
		req.setAttribute("res", integer.parseInt(num1)*Integer.parseInt(num2));
		req.getRequestDispatcher("calres.jsp").forward(req, resp);
		
		
	}

}
public class delServlet implements action{//除法

	@Override
	public void execute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String num1 = req.getParameter("num1");
		String num2 = req.getParameter("num2");
		req.setAttribute("res", Integer.parseInt(num1)/Integer.parseInt(num2));
		req.getRequestDispatcher("calres.jsp").forward(req, resp);
		
		
	}

}

jsp的调用

<html>
<head>
<meta http-equiv="content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	function toSubmit(val){
		if(val==1){
			actionform.action = "${pagecontext.request.contextpath }/add.action";
		}
		else if(val==2){
			ActionForm.action = "${pageContext.request.contextPath }/del.action";
		}
		else if(val==3){
			ActionForm.action = "${pageContext.request.contextPath }/select.action";
		}
		else if(val==4){
			ActionForm.action = "${pageContext.request.contextPath }/update.action";
		}
		ActionForm.submit();
	}
</script>

</head>
<body>

<form name="ActionForm" id="ActionForm" action="${pageContext.request.contextPath }/add.action" method="post">
	num1:<input type="text" name="num1" ><br>
	num2:<input type="text" name="num2" ><br>
	<input type="button" value="+" >
	<input type="button" value="-" >
	<input type="button" value="*" >
	<input type="button" value="/" >

</form>

</body>
</html>

就这样就可以完成一个简单的优化;

结果

在这里插入图片描述

在这里插入图片描述

没问题;


总结

思路不怎么难,主要还是理解中央控制器,和子控制器这个概念

Thanks♪(・ω・)ノ希望对大家有所帮助

相关阅读

sxstrace.exe的调试模式

解决Windows应用程序不能加载C++组件 Side-by-Side错误 起因 前两天写了个小工具,在我的机器跑得好好的,QA的测试机里面却死活跑

如何在虚拟主机上部署ASPNET MVC2网站

本来网络上有很多类似的帖子,但是在我部署成功的过程中,依然摸索了很长时间,所以想写个文章来把我部署的过程记录分享一下,以便以后节

工厂模式——三种方式

工厂模式用工厂方法代替了new操作, 将选择实现类, 创建对象统一管理和控制.从而将调用者(Client)与实现类进行解耦.实现了创建者

SSM框架SpringMVC@Scheduled注解简单实现定时任务

第一步:        在Springmvc的xml中加入如下:xmlns:task="http://www.springframework.org/schema/task"http://www.springfr

理解云计算三种服务模式——IaaS、PaaS和SaaS

云计算的服务模式仍在不断进化,但业界普遍接受将云计算按照服务的提供方式划分为三个大类:SaaS(Software as a Service–软件即服务)

分享到:

栏目导航

推荐阅读

热门阅读