1、采用MVC,不仅要求业务逻辑和表示分离。实际上,业务逻辑甚至根本不知道表示的存在。MVC的关键是,业务逻辑要与表示分离,而要求在中间放上别的东西,这样业务逻辑本身就可以作为一个可以重用的Java类存在,它根本不用对视图有所了解。

2、MVC迷你教程,创建和部署MVC Web应用。

第一步:分析用户视图,以及高层体系结构

第二步:创建用于开发这个项目的开发环境

第三步:创建用于部署这个项目的部署环境

第四步:对Web应用的各个组件完成迭代的开发和测试

第一步:分析用户视图,以及高层体系结构(方便以后“从容地”扩展这个应用)

第二步:创建用于开发这个项目的开发环境

使用标准的包结构,这样才能得到包的所有好处:项目管理,命名空间管理,可移植和可重用。

第三步:创建用于部署这个项目的部署环境

第四步:对Web应用的各个组件完成迭代的开发和测试

Ⅰ、构建和测试用户最初请求的HTML表单

Ⅱ、构建控制器servlet的第一个版本,并用前面的HTML表单测试这个控制器

Ⅲ、为专家/模型类构建一个测试类,然后构建并测试专家/模型类本身

Ⅳ、把servlet升级到第二个版本,该版本增加一个功能,可以调用模型类来得到啤酒建议

Ⅴ、构建JSP,把servlet升级到第三个版本(把表示分派到JSP),然后再测试整个应用

Ⅰ、构建和测试用户最初请求的HTML表单

创建form.html

<!DOCTYPE html>
<html>
<head>
<meta charset="{CHARSET}">
<title>form.html</title>
</head>
<body>
<!--在html看来,SelectBeer.do就是要调用的servlet-->
<h1 align="center">Beer Selection Page</h1>
<form method="post" action="SelectBeer.do">
<p>select beer characteristics</p>
Color:
<select name="color" size="1">
<option>light</option>
<option>amber</option>
<option>brown</option>
<option>dark</option>
</select>
<br />
<center>
<input type="submit" />
</center>
</form>
</body>
</html>

部署并测试

在开发环境的etc文件下创建部署描述文件web.xml

<?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>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文件

Ⅱ、构建控制器servlet的第一个版本,并用前面的HTML表单测试这个控制器

idea快速重写父类方法的快捷是ctrl+0.

package com.example.web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter; public class BeerSelect extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 之所以是doPost,是因为在html中的表单指出method=post
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("Beer Selection Advice<br>");
String c = req.getParameter("color");
out.println("<br>Got beer color" + c);
}
}

把.class文件部署到相应的tomcat目录下,重启tomcat(必要的!),完成测试。如果在这个时候如果对.class文件有修改,只有重启tomcat才能生效,对于html的修改则不是必须的。

Ⅲ、为专家/模型类构建一个测试类,然后构建并测试专家/模型类本身

如何用junit编写测试类?单元测试

package com.example.model;

import java.util.*;

public class BeerExpert {

    public List getBrands(String color) {
List brands = new ArrayList();
if (color.equals("amber")) {
brands.add("Jack Amber");
brands.add("Red Moose");
} else {
brands.add("Jail Pale Ale");
brands.add("Gout Stout");
}
return brands;
}
}

Ⅳ、把servlet升级到第二个版本,该版本增加一个功能,可以调用模型类来得到啤酒建议

package com.example.web;

import com.example.model.BeerExpert;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*; public class BeerSelect extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 之所以是doPost,是因为在html中的表单指出method=post
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("Beer Selection Advice<br>");
String c = req.getParameter("color");
// out.println("<br>Got beer color " + c);
BeerExpert be = new BeerExpert();
List result = be.getBrands(c);
Iterator it = result.iterator();
while (it.hasNext()) {
out.print("<br>try: " + it.next());
}
}
}

Ⅴ、构建JSP,把servlet升级到第三个版本(把表示分派到JSP),然后再测试整个应用

result.jsp

<%@ page import="java.util.*" %>

<html>
<body>
<h1 align="center">Beer Recommendations JSP</h1>
<p>
<%
List styles = (List)request.getAttribute("styles");
Iterator it = styles.iterator();
while (it.hasNext()) {
out.print("<br>try: " + it.next());
}
%>
</body>
</html>

package com.example.web;

import com.example.model.BeerExpert;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*; public class BeerSelect extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 之所以是doPost,是因为在html中的表单指出method=post
// resp.setContentType("text/html");
// PrintWriter out = resp.getWriter();
// out.println("Beer Selection Advice<br>");
String c = req.getParameter("color");
// out.println("<br>Got beer color " + c);
BeerExpert be = new BeerExpert();
List result = be.getBrands(c);
// Iterator it = result.iterator();
// while (it.hasNext()) {
// out.print("<br>try: " + it.next());
// }
req.setAttribute("styles", result); // 为请求增加一个属性,供JSP使用。 RequestDispatcher view = req.getRequestDispatcher("result.jsp"); // 为JSP实例化一个请求分派器 view.forward(req, resp); // 使用请求分派器要求容器准备好JSP,并向JSP发送请求和响应
}
}

【Head First Servlets and JSP】笔记2:MVC迷你教程的更多相关文章

  1. Head First Servlets & JSP 学习笔记 第三章 —— MVC迷你教程

    临渊羡鱼,不如退而结网!是时候动手搞事情了! 我们的四大步骤: ①分析用户的视图(也就是浏览器要显示的东西),以及高层体系结构: (这个就是所谓的前端吧?用JSP?JSP可以当成Html来用吧?高层体 ...

  2. jsp学习笔记:mvc开发模式

    jsp学习笔记:mvc开发模式2017-10-12 22:17:33 model(javabe)与view层交互 view(视图层,html.jsp) controller(控制层,处理用户提交的信息 ...

  3. 【Head First Servlets and JSP】笔记23:Expression Language(EL) 完全攻略

    基本上是<Head First Servlets and JSP>内容的整理.扩充.顺便推荐一个供参考的JSP教程:JSP Tutorial内容很全面,还有一些有趣的实例. 完整代码参考 ...

  4. 无废话MVC入门教程笔记

    自学mvc,看了园子里李林峰写的李林峰写的无废话MVC入门教程笔记,现在有的平时忽略的或是不太清楚的点记下来 1,Html.DropDownList //服务端写法 @{ //下拉列表的值 List& ...

  5. Spring MVC 入门教程示例 (一)

    今天和大家分享下  Spring MVC  入门教程 首先还是从 HelloWorld  web 工程开始 -------------------------- 1.首先创建一个Maven Web工程 ...

  6. Spring MVC新手教程(二)

    第一篇文章宏观讲了Spring MVC概念,以及分享了一个高速入门的样例. 这篇文章主要来谈谈Spring MVC的配置文件. 首先来谈谈web.xml: web项目启动时自己主动载入到内存中的信息, ...

  7. [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.         jqGrid和AJAX 5.         GridSettings 6.  ...

  8. [译]MVC网站教程(三):动态布局和站点管理

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.   自定义操作结果和控制器扩展 1)   OpenFileResult 2)   ImageR ...

  9. [译]MVC网站教程(二):异常管理

    介绍 “MVC网站教程”系列的目的是教你如何使用 ASP.NET MVC 创建一个基本的.可扩展的网站. 1)   MVC网站教程(一):多语言网站框架 2)   MVC网站教程(二):异常管理 3) ...

随机推荐

  1. 【BZOJ】3397: [Usaco2009 Feb]Surround the Islands 环岛篱笆(tarjan)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3397 显然先tarjan缩点,然后从枚举每一个scc,然后向其它岛屿连费用最小的边,然后算最小的即可 ...

  2. Ubuntu上安装与配置JDK1.8

    Ubuntu上安装与配置JDK1.8 一.下载 下载JDK,由于是Ubuntu. 所以去官网下载tar.gz格式的就可以(ubuntu使用浏览器下载网速比較慢,所以推荐到window上下载好). ht ...

  3. java collection 类图

    转载:http://visionsky.blog.51cto.com/733317/371809/

  4. poj 3275(传递闭包)

    题目链接:http://poj.org/problem?id=3275 思路:对于n个节点,共有n*(n-1)/2对关系,对于给出的m对已经确定的关系,我们可以用传递闭包推出目前已经确定的关系对数an ...

  5. Ubuntu14.04编译Android5.1.1源码

    1.Ubuntu环境配置 硬盘:120G 内存:4G 注:配置很重要,直接影响能否编译成功. 2.安装JDK sudo apt-get update sudo apt-get install open ...

  6. springcloud 与 dubbo 比较

    作者:潜龙勿用链接:https://www.zhihu.com/question/45413135/answer/242224410来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  7. centos使用pypy

    pypy最大的特点是使用了jit,可以直接使用机器码而非字节码,大大的提高了效率 ======================== 安装步骤 1.安装pypy yum install pypy* -y ...

  8. 理解PHP中会话控制

    如果以前没有接触过建站或网络编程,只是从头开始学PHP,以及用PHP来建立动态站点,那么会话(SESSION)对于初学者就有点难理解.那么到底什么是会话呢?理解一个概念需要从它产生的背景或问题出发,所 ...

  9. 160701、理解 Promise 的工作原理

    Javascript 采用回调函数(callback)来处理异步编程.从同步编程到异步回调编程有一个适应的过程,但是如果出现多层回调嵌套,也就是我们常说的厄运的回调金字塔(Pyramid of Doo ...

  10. windosw启动redis

    1.cmd控制台 cd C:\Program Files\Redis 2.redis-server.exe redis.windows.conf 3. ok!!