简单MVC理解与实现
MVC基本概念
MVC大家不陌生,包含模型(Model)、视图(View)、控制器(Controller),其中模型用于基本业务逻辑的实现,视图用于响应结果的表示,控制器用于模型控制和请求分派。先放上一张介绍MVC组件和功能的图,可以了解三个组件的关系与职能:

简单MVC实现
Servlet运行在容器(Tomcat)中,容器允许一个组件调用另一个组件。下图是《Head First Servlet&JSP》中推荐啤酒的例子,实现MVC的基本思想,其中Servlet为控制器,调用模型并得到结果信息,保存到请求对象中,然后将请求分派给JSP。

MVC调用过程:
- 客户端体请求;
- 容器接收请求,并根据请求URL和web.xml映射到对应的Servlet;
- Servlet调用对应的模型,处理实际业务逻辑;
- 模型处理完后,返回结果信息;
- Servlet将模型返回的结果作为属性值封装到请求对象中;
- 通过“请求分配”的功能,调用指定的视图(JSP等);
- 视图调用请求对象中模型返回的结果,生成页面返回给容器;
- 容器将结果反馈给客户端。
前端提交请求页面
客户端可以选择啤酒特征中的颜色作为条件进行查询,如下图:

代码实现如下,通过表单form声明以POST方式提交请求数据,并由SelectBeer.do处理:
<html>
<body>
<h1 align = "center">Beer Selection Page</h1>
<form method = "POST"
action = "SelectBeer.do">
Select beer characteristics<p>
Color:
<select name = "color" size = "1">
<option value = "light">light</option>
<option value = "amber">amber</option>
<option value = "brown">brown</option>
<option value = "dark">dark</option>
</select>
<br><br>
<center>
<input type = "SUBMIT">
</center>
</form>
</body>
</html>
根据web.xml实现映射Servlet
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true"> <servlet>
<servlet-name>Ch3 Beer</servlet-name>
<servlet-class>com.example.web.BeerSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Ch3 Beer</servlet-name>
<url-pattern>/SelectBeer.do</url-pattern>
</servlet-mapping>
</web-app>
一个Servlet对应三个名字:URL名、部署名和完全限定名。其中URL名是面向客户端的,由客户端进行调用;布署名是部署服务时秘密的内部名,可随意定义;完全限定名是对应真实Servlet。他们通过<servlet>和<servlet-mapping>进行映射和声明。上边URL为“/SelectBeer.do”,部署名为Ch3 Beer,安全限定名为com.example.web.BeerSelect。
接收请求的Servlet控制器
package com.example.web; import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.example.model.*; public class BeerSelect extends HttpServlet{ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ String c = request.getParameter("color");
BeerExport beerExport = new BeerExport();
List<String> result = beerExport.getBrands(c); request.setAttribute("styles",result); RequestDispatcher view = request.getRequestDispatcher("result.jsp");
view.forward(request,response);
}
}
BeerServlet继承自HttpServlet,可以接收HTTP请求。重写doPost方法接收表单数据、调用模型获取结果、将结果封装到请求对象中,并通过“请求分派”调用result.jsp,生成页面返回。
模型
package com.example.model;
import java.util.*;
public class BeerExport{
public List<String> getBrands(String color){
List<String> brands = new ArrayList<>();
switch (color){
case "amber":
brands.add("Jack Amber");
brands.add("Red Moose");
break;
default:
brands.add("Jail Pale Ale");
brands.add("Gout Stout");
break;
}
return brands;
}
}
模型就是普通类,实现具体业务逻辑。
视图
<%@ page import = "java.util.*" %>
<html>
</body>
<h1 align="center"> Beer Recommendations JSP</h1>
<p>
<%
List<String> brands = (List)request.getAttribute("styles");
Iterator it = brands.iterator();
while(it.hasNext()){
out.print("<br>try: "+it.next());
}
%>
</body>
</html>
JSP是另一种Servlet,只是将原来写在Servlet中的HTML抽离出来,在第一次请求到来时转换为Servlet进行实例化。其将调用请求对象中的模型返回结果,生成页面。
返回给客户端的页面

其中,http://localhost:8080/Beer-v1/SelectBeer.do中,Beer-v1是Web应用上下文的根。
总结
- MVC基本思想和调用过程
- 简单MVC实现
- 学习servlet相关概念:url映射、servlet实例实现等。
简单MVC理解与实现的更多相关文章
- ASP.NET MVC 理解MVC模式
ASP.NET MVC 理解MVC模式 PS:MVC出来很久了,工作上一直没机会用,所以我也没去学.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得,并希望能得到各位园友的斧正. ...
- Java框架-Spring MVC理解001
Spring MVC理解 1.servlet--Spring MVC的本质 2.Spring MVC其实是一个工具,具体的理解可以分为两步:第一步,了解这个工具是怎么创建出来的:第二步,了解这个工具是 ...
- 使用Java元注解和反射实现简单MVC框架
Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...
- 简单的理解deflate算法
简单的理解deflate算法 最近做压缩算法. 用到了deflate压缩算法, 找了很多资料, 这篇文章算是讲的比较易懂的, 这篇文章不长,但却浅显易懂, 基本上涵盖了我想要知道的所有要点. 翻译 ...
- OSI七层模式简单通俗理解
OSI七层模式简单通俗理解 这个模型学了好多次,总是记不住.今天又看了一遍,发现用历史推演的角度去看问题会更有逻辑,更好记.本文不一定严谨,可能有错漏,主要是抛砖引玉,帮助记性不好的人.总体来说,OS ...
- 对js原型简单的理解和图解
对js原型简单的理解和图解 最近在努力的学习js中,今天就抽了个空把自己理解的原型,记下一下在笔记中,以后自己查看,有空在会把原型链记录一下. 1.prototype prototype:是一个函数的 ...
- 最简单的理解 建立TCP连接 三次握手协议
最简单的理解一:建立TCP连接:三次握手协议 客户端:我要对你讲话,你能听到吗:服务端:我能听到:而且我也要对你讲话,你能听到吗:客户端:我也能听到.…….互相开始通话…….. 二:关闭TCP ...
- MVC理解(全程白话不拽词)
我所发的所有博客只为了给想干程序员,但是基础没有或者很差,刚入职场的人 所有的观点不一定准确,我不懂的或者不理解的都会备注出来 先说MVC MVC理解为:M = Model = 数据库表里面每 ...
- 简单mvc框架核心笔记
简单mvc框架核心笔记 看了thinkphp5的源码,模仿写了一个简单的框架,有一些心得笔记,记录一下 1.目录结构 比较简单,没有tp那么复杂,只是把需要的核心类写了一些. 核心类库放在mykj里, ...
随机推荐
- mysql数据库的安装及体系说明
第1章 MySQL介绍 1.1 数据的定义 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质.状态以及相互关系等进行记载的物理符号或这些物理符号的组合,是可识别.抽象的符号 1.2 数据 ...
- NFS介绍和安装
NFS简单介绍 NFS 是Network File System的缩写,即网络文件系统. 一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外发布.功能是通过网络让不同的机器.不同的操作 ...
- 【剑指offer】扑克牌的顺子
个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想測測自己的手气,看看能不能抽到顺子,假设抽到的话,他决定去买体育彩票,嘿嘿! ."红心A,黑桃3,小王,大王,方片 ...
- .NET作品集:linux下的.net mvc cms
cms程序架构 本程序是主要是用于企业网站开发的,也可以做博客程序,程序是从之前上一篇的.net 博客程序改进过来的,主要技术由webform转成.net mvc了,由于是很早之前的项目,12年还是m ...
- Python 爬虫 爬校花网!!
爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本 1.福利来了 校花网 ,首先说为什么要爬这个网站呢,第一这个网站简单爬起来容易不会受到打击,第二呢 你懂得... 1.第一步,需要下载 ...
- JAVA入门[5]-初步搭建SpringMVC站点
一.新建Module 1.新建Module,类型如下图所示: 2.为项目添加Spring框架支持,操作步骤如下: 首先在Module右键->Add Framework Support: 2.Sp ...
- 码农的奋斗之路 CTO说 读后感
拜读了各位大神的分享,对CTO的职责有了进一步的认识. 什么是CTO? CTO需要具备哪些技能? CTO与管理 CTO的作用是什么? 如何体现CTO的价值? CTO撸不撸代码? 小结
- jQuery里使用setinterval
如果第一个参数是一个已写好的函数而不是匿名代码块,一定不要加引号,直接var ** = setinterval{myFunction ,500},只能这样,加括号会直接只调用一次,自然不行,加引号和括 ...
- cs231n --- 3 : Convolutional Neural Networks (CNNs / ConvNets)
CNN介绍 与之前的神经网络不同之处在于,CNN明确指定了输入就是图像,这允许我们将某些特征编码到CNN的结构中去,不仅易于实现,还能极大减少网络的参数. 一. 结构概述 与一般的神经网络不同,卷积神 ...
- [UWP]了解模板化控件(6):使用附加属性
1. 基本需求 之前的ContentView2添加了PointerOver等效果,和TextBox等本来就有Header的控件放在一起反而变得鹤立鸡群. 为了解决这个问题,这次把ContentView ...