现在的位置: 首页 > 综合 > 正文

初识MVC

2013年11月04日 ⁄ 综合 ⁄ 共 4110字 ⁄ 字号 评论关闭

MVC:Model、Control、View结合J2EE可以简单的理解是jsp(V)+servlet(C)+javabean(M)。jsp,主要负责界面显示,是html和java代码的混合,servlet主要负责对请求的控制,javabean可以理解成业务逻辑层的类,负责业务处理。

需要注意的是:MVC也是分层的思想的体现,但它有别于.net中的三层,也有别于设计模式。具体区别,不做深究。

下面是一个根据起止日期查询学生信息的mvc的概要实现:

web客户端( query_condention.jsp)是查询界面;SearchStudentServlet.java负责控制;student_list.jsp负责查询结果的显示(View);StudentManager.java是Model,负责具体的业务逻辑,执行查询的动作。

query_condention.jsp:和asp类似,也是由页面指令和大量的HTML代码组成。

<%@ page language="java" contentType="text/html"; charset="GBK"%>


<html>
	<head>
		<title>学生信息查询</title>
		
	</head>

	<body>
		<form action ="query_student.jsp" method ="post">
		出生日期:<input type ="text" name ="beginDate" >至<input type ="text" name ="endDate" >
		<input type ="submit" value ="查询学生">

	</body>

	
</html>

SearchStudentServlet.java:Control,控制分发客户端发过来的请求,调用Model(StudentManager.java),然后将数据移交给View(student_list.jsp)去显示。

import java.util.*;
import java.io.*;
import javax.servlet.http.*;
import javx.servlet.*;

import com.bjpowernode.exam.model.*;
import com.bjpowernode.exam.model.*;

public class SearchStudentServlet extends HttpServlet{
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)	
	throws ServletException, IOException {
		doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		
		String sBeginDate = request.getParameter("beginDate");
		String sEndDate = request.getParameter("endDate");
		
		Date beginDate = new Date();
		Date endDate = new Date();
		try {
			beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(sBeginDate);
		 	endDate = new SimpleDateFormat("yyyy-MM-dd").parse(sEndDate);
		 }catch(Exception e) {
			e.printStackTrace();		 
		 }	 
		


		StudentManager studentManager = new StudentManagerImpl();


		List<Student> studentList = studentManager.findStudnetList(beginDate,endDate);
	
		//将学生列表设置到request范围中
		request.setAttribute("student_list",studentList);

		//转发:在服务端转发,客户端是不知道的
		request.getRequestDispatcher("/student_list.jsp").forward(request,response);

		//将studentList放到session中
		//HttpSession session =request.getSession();
		//session.setAttribute("student_list",studentList);

		//重定向,不会共享request,request.getContextPath()用于获取当前目录到跟目录的路径
		//response.sendRedict(request.getContextPath()+"/student_list.jsp");
		//以下写法错误,/代表8080端口,或者可以理解成跟目录
		//response.sendRedict("/studentList.jsp");


}


student_list.jsp:接收数据,显示在界面上。

<%@ page language="java" contentType="text/html"; charset="GBK"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>

<%@ page import ="com.bjpowernode.exam.model.*"%>
<%@ page import ="com.bjpowernode.exam.manager.*"%>

<html>
	<head>
		<title>学生信息查询</title>
		<style type ="text/css">
			table {

				border:1px solid black;
				border-collapse:collapse;
			}

			td{
				border:1px solid black;
				border-collapse:collapse;
			}
		</style>
		
	</head>

	<body>
		
		<table border ="1">
			<tr>
				<td>学生代码</td>
				<td>姓名</td>
				<td>性别</td>
				<td>出生日期</td>
				<td>联系电话</td>
				<td>家庭住址</td>
				<td>班级名称</td>
				<td>年龄</td>

			</tr>

			<%
				List <Student> studentList =(List) request.getAttribute("student_list");
				//如果servlet使用的是session,那么这里就要对应成session
				//List <Student> studentList =(List) session.getAttribute("student_list");	


				for (Iterator<Student> iter = studentList.iterator();iter.hasNext();){
					Student student = iter.next();

				}
				
				
			%>

			<tr>
				<td><%=student.getStudentId()%></td>
				<td><%=student.getStudentName()%></td>
				<td><%=student.getSex()%></td>
				<td><%=new SimpleDateFormat("yyyy-MM-dd").format(student.getBirthDay())%></td>
				<td><%=student.ContextTel()%></td>
				<td><%=student.getAddress()%></td>
				<td><%=student.getClasses().getClassesName()%></td>


				<%
					long b =1000L*60L*24L*365L;
					long a =System.currentTimeMillis()-student.getBirthDay().getTime();
				%>					

				<td><%= a/b%></td>

					
			</tr>

			
		</table>


	</body>

	
</html>

  我们可以看到,在View的jsp中是大量的html和java代码的混合,在查询条件界面query_condention.jsp主要是html,因为不涉及后台数据的交互,所以,java代码就少一些,这些页面的头部都需要java的指令,说明页面的编码方式等。

  在负责显示的jsp页面中,需要遵循一定的语法规范,如:<%   %>作为局部变量出现;<!%
  %>作为全局变量出现;<%=   %>=后面必须是字符串变量或者可以被转换成字串的表达式,不需要以分号结束,只有一行;<% //.....%>  <% --.......--%>  <% /*.....*/%>用于jsp的注释。

 
这里补充一点:<%   %>作为局部变量出现,不能用于定义方法。因为jsp脚本相当于方法,不能在方法里定义方法。如:

  <%!public void helloworld(){}%>  //可以声明方法
  <% public void helloworld(){}%>  //编译出错;脚本不能定义方法

StudentManager.java:就是一个纯java类,相当于三层中的B层,没有其他特别的地方,就不再列代码。


总结:

上面的 query_condention.jsp(查询条件)+SearchStudentServlet.java请求控制Control部分)+student_list.jsp(界面显示)的组合相当于三层中的U层,都与界面的显示相关,而StudentManager.java才是进入业务处理。故,我们可以简单理解成,MVC就是java基于U层的又一个细化,将界面显示和请求处理做了进一步细化分工。

初识MVC,理解可能会有偏颇,欢迎大家斧正!




【上篇】
【下篇】

抱歉!评论已关闭.