浅谈MVC

晓风well  http://blog.csdn.net/tao_sun


题外话,这段时间由于课程密集,课外作业也比较多,关于JAVA这块的学习也比较滞后,想想是越学才知道自己越需要补充什么,好容易进展到WEB部分,但有时想想也不必太深入,因为在学校毕竟还是拓宽知识面更为重要。希望自己能够在一个月内结束WEB开发部分的学习,有个框架性的理解,并能够游刃于一些WEB小项目。因为研一课程学习的需要,后面可能会花更多的时间在算法、数据挖掘这块。


今天简单的来谈一点关于MVC的知识,使用MVC虽然一定程度上增加了代码之间的复杂性,但却使得层次更为分明,编程也更为明确,好如搭了一个框架再去填充内容。没太多的开发经验,因此个人对MVC的认识也不够深刻,只能辅以一些简单的代码来说明。之前的博文中也有涉及,MVC是一种设计模式,目的是使代码具有更高的藕合性,系统功能模块的可拓展性更为弹性。Model \ View \ Controller。


Model层实现系统中的业务逻辑,通常可以用JavaBean实现,View层用于与用户的交互,通常用JSP实现,Controller是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图进行显示,同时可以解释用户的输入并将它们映射为模型层可执行的操作,通常用Servlet实现。MVC结构如下图所示。


MVC将一个应用的输入、处理、输出流程按照M\V\C的方式进行分离。下面的例子模拟一个用户登录系统,为了简化系统,这里忽略了数据库操作,而只是在代码中进行简单的字符串匹配,达到用户登录验证的目的。用户登录界面如下图所示:


实现思路如下,在login.html页面输入用户名和密码,通过LoginServlet对输入请求进行处理,判断输入的用户名和密码是否正确,若正确转向success.html页面,若出错,转向fail.html页面。


(1)首先是视图层:login.html的表单代码如下

	<form action="/day06/servlet/LoginServlet" method="post">
		<table border="1" align="center">
			<caption>User Login</caption>
			<tr>
				<th>username</th>
				<td><input type="text" name="username"/></td>
			</tr>
			<tr>
				<th>password</th>
				<td><input type="password" name="password"/></td>
			</tr>
			
			<tr>
				<td  colspan"2" algin="center"><input type="submit" value="submit" /></td>
			</tr>
		</table>
	</form>
简单解释与说明:<form>标签用户为用户输入创建HTML表单,表单能够包含input元素等。具体参见w3school关于<form>的手册。<form>最重要的属性是action,规定提交表单时,向何处发送表单数据。可选的method属性规定如何发送表单数据。POST和GET请求方式这里不再说明。

(2)其次来创建Model层,进行最基本的用户登录验证,也就是系统最核心的一部分代码。这部分代码实现系统的逻辑功能。定义了一个LoginBean类,并编写了一个validate()方法对输入进行验证。如下

	public boolean validate(String username,String password){
		boolean flag = false;
		if(username!=null && password!=null){
			if("well".equals(username)&&"1234".equals(password))
				flag = true;
		}
		return flag;
	}

(3)输入请求将由LoginServlet进行处理,也就是由Controller进行处理,对应的在servlet使用doPost方法对输入请求进行处理。处理逻辑代码如下。

		//取得表单提交的参数
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		//调用MODEL层对象
		LoginBean loginBean = new LoginBean();
		boolean flag = loginBean.validate(username, password);
		
		//根据返回值转发到不同的页面
		if(flag){
			ServletContext context = this.getServletContext();
			//定位需要转发的路径
			RequestDispatcher rd = context.getRequestDispatcher("/success.html");
			//转向页面
			rd.forward(request, response);
		}else{
			ServletContext context = this.getServletContext();
			//定位需要转发的路径
			RequestDispatcher rd = context.getRequestDispatcher("/fail.html");
			//转向页面
			rd.forward(request, response);
		}


至此,这个MVC分层练习就差不多结束了,MVC设计让我们能够将面向对象的设计与用户接口隔离开来,允许我们在同样的模型中容易的实现多个接口,并且允许在实现阶段对接口做大的修改而不需要对相应的模型进行修改。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值