JavaEE开发基础计算机科学技术系第11讲基于Servlet的MVC设计模式2回顾如何使用Map进行数据的存取?如何理解session在Web项目中的作用?常用的集合类有哪些?它们之间的区别是什么?3本讲问题什么是设计模式?如何理解MVC设计模式?为什么需要MVC设计模式?4理解MVC的优势掌握MVC的应用开发在MVC中会使用Servlet进行程序控制本章目标5JSP的缺点(2-1)JSP中登录功能的实现提交数据到register.jsp%request.setCharacterEncoding(GBK);Stringpass=request.getParameter(password);Stringuser=request.getParameter(loginName);Stringsql=select*fromuserinfowhereloginname=?;Connectioncon=ConnectionManager.getConnction();PreparedStatementpStatement=con.prepareStatement(sql);pStatement.setString(1,user);ResultSetrs=pStatement.executeQuery();if(rs.next()&&rs.getString(password).equals(pass)){Userlogineduser=newUser(user,pass);session.setAttribute(LOGINED_USER,logineduser);response.sendRedirect(books.jsp);}else{response.sendRedirect(register.html);}%访问数据库JSP中大量调用业务代码JSP的主要作用是什么?逻辑判断6JSP的缺点(2-2)美工进行页面编辑和维护美工%for(inti=0;ititles.size();i++){if(i%3==0){%TR%}%TD%=subStr(currentBook.getTitle())%/TD/TRTRTDIMGsrc=/store/images/%=currentBook.getImageFile()%//TD/TR%}%这是什么呀?我只认识HTML标签如果将流程控制和数据显示分离就好了7如何解决JSP的缺点1、在你所写的程序中,很多JSP页面直接访问数据库,如果数据库表名改变了,你所要做的工作是什么?2、你的程序中所有的页面都需要美工进行美化,但是他不懂Java怎么办?8生活案例顾客点菜顾客点菜厨师菜肴服务员加工菜肴服务员把菜单给厨师把菜给服务员以各自的功能进行分工9Web程序的功能分工如果把Web容器处理请求的过程按功能划分,你如何进行划分?10MVC设计模式(2-1)MVC设计模式模型-----Model视图-----View控制器-----ControllerMVC模式控制器模型视图JavaBeanJSPServlet11MVC设计模式(2-2)模型:代表应用程序状态和业务逻辑控制器:根据客户的请求来操纵模型,并把结果经由视图展现给客户视图:提供可交互的客户界面,向客户显示模型数据MVC设计模式的模块组成12Web程序的MVCWeb容器处理请求过程请求ServletJavaBeanJSP页面执行调用转向响应访问返回数据数据库客户端JSP视图动态显示数据数据库Servlet控制器,用于接收请求和控制应用程序的流程JavaBean数据模型进行业务逻辑和访问数据库13MVC编程思路MVC编程思路执行Servlet接收客户端请求,并调用业务类的方法进行数据处理Servlet根据数据处理的结果,控制下一个显示的HTML或者JSP页面ServletJSP页面转向JavaBean调用14MVC编程(2-1)修改登录为MVC模式formmethod=postname=Regsiteraction=/store/doLogin……/form提交给Servlet创建页面--login2.html使用Eclipce向导创建Servlet--LoginServlet.java…Stringpass=request.getParameter(password);Stringuser=request.getParameter(loginName);CheckLoginck=newCheckLogin();if(ck.validate(user,pass))response.sendRedirect(/store/ch05/books.jsp);elseresponse.sendRedirect(/store/ch05/login2.html);…创建一个业务类对象,并调用validate()方法判断用户是否存在15MVC编程(2-2)修改登录为MVC模式--创建业务类CheckLogin.javapublicclassCheckLogin{publicbooleanvalidate(Stringuser,Stringpass){booleanvalid=false;ConnectiondbConnection=null;ResultSetres=null;try{Stringsql=select*fromuserinfowhereloginname=?;Connectioncon=ConnectionManager.getConnction();PreparedStatementpStatement=con.prepareStatement(sql);pStatement.setString(1,user);res=pStatement.executeQuery();if(res.next()&&res.getString(password).equals(pass))valid=true;}catch(SQLExceptionsqlE){sqlE.printStackTrace();}returnvalid;}}查询数据库,如果存在该用户返回true,否则返回false演示示例2:CheckLogin.java16小结MVC的三层结构是按什么来划分?每一层的功能和组件是什么?举几个例子说明在程序中使用MVC的好处?17MVC实现结账功能(3-2)增加结帐的功能创建处理订单的Servlet--ProcessOrder.javaStringusername=request.getParameter(username);//用户名Stringzipcode=request.getParameter(zipcode);//邮编Stringphone=request.getParameter(phone);//电话Stringcreditcard=request.getParameter(creditcard);//信用卡HttpSessionsession=request.getSession();doubletotal=((Double)session.getAttribute(total)).doubleValue();OrderOperationop=newOrderOperation();op.saveOrder(username,zipcode,phone,creditcard,total);session.invalidate();request.getRequestDispatcher(/ch05/bye.jsp).forward(request,response);创建业务类对象,并调用操作数据库方法从session中取出total让session失效18MVC实现结账功能(3-3)增加结帐的功能创建操作数据库业务类--OrderOperation.javapublicclassOrderOperation{publicintsaveOrder(Stringusername,Stringzipcode,Stringphone,Stringcreditcard,doubletotal){intresult=0;try{Connectioncon=ConnectionManager.getConnction();StringstrSql=insertintoBookOrder(username,zipcode,phone,+creditcard,total)values(?,?,?,?,?);PreparedStatementpStatement=con.prepareStatement(strSql);pStatement.setString(1,username);…//设置其他参数值result=pStatement.executeUpdate();}catch(SQLExceptionsqlE){sqlE.printStackTrace();}returnresult;}}执行数据库添加的操作演示示例4:OrderOperation.java19总结为什么使用MVC设计模式?MVC设计模式各部分对应的组件是什么?MVC各部分间是如何协作的?