应用案例

7.2 应用案例

       本节通过二个案例来说明MVC的基本思想,MVC的工作模式。

7.2.1 一个简单的例子

       第五章介绍了把triangle.jsp改造成为JSP+JavaBean模式,本节,在此基础上,改造成为MVC即JSP+JavaBean+servlet模式。在这个案例中,M层(JavaBean)保持原有设计不变,即为类Triangle(用于三角形的面积计算等功能)和类Stringtonum(用于把输入字符串转成三角形的三条边值)。按照MVC模式,设计servlet为TriangleMVC,参考代码如下。

       package servlet;

       import java.io.IOException;

       import java.io.PrintWriter;

       import javax.servlet.RequestDispatcher;

       import javax.servlet.ServletException;

       import javax.servlet.http.HttpServlet;

       import javax.servlet.http.HttpServletRequest;

       import javax.servlet.http.HttpServletResponse;

       import model.Stringtonum;

       import model.Triangle;

       public class TriangleMVC extends HttpServlet {

 

       public TriangleMVC() {super();}

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              String str=request.getParameter("boy");

              Stringtonum angle=new Stringtonum();

              boolean flag=false;

              RequestDispatcher dispatcher = null;

              Triangle tri=null;

              if(!angle.strtonum(str))

                     request.setAttribute("result", "请输入数字");

              else{

                     tri=new Triangle(angle.getNum1(),angle.getNum2(),angle.getNum3());

                     if(!tri.isTriangle())

                            request.setAttribute("result", "三边不能组成三角形");

                     else{

                            request.setAttribute("result", tri);

                            flag=true;

                            }

                     }

              if (flag ==false)

                     dispatcher= getServletContext().getRequestDispatcher(

                     "/trierror.jsp");

              else

                     dispatcher=getServletContext().getRequestDispatcher(

                                   "/trisucess.jsp");

              dispatcher.forward(request, response);

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              doGet(request,response);

              }

       }

       上面servlet设计中,其基本处理流程为:

       1、获取页面提交的数据(规格化的字符串)。

       2、调用业务类Stringtonum的功能,若字符串能转成三条边,则继续以下步骤;否则,进行页面跳转至trierror.jsp,并传值"请输入数字"。

       3、调用业务类Triangle的功能,若三条边能组成一个三角形,则继续以下步骤;否则,进行页面跳转至trierror.jsp,并传值"三边不能组成三角形"。

       4、进行页面跳转至trisucess.jsp,并把三角形实例(tri)传至该页面。

       JSP文件的参考代码如下。

       trierror.jsp

       <%@page contentType="text/html;charset=GB2312" %>

      

        

       <%=(String)request.getAttribute("result") %>

      

      

       trisucess.jsp

       <%@page contentType="text/html;charset=GB2312" %>

       <%@page  import="modle.*"%>

      

        

              <% Triangle tri=new Triangle();

              tri=(Triangle)request.getAttribute("result"); %>

      

您输入的三边是:

              
<%=tri.getEdge1()%>

        
<%=tri.getEdge2()%>

        
<%=tri.getEdge3()%>

             

三角形面积是:<%=tri.calArea()%>

             

        

       主页面trimvc.jsp

       <%@page contentType="text/html;charset=GB2312" %>

      

      

  请输入三角形的三个边的长度,输入的数字用逗号分割:

       

      

       

       送出" name=submit>

        

      

      

7.2.2 购物车MVC代码重构

       第五章设计了购物车,本节进行MVC模式代码重构。显然M层(JavaBean)保持原有设计不变。另外,由于采用MVC模式,不建议在V层调用M层,所以把购物车(car)放在session中,这是主要的变动。另外,把V层(JSP)拆分成V层和C层,主要任务是设计servlet(即:OderServlet和ModifyMVC)。MVC模式下购物车的流程图如下所示。图7-2:MVC模式下购物车流程图。

       先设计主页面goodsmvc.jsp,参考代码如下。

       <%@ page contentType="text/html;charset=GB2312" %>

      

      

      

网上书斋

      
    

         

         

    

      

   

   

   

      

    

    

    


      

    

    

    

      

    

序号	书名	价格	简介	订购
1	computer	12	简介	
   

  >
          

          订购 >

         

   

2	Cprogram	20	简介	
             

          

          订购>

         

    

3	database	30	简介	
     

          

          订购>

         

         


    

    

    购物详单



   主页面基本保持原有设计风格。但提交目的地由原来的JSP页面改为servlet (OrderServlet),另外,应用了一个JS技术,其目的让用户购买商品时多一次提醒和确认。

   lookmvc.jsp页面基本保持原有设计风格。同样,提交目的地由原来的JSP页面改为servlet(ModifyServlet)。代码如下。

       <%@ page contentType="text/html;charset=GB2312" %>

       <%@ page import="shop.*"%>

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

     

       

      

       trisucess.jsp

       <%@page contentType="text/html;charset=GB2312" %>

       <%@page  import="modle.*"%>

      

        

              <% Triangle tri=new Triangle();

              tri=(Triangle)request.getAttribute("result"); %>

      

您输入的三边是:

              
<%=tri.getEdge1()%>

        
<%=tri.getEdge2()%>

        
<%=tri.getEdge3()%>

             

三角形面积是:<%=tri.calArea()%>

             

        

       主页面trimvc.jsp

       <%@page contentType="text/html;charset=GB2312" %>

      

      

  请输入三角形的三个边的长度,输入的数字用逗号分割:

       

      

       

       送出" name=submit>

        

      

      

7.2.2 购物车MVC代码重构

       第五章设计了购物车,本节进行MVC模式代码重构。显然M层(JavaBean)保持原有设计不变。另外,由于采用MVC模式,不建议在V层调用M层,所以把购物车(car)放在session中,这是主要的变动。另外,把V层(JSP)拆分成V层和C层,主要任务是设计servlet(即:OderServlet和ModifyMVC)。MVC模式下购物车的流程图如下所示。图7-2:MVC模式下购物车流程图。

       先设计主页面goodsmvc.jsp,参考代码如下。

       <%@ page contentType="text/html;charset=GB2312" %>

      

      

      

网上书斋

      
    

         

         

    

      

   

   

   

      

    

    

    


      

    

    

    

      

    

序号	书名	价格	简介	订购
1	computer	12	简介	
   

  >
          

          订购 >

         

   

2	Cprogram	20	简介	
             

          

          订购>

         

    

3	database	30	简介	
     

          

          订购>

         

         


    

    

    购物详单



   主页面基本保持原有设计风格。但提交目的地由原来的JSP页面改为servlet (OrderServlet),另外,应用了一个JS技术,其目的让用户购买商品时多一次提醒和确认。

   lookmvc.jsp页面基本保持原有设计风格。同样,提交目的地由原来的JSP页面改为servlet(ModifyServlet)。代码如下。

       <%@ page contentType="text/html;charset=GB2312" %>

       <%@ page import="shop.*"%>

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

     

     

       <% car car1=(car)session.getAttribute("shop");

       if(car1==null){car1=new car();}//第一次;

     Vector v=car1.getV();%>

      

             
             

                    

                
      <% for(int i=0;i

              {   Book book=(Book)v.get(i);

                     out.println("

");
                     out.println("

");
                     out.println("

");
                     out.println("

");
                     out.println("

");
                     out.println("

");
                     }

              %>

      

序号
                    

书名
                    

价格
                    

数量
                    

删除
             

"+book.getBooknum()+"	"+book.getBookname()+"	"+book.getPrice()+"	");
                     out.println("                  value="+book.getNum()+">");

                     out.println("

");
                     String str=book.getBooknum();

                     out.println("");

                     out.println("


       提交>

      

      


       返回购物

      

      

       对于控制层(C层),主要设计二个servlet。分别是OrderServlet和ModifyMVC。其代码如下所示。

       OrderServlet.java

       package servlet;

       import java.io.IOException;

       import java.io.PrintWriter;

       import javax.servlet.RequestDispatcher;

       import javax.servlet.ServletException;

       import javax.servlet.http.*

       import shop.car;

       public class OrderServlet extends HttpServlet {

              public OrderServlet() {super();}

              public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

                     String goods=request.getParameter("goods");

                     HttpSession session=request.getSession();

                     car car1=(car)session.getAttribute("shop");

                   if(car1==null){ car1=new car();}//第一次;

                   car1.add(car1.newgoods(goods));

                   session.setAttribute("shop",car1);

                   RequestDispatcher dispatcher = null;

                   dispatcher=getServletContext().getRequestDispatcher("/goodsmvc.jsp");

                   dispatcher.forward(request, response);

                     }

              public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

                     doGet(request,response);

                     }

              }

       显然,OrderServlet完成了第五章解决方案中的success.jsp功能。

       ModifyMVC,java

       package servlet;

       import java.io.IOException;

       import java.io.PrintWriter;

       import javax.servlet.RequestDispatcher;

       import javax.servlet.ServletException;

       import javax.servlet.http.*;

       import shop.car;

       public class ModifyMVC extends HttpServlet {

       public ModifyMVC() {super();}

       public void doGet(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              HttpSession session=request.getSession();

              car car1=(car)session.getAttribute("shop");

              String str[]= request.getParameterValues("book");

              if(str!=null){

                     for(int i=0;ilength;i++)

                            car1.delete(str[i]);

                    }

              String strbook=null;

              String booknum=null;

              for(int n=0;n

                    strbook=car1.getBook(n).getBooknum();//书的编号(购物中心);

                    booknum=request.getParameter(strbook);//根据编号取出被修改的书的数量;

                    if(booknum==null)booknum="";

                    int num=Integer.parseInt(booknum);

                    car1.modify(strbook,num);//修改书的数量;

                    }

            RequestDispatcher dispatcher = null;

            dispatcher=getServletContext().getRequestDispatcher(

              "/lookmvc.jsp");

            dispatcher.forward(request, response);

       }

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

              doGet(request,response);

              }

       }

       显然,ModifyMVC完成了第五章解决方案中的modify.jsp功能。

7.2.3 项目结构图

       前节例子的工程结构图如下所示。图7-3 项目结构图
 

你可能感兴趣的:(设计模式,html,mvc,jsp,servlet)