深入浅出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是分层的思想的体现,但是区别于三层设计模式(区别以后再和大家分享)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JAVA实现 springMVC方式的微信接入、实现消息自动回复实例

    前段时间小忙了一阵,微信公众号的开发,从零开始看文档,踩了不少坑,也算是熬过来了,最近考虑做一些总结,方便以后再开发的时候回顾,也给正在做相关项目的同学做个参考. 1.思路 微信接入:用户消息和开发者需要的事件推送都会通过微信方服务器发起一个请求,转发到你在公众平台配置的服务器url地址,微信方将带上signature,timestamp,nonce,echostr四个参数,我们自己服务器通过拼接公众平台配置的token,以及传上来的timestamp,nonce进行SHA1加密后匹配signa

  • Java Web实现的基本MVC实例分析

    本文实例讲述了Java Web实现的基本MVC.分享给大家供大家参考.具体如下: login.jsp--视图部分的输入文件 success.jsp--视图部分的输出文件 failure.jsp--视图部分的输出文件 LoginBean.java--模型部分 LoginServlet.java--控制器部分 web.xml--web应用的配置文件 下面分别介绍: 1.login.jsp 该功能的输入文件,用户首先访问这个文件.主要用于输入用户名和口令. 代码如下: <%@ page content

  • Java框架篇:Spring+SpringMVC+hibernate整合开发

    前言: 最近没什么事做,搭个框架写成博客记录下来,拉通一下之前所学知识. 话不多说,我们直接步入正题. 准备工作: 1/安装并配置java运行环境 2/数据库的安装配置(Mysql) 3/安装并配置服务器(Tomcat) 4/Maven 5/ IntelliJIDEA的安装配置(本人使用的主要软件是IntelliJIDEA,没用eclipse什么的) 6/ 使用IntelliJIDEA创建一个web app项目. 貌似就这些了吧 导包 不同于以往的导包,由于我们创建的是maven的webapp项

  • JavaWeb框架MVC设计思想详解

    Servlet:在Servlet中拼接html内容 JSP:在html中拼接java JSP+JavaBean:利用javaBean将大量的代码提取走 Servlet+JSP+JavaBean:Servlet是控制器,javabean封装数据,jsp展示数据 javaweb的经典三层结构: dao javabean servlet ==> service jsp javabean: javabean是一个遵循特定写法的java类 1.这个java类必须有一个无参的构造函数 2.属性必须私有化 3

  • MVC、MVP和MVVM分别是什么_动力节点Java学院整理

    一.MVC MVC模式的意思是,软件可以分成三个部分. 视图(View):用户界面. 控制器(Controller):业务逻辑 模型(Model):数据保存 各部分之间的通信方式如下. 1.View 传送指令到 Controller 2.Controller 完成业务逻辑后,要求 Model 改变状态 3.Model 将新的数据发送到 View,用户得到反馈 所有通信都是单向的. 二.互动模式 接受用户指令时,MVC 可以分成两种方式.一种是通过 View 接受指令,传递给 Controller

  • 深入浅出Java mvc_动力节点Java学院整理

    在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便. 首先来简单的学习一下MVC的基础知识,MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑和数据显式分离的方法组织代码,将业务逻辑被聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务

  • Java多态(动力节点Java学院整理)

    什么是多态 1. 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 2. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 3. 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 4. 多态的作用:消除类型之间的耦合关系. 5. 现实中,关于多

  • Java 运算符 动力节点Java学院整理

    Java的运算符,分为四类: 算数运算符.关系运算符.逻辑运算符.位运算符. 算数运算符(9):+ - * / % ++ -- 关系运算符(6):== != > >= < <= 逻辑运算符(6):&& || ! ^ & | 位运算符(7):& | ~ ^ >> << >>> Java基本数据类型: 数值类型: 整型:byte.short.int.long 非整型:double.float 非数值类型:char

  • Java异常继承结构解析_动力节点Java学院整理

    Java异常类层次结构图: 异常的英文单词是exception,字面翻译就是"意外.例外"的意思,也就是非正常情况.事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误.比如使用空的引用.数组下标越界.内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图.错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了,并且运行期间的错误往往是难以预料的.假若程序在运行期间出现了错误

  • Nginx简介_动力节点Java学院整理

    1.什么是Nginx Nginx来自俄罗斯的Igor Sysoev在为Rambler Media(http://www.rambler.ru/)工作期间,使用C语言开发了Nginx.Nginx作为Web服务器,一直为俄罗斯著名的门户网站Rambler Media提供着出色.稳定的服务. Igor Sysoev将Nginx的代码开源,并且赋予其最自由的2-clause BSD-like license许可证.由于Nginx使用基于事件驱动的架构能够并发处理百万级别的TCP连接,高度模块化的设计和自

  • web压力测试工具_动力节点Java 学院整理

    0. Grinder –  Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提供了便利. 支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行管理.根据项目网站的说法,Grinder的 主要目标用户是"理解他们所测代码的人--Grinder不仅仅是带有一组相关响应时间的'黑盒'测试.由于测试过程可以进行编码--而不是简单地脚本 化,所以程序员能测试应用中内部的各个层次,而不仅仅是通过用户界面测试响应时间. 1. Pylot -Pylot 是

  • 深入理解Java中的final关键字_动力节点Java学院整理

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例.final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的. final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量.一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如

  • Java线程安全的常用类_动力节点Java学院整理

    线程安全类 在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的.在jdk1.2之后,就出现许许多多非线程安全的类. 下面是这些线程安全的同步的类: vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用.在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的. statck:堆栈类,先进后出 hashtable:就比hashmap多了个线程安全 除了这些之外,其他的集合大都是非线程安全的类和接口. 线程安全的类其方法是同步

  • Java中HashSet和HashMap的区别_动力节点Java学院整理

    什么是HashSet? HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象.如果我们没有重写这两个方法,将会使用这个方法的默认实现.. public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true. 什

  • 十大常见Java String问题_动力节点Java学院整理

    本文介绍Java中关于String最常见的10个问题: 1. 字符串比较,使用 "==" 还是 equals() ? 简单来说, "==" 判断两个引用的是不是同一个内存地址(同一个物理对象). 而 equals 判断两个字符串的值是否相等. 除非你想判断两个string引用是否同一个对象,否则应该总是使用 equals()方法. 如果你了解 字符串的驻留 ( String Interning ) 则会更好地理解这个问题 2. 对于敏感信息,为何使用char[]要比

随机推荐