深入浅出Java mvc_动力节点Java学院整理
在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便。
首先来简单的学习一下MVC的基础知识,MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑和数据显式分离的方法组织代码,将业务逻辑被聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑。
概览
MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中,MVC是分层的思想的体现,但是区别于三层设计模式(区别以后再和大家分享)。
MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean的模式。
实例解析
UML图:大家熟悉MVC的调用流程逻辑
第一:JSP:由页面指令和HTML组成的查询界面query_condention.jsp,也就是咱们现在的html页和asp页面类似。
<html> <head> <title>学生信息</title> </head> <body> <form action="SearchStudentServlet" method="post"> 出生日期:<input type="text" name="beginDate">至<input type="text" name="endDate"> <input type="submit" value="查询学生"> </form> </body> </html>
第二:控制层 SearchStudentServlet用来接受客户的请求,来处理流程,调用Model(StudentManager.java),转发到要请求的后台服务器的student_list.jsp页面
import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; import javax.servlet.*; import com.bjpowernode.exam.model.*; import com.bjpowernode.exam.manager.*; 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.findStudentList(beginDate, endDate); //将学生列表设置到requet范围中 //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 //以下写法错误,该 "/"代表了8080端口 //response.sendRedirect("/student_list.jsp"); response.sendRedirect(request.getContextPath() + "/student_list.jsp"); } }
第三:student_list.jsp页面接收数据形成html,返回到浏览器,渲染在界面上
<%@ 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"> /*表格宽度为1px,实线,黑色*/ 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"); 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.getContactTel()%></td> <td><%=student.getAddress()%></td> <td><%=student.getClasses().getClassesName()%></td> <% long b = 1000L*60L*60L*24L*365L; long a = System.currentTimeMillis() - student.getBirthday().getTime(); %> <td><%=a/b%></td> </tr> <% } %> </table> </body> </html>
在View的student_list.jsp页面中是大量的html和java代码的混合,在查询条件界面query_condention.jsp主要是html,因为不涉及后台数据的交互.
第四:xml配置Servlet:
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>SearchStudentServlet</servlet-name> <servlet-class>SearchStudentServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SearchStudentServlet</servlet-name> <url-pattern>/SearchStudentServlet</url-pattern> </servlet-mapping> </web-app>
第五:显示查询结果
总结
以上query_condention.jsp(输入查询条件)、SearchStudentServlet.java(请求控制Control分)+student_list.jsp(界面显示)的组合相当于三层中的U层,都与界面的显示相关,而StudentManager.java才是进入业务处理相当于三层的B层。故,我们可以简单理解成,MVC就是java基于U层的又一个细化,将界面显示和请求处理做了进一步细化分工。
MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中,MVC是分层的思想的体现,但是区别于三层设计模式(区别以后再和大家分享)。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 一行能装逼的 JavaScript 代码
- python 技术篇-时间戳的获取,记录程序处理时间
- 基于SpringBoot AOP面向切面编程实现Redis分布式锁
- Python+Selenium 技巧篇-svg标签内元素的xpath定位方式
- 小书MybatisPlus第5篇-Active Record模式精讲
- Python 语法问题-module ‘pip._internal‘ has no attribute ‘pep425tags‘. 原因及解决办法,32位、64位查看pip支持万能方法
- 总在说 Spring Boot 内置了 Tomcat 启动,那它的原理你说的清楚吗?
- JavaScript 技巧篇-js增加延迟时间解决单击双击事件冲突,双击事件触发单击事件
- Python 技术篇-sha256()加密的使用方法,sha1、md5加密方法
- Python 技术篇-如何打印一段文字,用友云霸气控制台颜文字打印
- Python 技术篇-获取秒级时间戳、毫秒级时间戳
- Python 技术篇-基于随机数的uuid码的生成
- BAT 脚本技术-利用bat批处理脚本静态指定ip地址、自动获取ip地址设置
- Oracle 技巧篇-快速批量删除当前数据库连接的用户,一键清空所有session会话方法
- Spring Security 中如何细化权限粒度?