教案:第5章 基于Servlet的MVC设计模式

来源:互联网 发布:矩阵乘积求导 编辑:程序博客网 时间:2024/04/30 06:05

 

授课教师:牟勇
课时:100分钟
 
本章技能目标
n理解MVC的优势
n掌握MVC的应用开发
n在MVC中会使用Servlet进行程序控制
本章重点
nMVC的应用开发
nServlet在MVC中的应用
本章难点
nServlet在MVC中的应用
本章工作任务
n升级E-Book电子书店系统为MVC模式
l   整章授课思路
n本章依次讲解3个问题:为什么需要MVC,MVC的定义和使用MVC模式编程
n为什么需要MVC:列举在JSP页面中大量使用Java代码进行访问数据库和处理业务逻辑的弊端,在这种情况下,应该根据JSP的特点,只是让它显示页面内容
nMVC的定义:根据餐厅点菜的生活案例,说明在程序设计中为了提高程序的可维护性,根据组件的特点,把程序分为3层:模型,视图和控制器(JavaBean还没有讲,可以说明处理业务逻辑类和实体类都是JavaBean)。以及MVC中每一部分对应的组件和功能。
n使用MVC模式编程:通过讲解MVC的模型,视图,控制器组件,说明使用MVC模式的编程思路:使用Servlet接收客户端数据,并调用业务类方法处理数据,最后转发或重定向到JSP或HTML文件,响应客户端请求。
回顾:   [5分钟]
如何使用Map进行数据的存取?
如何理解session在Web项目中的作用?
常用的集合类有哪些?它们之间的区别是什么?
预习检查:   [5分钟]
什么是设计模式?
如何理解MVC设计模式?
为什么需要MVC设计模式?
课程知识点讲解:   
为什么需要MVC[20分钟]
问题:JSP主要是作什么的?
答案:网页内容的显示,方便美工进行开发。
问题:可是,美工只认识HTML,看不懂Java代码,怎么办?
答案:将Java代码搬离JSP。
生活案例:顾客点菜。
流程:服务员提供菜单,顾客点菜,之后服务员告诉大厨做什么;大厨做好之后,由服务员端给顾客。
特点:对顾客提供服务的,似乎只有服务员,顾客不会和大厨打交道,各自分工,各司其职。
问题:那我们的一个Web程序应该如何来分工呢?
答案:处理表现逻辑的,处理业务逻辑的,处理数据访问的。
MVC的定义[20分钟]
什么是设计模式
是一套被反复使用、多数人知晓的、代码设计经验的总结
设计模式的作用
解决一类问题的成功经验,设计的思路。为将来的修改预留退路。
MVC设计模式
模型:代表应用程序状态和业务逻辑
视图:提供可交互的客户界面,向客户显示模型数据
控制器:根据客户的请求来操纵模型,并把结果经由视图展现给客户
使用MVC模式编程[40分钟]
Web容器处理请求的过程
教员简要说明客户端一次请求-响应过程中代码执行流程。
强调:
JSP视图动态显示数据,JavaBean数据模型进行业务逻辑和访问数据库。
Servlet调用JavaBean相关方法,并根据执行结果完成转向。
修改登录为MVC模式
修改表单的action属性

<form method= "post" name="Regsiter" action="/store/register">
……
</form>

添加Servlet

String pass = request.getParameter("password");
String user = request.getParameter("loginName");
CheckLogin ck =new CheckLogin();
if (ck.validate(user, pass))
    response.sendRedirect("/store/ch05/books.jsp");
else
     response.sendRedirect("/store/ch05/register2.html");

添加JavaBean

public class CheckLogin {
     public boolean validate(String user, String pass) {
                 boolean valid = false;
                 Connection dbConnection = null;
                 ResultSet res = null;
                try {
                     String sql = "select * from userinfo where loginname = ? ";
                     Connection con = ConnectionManager.getConnction();
                    PreparedStatement pStatement = con.prepareStatement(sql);
                     pStatement.setString(1, user);
                     res = pStatement.executeQuery();
                     if (res.next() && res.getString("password").equals(pass))
                             valid = true;
                     } catch (SQLException sqlE) {sqlE.printStackTrace();}
                     return valid;
           }
}

常见错误:404
教员应提醒学员在写转发路径时,不要写错,并再次提醒相对路径的写法。
小结:
让学员试总结MVC的优点和好处。然后教员说明MVC优点和好处。
好处不在于在编码的时候方便了,好处在于使我们的程序将来的维护和扩展方便。
MVC实现结账功能
创建处理订单的Servlet-- ProcessOrder.java

String   username = request.getParameter("username");// 用户名
String   zipcode = request.getParameter("zipcode");// 邮编
String   phone = request.getParameter("phone");// 电话
String   creditcard = request.getParameter("creditcard");// 信用卡
 
HttpSession session = request.getSession();
double total = ((Double)session.getAttribute("total")).doubleValue();
OrderOperation   op = new OrderOperation();
op.saveOrder(username, zipcode, phone, creditcard, total);
session.invalidate();
request.getRequestDispatcher("/ch05/bye.jsp") .forward(request,response);

创建操作数据库业务类-- OrderOperation.java

public class OrderOperation {
     public int saveOrder(String username,String zipcode,
                                         String phone,String creditcard, double total){
           int result = 0;
           try {
              Connection con = ConnectionManager.getConnction();
              String strSql = "insert into BookOrder(username,zipcode,phone,"
                                          + "creditcard,total) values(?,?,?,?,?)";
              PreparedStatement pStatement = con.prepareStatement(strSql);
              pStatement.setString(1, username);
              …//设置其他参数值
              result = pStatement.executeUpdate();
            } catch (SQLException sqlE) {      sqlE.printStackTrace();      }
               return result;
           }
}

本章总结  [10分钟]
为什么使用MVC设计模式?
MVC设计模式各部分对应的组件是什么?
MVC各部分间是如何协作的?
考核点
设计模式
MVC各部分间如何协作
扩展部分:
 暂无
学员问题汇总:
 暂无
作业:
 习题1:112页至113页选择题
 习题2:113页第1,2,3题

 习题3:预习第六章,试做课后的选择题