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

 

授课教师:牟勇
课时: 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文件,响应客户端请求。
如何使用Map进行数据的存取?
如何理解session在Web项目中的作用?
常用的集合类有哪些?它们之间的区别是什么?
什么是设计模式?
如何理解MVC设计模式?
为什么需要MVC设计模式?
为什么需要MVC[20分钟]
问题:JSP主要是作什么的?
答案:网页内容的显示,方便美工进行开发。
问题:可是,美工只认识HTML,看不懂Java代码,怎么办?
答案:将Java代码搬离JSP。
生活案例:顾客点菜。
流程:服务员提供菜单,顾客点菜,之后服务员告诉大厨做什么;大厨做好之后,由服务员端给顾客。
特点:对顾客提供服务的,似乎只有服务员,顾客不会和大厨打交道,各自分工,各司其职。
问题:那我们的一个Web程序应该如何来分工呢?
答案:处理表现逻辑的,处理业务逻辑的,处理数据访问的。
MVC的定义[20分钟]
什么是设计模式
是一套被反复使用、多数人知晓的、代码设计经验的总结
设计模式的作用
解决一类问题的成功经验,设计的思路。为将来的修改预留退路。
MVC 设计模式
模型:代表应用程序状态和业务逻辑
视图:提供可交互的客户界面,向客户显示模型数据
控制器:根据客户的请求来操纵模型,并把结果经由视图展现给客户
使用MVC模式编程[40分钟]
Web 容器处理请求的过程
教员简要说明客户端一次请求-响应过程中代码执行流程。
强调:
v JSP视图动态显示数据,JavaBean数据模型进行业务逻辑和访问数据库。
v 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;
           }
}

为什么使用MVC设计模式?
MVC设计模式各部分对应的组件是什么?
MVC各部分间是如何协作的?
设计模式
MVC各部分间如何协作
 暂无
 暂无
 习题1:112页至113页选择题
 习题2:113页第1,2,3题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默然说话

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值