初识MVC

来源:互联网 发布:js控制input只读 编辑:程序博客网 时间:2024/05/21 10:37

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,理解可能会有偏颇,欢迎大家斧正!