第三章 实战MVC

J2EE如何集成一切

  • Java2企业版(Java 2 Enterprise Editon,J2EE)是一种超级规范。规定了servlets2.4,JSP2.0,EJB2.1(Enterprise JavaBean)
  • Web容器用于Web组件(servlet和JSP)。EJB容器用于业务组件。

  • 一个完全兼容的J2EE应用服务器必须有Web容器和一个EJB容器

  • Tomcat是一个Web容器

构建一个真正的(小)应用

  1. 分析用户视图
  2. 创建用于开发这个项目的开发环境
  3. 创建用于部署这个项目的部署环境(Eclipse环境:http://www.runoob.com/jsp/eclipse-jsp.html)
  4. 对Web应用的各个组件完成迭代的开发和测试。

第4步又分为5个小步骤

  1. 构建和测试用户最初请求的HTML表单
  2. 构建控制器servlet的第一个版本,并用前面的HTML表单测试这个控制器。这个版本通过HTML表单来调用,并打印它接受到的参数
  3. 为专家/模型类构建一个测试类,然后构建并测试专家/模型类本身。
  4. 把servlet 升级到第二版,这个版本增加一个功能,可以调用模型类获得啤酒建议。
  5. 构建JSP,把servlet升级到第三版,然后再测试整个应用

1.表单HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Project2</title>
</head>
<body>
<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>amber
<option>brown
<option>dark
</select>
<br><br>
<center>
<input type="SUBMIT">
</center>
</form>
</body>
</html>

selectbeer.do只是一个逻辑名,在XML部署文件中会映射到一个servlet文件

2.创建部署描述文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<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>

3.部署测试控制器 第一版servlet

package com.example.web;
import java.io.*;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;
import javax.servlet.http.*; /**
* Servlet implementation class BeerSelect
*/
@WebServlet("/BeerSelect")
public class BeerSelect extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* Default constructor.
*/
public BeerSelect() {
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");//确定返回的类型
PrintWriter out = response.getWriter();
out.println("Beer Selection Advice<br>");
String c = request.getParameter("color");//得到请求中name为color的字符串
out.println("<br>Got beerH color"+ c);
} }

4.构建和测试模型类

  • model 必须有自己的工具包,因为它不知道自己会被servlet调用。

    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");
    brans.add("Gout Stout");
    }
    return brands;
    }
    }

5.构建和部署第二版servlet

调用model

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Beer Selection Advice<br>");
String c = request.getParameter("color");
out.println("<br>Got beer color"+ c);
BeerExpert be = new BeerExpert();
List Advise=be.getBrands(c);
for(Iterator it = Advise.iterator();it.hasNext();)
{
out.print("<br>try:"+it.next());
}
}

6.构建jsp

<%@ page import="java.util.*" %>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<p>
<%
List styles=(List)request.getAttribute("styles");
Iterator it = styles.iterator();
while(it.hasNext())
{
out.print("<br>try: "+it.next());
}
%>
</p>
</body>
</html>

7.第三版servlet

package com.example.web;
import java.io.*;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.*;
import javax.servlet.http.*;
import com.example.model.*;
import java.util.*;
/**
* Servlet implementation class BeerSelect
*/
@WebServlet("/BeerSelect")
public class BeerSelect extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* Default constructor.
*/
public BeerSelect() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.setContentType("text/html");
//PrintWriter out = response.getWriter();
//out.println("Beer Selection Advice<br>");
String c = request.getParameter("color");
//out.println("<br>Got beer color"+ c);
BeerExpert be = new BeerExpert();
List Advise=be.getBrands(c);
request.setAttribute("styles",Advise); RequestDispatcher view=request.getRequestDispatcher("result.jsp");
view.forward(request,response); } }

值此一个MVC程序开发完毕

Eclipse坑点:

eclipse 写servlet 有几个坑点

  1. servlet代码放src里,而不是放web的src里。
    编译出来的class在build里

  2. 改了java文件 记得clean刷新Tomat的缓存

这本书看不下去了

[HeadFirst-JSPServlet学习笔记][第三章:实战MVC]的更多相关文章

  1. 《DOM Scripting》学习笔记-——第三章 DOM

    <Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...

  2. The Road to learn React书籍学习笔记(第三章)

    The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...

  3. [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设

    [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...

  4. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

  5. python学习笔记——第三章 串

    第三章 字符串学习 1.字符串不灵活, 它不能被分割符值 >>> format = "hello, %s. %s enough for ya?" >> ...

  6. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

  7. c#高级编程第七版 学习笔记 第三章 对象和类型

    第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 ...

  8. o'Reill的SVG精髓(第二版)学习笔记——第三章

    第三章:坐标系统 3.1视口 文档打算使用的画布区域称作视口.我们可以在<svg>元素上使用width和height属性确定视口的大小.属性的值可以是一个数字,该数字会被当作用户坐标下的像 ...

  9. 《机器学习实战》学习笔记第三章 —— 决策树之ID3、C4.5算法

    主要内容: 一.决策树模型 二.信息与熵 三.信息增益与ID3算法 四.信息增益比与C4.5算法 五.决策树的剪枝 一.决策树模型 1.所谓决策树,就是根据实例的特征对实例进行划分的树形结构.其中有两 ...

随机推荐

  1. mysql常用操作(转自阿铭linux)

    在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,您还需要会一些基本的相关操作.当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些基本的操作已经可以应付 ...

  2. IP地址基础和子网规划之其一

    IP地址的介绍:在TCP/IP环境中,各种各样的终端.工作站能同服务器.其他工作站无缝连接,是因为每一网络节点都使用了全网范围内能够唯一标识节点的IP地址.每个网络有一个全网唯一的网络号,在该网络中各 ...

  3. 第一次写博客,关于前端开发deMVC在js中的应用

    对前端MVC MVC分别是model.view.controller的缩写,模型.视图.控制器.这些更加偏向于后台,在以前MVC是只属于后台的.当然随着技术的进步,前端的大牛们将后台的一些东西应用于前 ...

  4. vector -1

    vector的特色有支持随机存取,在集合尾端增删元素很快,但是在集合中间增删元素比较费时. vector以模板(泛型)方式实现,可以保存任意类型的变数,包括使用者自定义的资料型态,例如:它可以是放置整 ...

  5. MfC基础--绘图基础--win32

    1.vc使用的控件分为三类: windows标准控件--MFC对这些进行了再封装 ActiveX 控件 其他MFC控件类 2.CWind是所有窗口的基类 3.GDI也属于一种API,主要用于绘图,(G ...

  6. vc2015 编译libcurl带openssl

    1.先编译zlib下载地址 http://zlib.net/ 我这边vc2015编译需要配置环境变量,不知道是装了wdk的原因还是多个vc版本的原因 设置环境变量lib和include路径 INCLU ...

  7. Spring技术_邮箱注册_激活_获取验证码

    项目结构 项目中用到的sql: create database hrSystem; use hrSystem; CREATE TABLE `emailverificationcode` ( `id` ...

  8. 距离顶部估计像素,显示div!

    <html> <head> <title>slide</title> <style type="text/css"> # ...

  9. python保留指定文件、删除目录其他文件的功能(1)

    由于给客户的发布版本上客户改动了些代码和图片,我们这边给他们更新publish都是增量更新(开发提供更新指定的文件,我们提取出来给客户进行覆盖更新),但有时需要更新的文件较多导致不得不一个一个的进行查 ...

  10. NFine常见错误

    1.新增数据录入录入不进去提示:An error occurred while updating the entries.See the inner exception for details. 这样 ...